theme-settings: hide custom settings if the scheme overwrites it - fixes https:/...
authorrabuzarus <>
Thu, 28 Apr 2016 23:49:09 +0000 (01:49 +0200)
committerrabuzarus <>
Thu, 28 Apr 2016 23:49:09 +0000 (01:49 +0200)
Note: this isn't a very beautiful solution since the schema developer have to list all overwriting variables in the schema header. We need a better solution for this.

config.php
php/schema.php [new file with mode: 0644]
schema/love-music.php
schema/red.php
templates/theme_settings.tpl

index 6456133..0fad473 100644 (file)
@@ -32,6 +32,11 @@ function theme_post(&$a) {
 }
 
 function frio_form(&$a, $arr) {
+       require_once("view/theme/frio/php/schema.php");
+       
+       $scheme_info = get_schema_info($arr["schema"]);
+       $disable = $scheme_info["overwrites"];
+
        $scheme_choices = array();
        $scheme_choices["---"] = t("Default");
        $files = glob('view/theme/frio/schema/*.php');
@@ -52,12 +57,12 @@ function frio_form(&$a, $arr) {
                '$baseurl'              => $a->get_baseurl(),
                '$title'                => t("Theme settings"),
                '$schema'               => array('frio_schema',         t("Select scheme"),                     $arr["schema"], '', $scheme_choices),
-               '$nav_bg'               => array('frio_nav_bg',         t('Navigation bar background color'),   $arr['nav_bg']),
-               '$nav_icon_color'       => array('frio_nav_icon_color', t('Navigation bar icon color '),        $arr['nav_icon_color']),
-               '$link_color'           => array('frio_link_color',     t('Link color'),                        $arr['link_color'],             '', $link_colors),
-               '$bgcolor'              => array('frio_background_color', t('Set the background color'),        $arr['bgcolor']),
-               '$contentbg_transp'     => array('frio_contentbg_transp', t("Content background transparency"), ($arr["contentbg_transp"] ? $arr["contentbg_transp"] : 0 )),
-               '$background_image'     => array('frio_background_image', t('Set the background image'),        $arr['background_image']),
+               '$nav_bg'               => array_key_exists("nav_bg", $disable) ? "" : array('frio_nav_bg',             t('Navigation bar background color'),   $arr['nav_bg']),
+               '$nav_icon_color'       => array_key_exists("nav_icon_color", $disable) ? "" : array('frio_nav_icon_color', t('Navigation bar icon color '),    $arr['nav_icon_color']),
+               '$link_color'           => array_key_exists("link_color", $disable) ? "" : array('frio_link_color',     t('Link color'),                        $arr['link_color'],             '', $link_colors),
+               '$bgcolor'              => array_key_exists("bgcolor", $disable) ? "" : array('frio_background_color', t('Set the background color'),   $arr['bgcolor']),
+               '$contentbg_transp'     => array_key_exists("contentbg_transp", $disable) ? "" : array('frio_contentbg_transp', t("Content background transparency"), ($arr["contentbg_transp"] ? $arr["contentbg_transp"] : 0 )),
+               '$background_image'     => array_key_exists("background_image", $disable ) ? "" : array('frio_background_image', t('Set the background image'), $arr['background_image']),
                '$bg_image_options'     => Image::get_options($arr),
        ));
 
