Dotclear

Changeset 1436:c6aa788720c9


Ignore:
Timestamp:
08/18/13 00:20:56 (11 years ago)
Author:
Denis Jean-Christian <contact@…>
Branch:
Ticket#736
Children:
1437:71b7fa9efe46, 1438:d537e0a2100c
Message:

Write blowUp CSS into a public file on update, like images, fixes #736

Location:
plugins/blowupConfig
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • plugins/blowupConfig/_public.php

    r1179 r1436  
    2323     public static function publicHeadContent($core) 
    2424     { 
    25           echo '<style type="text/css">'."\n".self::blowUpStyleHelper()."\n</style>\n"; 
    26      } 
    27  
    28      public static function blowUpStyleHelper() 
    29      { 
    30           $s = $GLOBALS['core']->blog->settings->themes->blowup_style; 
    31  
    32           if ($s === null) { 
    33                return; 
    34           } 
    35  
    36           $s = @unserialize($s); 
    37           if (!is_array($s)) { 
    38                return; 
    39           } 
    40  
    41           $css = array(); 
    42  
    43           /* Sidebar position 
    44           ---------------------------------------------- */ 
    45           if ($s['sidebar_position'] == 'left') { 
    46                $css['#wrapper']['background-position'] = '-300px 0'; 
    47                $css['#main']['float'] = 'right'; 
    48                $css['#sidebar']['float'] = 'left'; 
    49           } 
    50  
    51           /* Properties 
    52           ---------------------------------------------- */ 
    53           self::prop($css,'body','background-color',$s['body_bg_c']); 
    54  
    55           self::prop($css,'body','color',$s['body_txt_c']); 
    56           self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']); 
    57           self::prop($css,'#page','font-size',$s['body_txt_s']); 
    58           self::prop($css,'body','font-family',blowupConfig::fontDef($s['body_txt_f'])); 
    59  
    60           self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']); 
    61  
    62           if (!$s['blog_title_hide']) 
    63           { 
    64                self::prop($css,'#top h1 a','color',$s['blog_title_c']); 
    65                self::prop($css,'#top h1','font-size',$s['blog_title_s']); 
    66                self::prop($css,'#top h1','font-family',blowupConfig::fontDef($s['blog_title_f'])); 
    67  
    68                if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') { 
    69                     $css['#top h1'][$s['blog_title_a']] = '0px'; 
    70                     $css['#top h1']['width'] = 'auto'; 
    71                } 
    72  
    73                if ($s['blog_title_p']) 
    74                { 
    75                     $_p = explode(':',$s['blog_title_p']); 
    76                     $css['#top h1']['top'] = $_p[1].'px'; 
    77                     if ($s['blog_title_a'] != 'center') { 
    78                          $_a = $s['blog_title_a'] == 'right' ? 'right' : 'left'; 
    79                          $css['#top h1'][$_a] = $_p[0].'px'; 
    80                     } 
    81                } 
    82           } 
    83           else 
    84           { 
    85                self::prop($css,'#top h1 span','text-indent','-5000px'); 
    86                self::prop($css,'#top h1','top','0px'); 
    87                $css['#top h1 a'] = array( 
    88                     'display' => 'block', 
    89                     'height' => $s['top_height'] ? ($s['top_height']-10).'px' : '120px', 
    90                     'width' => '800px' 
    91                ); 
    92           } 
    93           self::prop($css,'#top','height',$s['top_height']); 
    94  
    95           self::prop($css,'.day-date','color',$s['date_title_c']); 
    96           self::prop($css,'.day-date','font-family',blowupConfig::fontDef($s['date_title_f'])); 
    97           self::prop($css,'.day-date','font-size',$s['date_title_s']); 
    98  
    99           self::prop($css,'a','color',$s['body_link_c']); 
    100           self::prop($css,'a:visited','color',$s['body_link_v_c']); 
    101           self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']); 
    102  
    103           self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']); 
    104           self::prop($css,'#comment-form input.preview','color',$s['body_link_c']); 
    105           self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']); 
    106           self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']); 
    107           self::prop($css,'#comment-form input.submit','color',$s['body_link_c']); 
    108           self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']); 
    109           self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']); 
    110  
    111           self::prop($css,'#sidebar','font-family',blowupConfig::fontDef($s['sidebar_text_f'])); 
    112           self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']); 
    113           self::prop($css,'#sidebar','color',$s['sidebar_text_c']); 
    114  
    115           self::prop($css,'#sidebar h2','font-family',blowupConfig::fontDef($s['sidebar_title_f'])); 
    116           self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']); 
    117           self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']); 
    118  
    119           self::prop($css,'#sidebar h3','font-family',blowupConfig::fontDef($s['sidebar_title2_f'])); 
    120           self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']); 
    121           self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']); 
    122  
    123           self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']); 
    124           self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']); 
    125           self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']); 
    126  
    127           self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']); 
    128           self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']); 
    129           self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']); 
    130           self::prop($css,'#search input','color',$s['sidebar_link_c']); 
    131           self::prop($css,'#search .submit','color',$s['sidebar_link_c']); 
    132           self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']); 
    133           self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']); 
    134  
    135           self::prop($css,'.post-title','color',$s['post_title_c']); 
    136           self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']); 
    137           self::prop($css,'.post-title','font-family',blowupConfig::fontDef($s['post_title_f'])); 
    138           self::prop($css,'.post-title','font-size',$s['post_title_s']); 
    139  
    140           self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']); 
    141           self::prop($css,'#comments dd','color',$s['post_comment_c']); 
    142           self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']); 
    143           self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']); 
    144  
    145           self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']); 
    146  
    147           self::prop($css,'#footer p','background-color',$s['footer_bg_c']); 
    148           self::prop($css,'#footer p','color',$s['footer_c']); 
    149           self::prop($css,'#footer p','font-size',$s['footer_s']); 
    150           self::prop($css,'#footer p','font-family',blowupConfig::fontDef($s['footer_f'])); 
    151           self::prop($css,'#footer p a','color',$s['footer_l_c']); 
    152  
    153           /* Images 
    154           ------------------------------------------------------ */ 
    155           self::backgroundImg($css,'body',$s['body_bg_c'],'body-bg.png'); 
    156           self::backgroundImg($css,'body',$s['body_bg_g'] != 'light','body-bg.png'); 
    157           self::backgroundImg($css,'body',$s['prelude_c'],'body-bg.png'); 
    158           self::backgroundImg($css,'#top',$s['body_bg_c'],'page-t.png'); 
    159           self::backgroundImg($css,'#top',$s['body_bg_g'] != 'light','page-t.png'); 
    160           self::backgroundImg($css,'#top',$s['uploaded'] || $s['top_image'],'page-t.png'); 
    161           self::backgroundImg($css,'#footer',$s['body_bg_c'],'page-b.png'); 
    162           self::backgroundImg($css,'#comments dt',$s['post_comment_bg_c'],'comment-t.png'); 
    163           self::backgroundImg($css,'#comments dd',$s['post_comment_bg_c'],'comment-b.png'); 
    164           self::backgroundImg($css,'#comments dt.me',$s['post_commentmy_bg_c'],'commentmy-t.png'); 
    165           self::backgroundImg($css,'#comments dd.me',$s['post_commentmy_bg_c'],'commentmy-b.png'); 
    166  
    167           $res = ''; 
    168           foreach ($css as $selector => $values) { 
    169                $res .= $selector." {\n"; 
    170                foreach ($values as $k => $v) { 
    171                     $res .= $k.':'.$v.";\n"; 
    172                } 
    173                $res .= "}\n"; 
    174           } 
    175  
    176           $res .= $s['extra_css']; 
    177  
    178           return $res; 
    179      } 
    180  
    181      protected static function prop(&$css,$selector,$prop,$value) 
    182      { 
    183           if ($value) { 
    184                $css[$selector][$prop] = $value; 
    185           } 
    186      } 
    187  
    188      protected static function backgroundImg(&$css,$selector,$value,$image) 
    189      { 
    190           $file = blowupConfig::imagesPath().'/'.$image; 
    191           if ($value && file_exists($file)){ 
    192                $css[$selector]['background-image'] = 'url('.blowupConfig::imagesURL().'/'.$image.')'; 
     25          $url = blowupConfig::publicCssUrlHelper(); 
     26          if ($url) { 
     27               echo '<link rel="stylesheet" href="'.$url.'" type="text/css" />'; 
    19328          } 
    19429     } 
  • plugins/blowupConfig/index.php

    r1358 r1436  
    1515 
    1616$can_write_images = blowupConfig::canWriteImages(); 
     17$can_write_css = blowupConfig::canWriteCss(); 
    1718 
    1819if ($core->error->flag()) { 
     
    188189               $blowup_user['prelude_c'] = blowupConfig::adjustColor($_POST['prelude_c']); 
    189190               blowupConfig::createImages($blowup_user,$uploaded); 
     191          } 
     192 
     193          if ($can_write_css) 
     194          { 
     195               blowupConfig::createCss($blowup_user); 
    190196          } 
    191197 
  • plugins/blowupConfig/lib/class.blowup.config.php

    r1179 r1436  
    141141     } 
    142142 
     143     public static function cssPath() 
     144     { 
     145          global $core; 
     146          return path::real($core->blog->public_path).'/blowup-css'; 
     147     } 
     148 
     149     public static function cssURL() 
     150     { 
     151          global $core; 
     152          return $core->blog->settings->system->public_url.'/blowup-css'; 
     153     } 
     154 
     155     public static function canWriteCss($create=false) 
     156     { 
     157          global $core; 
     158 
     159          $public = path::real($core->blog->public_path); 
     160          $css = self::cssPath(); 
     161 
     162          if (!is_dir($public)) { 
     163               $core->error->add(__('The \'public\' directory does not exist.')); 
     164               return false; 
     165          } 
     166 
     167          if (!is_dir($css)) { 
     168               if (!is_writable($public)) { 
     169                    $core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public')); 
     170                    return false; 
     171               } 
     172               if ($create) { 
     173                    files::makeDir($css); 
     174               } 
     175               return true; 
     176          } 
     177 
     178          if (!is_writable($css)) { 
     179               $core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-css')); 
     180               return false; 
     181          } 
     182 
     183          return true; 
     184     } 
     185 
     186     public static function createCss($s) 
     187     { 
     188          global $core; 
     189           
     190          if ($s === null) { 
     191               return; 
     192          } 
     193 
     194          $css = array(); 
     195 
     196          /* Sidebar position 
     197          ---------------------------------------------- */ 
     198          if ($s['sidebar_position'] == 'left') { 
     199               $css['#wrapper']['background-position'] = '-300px 0'; 
     200               $css['#main']['float'] = 'right'; 
     201               $css['#sidebar']['float'] = 'left'; 
     202          } 
     203 
     204          /* Properties 
     205          ---------------------------------------------- */ 
     206          self::prop($css,'body','background-color',$s['body_bg_c']); 
     207 
     208          self::prop($css,'body','color',$s['body_txt_c']); 
     209          self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']); 
     210          self::prop($css,'#page','font-size',$s['body_txt_s']); 
     211          self::prop($css,'body','font-family',self::fontDef($s['body_txt_f'])); 
     212 
     213          self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']); 
     214 
     215          if (!$s['blog_title_hide']) 
     216          { 
     217               self::prop($css,'#top h1 a','color',$s['blog_title_c']); 
     218               self::prop($css,'#top h1','font-size',$s['blog_title_s']); 
     219               self::prop($css,'#top h1','font-family',self::fontDef($s['blog_title_f'])); 
     220 
     221               if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') { 
     222                    $css['#top h1'][$s['blog_title_a']] = '0px'; 
     223                    $css['#top h1']['width'] = 'auto'; 
     224               } 
     225 
     226               if ($s['blog_title_p']) 
     227               { 
     228                    $_p = explode(':',$s['blog_title_p']); 
     229                    $css['#top h1']['top'] = $_p[1].'px'; 
     230                    if ($s['blog_title_a'] != 'center') { 
     231                         $_a = $s['blog_title_a'] == 'right' ? 'right' : 'left'; 
     232                         $css['#top h1'][$_a] = $_p[0].'px'; 
     233                    } 
     234               } 
     235          } 
     236          else 
     237          { 
     238               self::prop($css,'#top h1 span','text-indent','-5000px'); 
     239               self::prop($css,'#top h1','top','0px'); 
     240               $css['#top h1 a'] = array( 
     241                    'display' => 'block', 
     242                    'height' => $s['top_height'] ? ($s['top_height']-10).'px' : '120px', 
     243                    'width' => '800px' 
     244               ); 
     245          } 
     246          self::prop($css,'#top','height',$s['top_height']); 
     247 
     248          self::prop($css,'.day-date','color',$s['date_title_c']); 
     249          self::prop($css,'.day-date','font-family',self::fontDef($s['date_title_f'])); 
     250          self::prop($css,'.day-date','font-size',$s['date_title_s']); 
     251 
     252          self::prop($css,'a','color',$s['body_link_c']); 
     253          self::prop($css,'a:visited','color',$s['body_link_v_c']); 
     254          self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']); 
     255 
     256          self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']); 
     257          self::prop($css,'#comment-form input.preview','color',$s['body_link_c']); 
     258          self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']); 
     259          self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']); 
     260          self::prop($css,'#comment-form input.submit','color',$s['body_link_c']); 
     261          self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']); 
     262          self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']); 
     263 
     264          self::prop($css,'#sidebar','font-family',self::fontDef($s['sidebar_text_f'])); 
     265          self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']); 
     266          self::prop($css,'#sidebar','color',$s['sidebar_text_c']); 
     267 
     268          self::prop($css,'#sidebar h2','font-family',self::fontDef($s['sidebar_title_f'])); 
     269          self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']); 
     270          self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']); 
     271 
     272          self::prop($css,'#sidebar h3','font-family',self::fontDef($s['sidebar_title2_f'])); 
     273          self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']); 
     274          self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']); 
     275 
     276          self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']); 
     277          self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']); 
     278          self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']); 
     279 
     280          self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']); 
     281          self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']); 
     282          self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']); 
     283          self::prop($css,'#search input','color',$s['sidebar_link_c']); 
     284          self::prop($css,'#search .submit','color',$s['sidebar_link_c']); 
     285          self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']); 
     286          self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']); 
     287 
     288          self::prop($css,'.post-title','color',$s['post_title_c']); 
     289          self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']); 
     290          self::prop($css,'.post-title','font-family',self::fontDef($s['post_title_f'])); 
     291          self::prop($css,'.post-title','font-size',$s['post_title_s']); 
     292 
     293          self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']); 
     294          self::prop($css,'#comments dd','color',$s['post_comment_c']); 
     295          self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']); 
     296          self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']); 
     297 
     298          self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']); 
     299 
     300          self::prop($css,'#footer p','background-color',$s['footer_bg_c']); 
     301          self::prop($css,'#footer p','color',$s['footer_c']); 
     302          self::prop($css,'#footer p','font-size',$s['footer_s']); 
     303          self::prop($css,'#footer p','font-family',self::fontDef($s['footer_f'])); 
     304          self::prop($css,'#footer p a','color',$s['footer_l_c']); 
     305 
     306          /* Images 
     307          ------------------------------------------------------ */ 
     308          self::backgroundImg($css,'body',$s['body_bg_c'],'body-bg.png'); 
     309          self::backgroundImg($css,'body',$s['body_bg_g'] != 'light','body-bg.png'); 
     310          self::backgroundImg($css,'body',$s['prelude_c'],'body-bg.png'); 
     311          self::backgroundImg($css,'#top',$s['body_bg_c'],'page-t.png'); 
     312          self::backgroundImg($css,'#top',$s['body_bg_g'] != 'light','page-t.png'); 
     313          self::backgroundImg($css,'#top',$s['uploaded'] || $s['top_image'],'page-t.png'); 
     314          self::backgroundImg($css,'#footer',$s['body_bg_c'],'page-b.png'); 
     315          self::backgroundImg($css,'#comments dt',$s['post_comment_bg_c'],'comment-t.png'); 
     316          self::backgroundImg($css,'#comments dd',$s['post_comment_bg_c'],'comment-b.png'); 
     317          self::backgroundImg($css,'#comments dt.me',$s['post_commentmy_bg_c'],'commentmy-t.png'); 
     318          self::backgroundImg($css,'#comments dd.me',$s['post_commentmy_bg_c'],'commentmy-b.png'); 
     319 
     320          $res = ''; 
     321          foreach ($css as $selector => $values) { 
     322               $res .= $selector." {\n"; 
     323               foreach ($values as $k => $v) { 
     324                    $res .= $k.':'.$v.";\n"; 
     325               } 
     326               $res .= "}\n"; 
     327          } 
     328 
     329          $res .= $s['extra_css']; 
     330 
     331          if (!self::canWriteCss(true)) { 
     332               throw new Exception(__('Unable to create css file.')); 
     333          } 
     334 
     335          # erase old css file 
     336          self::dropCss($core->blog->settings->system->theme); 
     337 
     338          # create new css file into public blowup-css subdirectory 
     339          self::writeCss($core->blog->settings->system->theme, $res); 
     340 
     341          return $res; 
     342     } 
     343 
     344     protected static function prop(&$css,$selector,$prop,$value) 
     345     { 
     346          if ($value) { 
     347               $css[$selector][$prop] = $value; 
     348          } 
     349     } 
     350 
     351     protected static function backgroundImg(&$css,$selector,$value,$image) 
     352     { 
     353          $file = self::imagesPath().'/'.$image; 
     354          if ($value && file_exists($file)){ 
     355               $css[$selector]['background-image'] = 'url('.self::imagesURL().'/'.$image.')'; 
     356          } 
     357     } 
     358 
     359     private static function writeCss($theme,$css) 
     360     { 
     361          file_put_contents(self::cssPath().'/'.$theme.'.css', $css); 
     362     } 
     363      
     364     public static function dropCss($theme) 
     365     { 
     366          $file = path::real(self::cssPath().'/'.$theme.'.css'); 
     367          if (is_writable(dirname($file))) { 
     368               @unlink($file); 
     369          } 
     370     } 
     371 
     372     public static function publicCssUrlHelper() 
     373     { 
     374          $theme = $GLOBALS['core']->blog->settings->system->theme; 
     375          $url = blowupConfig::cssURL(); 
     376          $path = blowupConfig::cssPath(); 
     377 
     378          if (file_exists($path.'/'.$theme.'.css')) { 
     379               return $url.'/'.$theme.'.css'; 
     380          } 
     381 
     382          return null; 
     383     } 
     384 
    143385     public static function imagesPath() 
    144386     { 
Note: See TracChangeset for help on using the changeset viewer.

Sites map