diff --git a/php/schema.php b/php/schema.php
new file mode 100644 (file)
index 0000000..be3a3bc
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+
+/**
+ * @brief: Get info header of the shema
+ * 
+ * This function parses the header of the shemename.php file for inormations like
+ * Author, Description and Overwrites. Most of the code comes from the get_plugin_info()
+ * function. We use this to get the variables which get overwritten through the shema.
+ * All color variables which get overwritten through the theme have to be
+ * listed (comma seperated) in the shema header under Overwrites:
+ * This seemst not to be the best solution. We need to investigate further.
+ * 
+ * @param string $schema Name of the shema
+ * @return array With theme information
+ *    'author' => Author Name
+ *    'description' => Schema description
+ *    'version' => Schema version
+ *    'overwrites' => Variables which overwriting custom settings
+ */
+function get_schema_info($schema){
+
+       $theme = current_theme();
+       $themepath = "view/theme/" . $theme . "/";
+       $schema = get_pconfig(local_user(),'frio', 'schema');
+
+       $info=Array(
+               'name' => $schema,
+               'description' => "",
+               'author' => array(),
+               'version' => "",
+               'overwrites' => ""
+       );
+
+       if (!is_file($themepath . "schema/" . $schema . ".php")) return $info;
+
+       $f = file_get_contents($themepath . "schema/" . $schema . ".php");
+
+       $r = preg_match("|/\*.*\*/|msU", $f, $m);
+
+       if ($r){
+               $ll = explode("\n", $m[0]);
+               foreach( $ll as $l ) {
+                       $l = trim($l,"\t\n\r */");
+                       if ($l!=""){
+                               list($k,$v) = array_map("trim", explode(":",$l,2));
+                               $k= strtolower($k);
+                               if ($k=="author"){
+                                       $r=preg_match("|([^<]+)<([^>]+)>|", $v, $m);
+                                       if ($r) {
+                                               $info['author'][] = array('name'=>$m[1], 'link'=>$m[2]);
+                                       } else {
+                                               $info['author'][] = array('name'=>$v);
+                                       }
+                               } elseif ($k == "overwrites") {
+                                       $theme_settings = explode(',',str_replace(' ','', $v));
+                                       foreach ($theme_settings as $key => $value) {
+                                               $info["overwrites"][$value] = true;
+                                       }
+                               } else {
+                                       if (array_key_exists($k,$info)){
+                                               $info[$k]=$v;
+                                       }
+                               }
+
+                       }
+               }
+
+       }
+       return $info;
+}
index 8908057..528093e 100644 (file)
@@ -1,6 +1,7 @@
 <?php
        /* Licence: AGP
         * Author: rabuzarus
+        * Overwrites: nav_bg, nav_icon_color, link_color, bgcolor, contentbg_transp, background_image, bg_image_option, link_hover_color
         */
 
        $nav_bg = "#000";
index c56ca7a..540bc39 100644 (file)
@@ -1,5 +1,11 @@
 <?php
-
+/*
+ * Name: Red
+ * Author: Rabuzarus
+ * 
+ * List here all variables which will get overwritten through this schema
+ * Overwrites: nav_bg, nav_icon_color, link_color, bgcolor, contentbg_transp
+ */
 
        $nav_bg = "#870000";
        $nav_icon_color = "#f5f5f5";
index 05e64c4..55a2b33 100644 (file)
@@ -4,21 +4,23 @@
 
 {{include file="field_select.tpl" field=$schema}}
 
-{{include file="field_colorinput.tpl" field=$nav_bg}}
-{{include file="field_colorinput.tpl" field=$nav_icon_color}}
-{{include file="field_colorinput.tpl" field=$link_color}}
+{{if $nav_bg}}{{include file="field_colorinput.tpl" field=$nav_bg}}{{/if}}
+{{if $nav_icon_color}}{{include file="field_colorinput.tpl" field=$nav_icon_color}}{{/if}}
+{{if $link_color}}{{include file="field_colorinput.tpl" field=$link_color}}{{/if}}
 
-{{include file="field_colorinput.tpl" field=$bgcolor}}
+{{if $bgcolor}}{{include file="field_colorinput.tpl" field=$bgcolor}}{{/if}}
 
 {{* The slider for the content opacity - We use no template for this since it is only used at this page *}}
+{{if $contentbg_transp}}
 <div class="form-group field input color">
        <label for="id_{{$contentbg_transp.0}}" id="label_{{$contentbg_transp.0}}">{{$contentbg_transp.1}}</label>
        <input type="hidden" class="form-control color slider-input" name="{{$contentbg_transp.0}}" id="{{$contentbg_transp.0}}" type="text" value="{{$contentbg_transp.2}}">
        <span id="help_{{$contentbg_transp.0}}" class="help-block">{{$contentbg_transp.3}}</span>
        <div id="end_{{$contentbg_transp.0}}" class="field_end"></div>
 </div>
+{{/if}}
 
-{{include file="field_colorinput.tpl" field=$background_image}}
+{{if $background_image}}{{include file="field_colorinput.tpl" field=$background_image}}{{/if}}
 
 <div id="frio_bg_image_options" style="display: none;">
 {{foreach $bg_image_options as $options}}