[ Index ] [ Index ]     [ Classes ]     [ Functions ]     [ Variables ]     [ Constants ]

PHP Cross Reference of TXP stable 4.0.6

title

Body

[close]

/textpattern/include/ -> txp_css.php (source)

   1  <?php
   2  
   3  /*
   4  $HeadURL: http://svn.textpattern.com/releases/4.0.6/source/textpattern/include/txp_css.php $
   5  $LastChangedRevision: 2730 $
   6  */
   7  
   8      if (!defined('txpinterface')) die('txpinterface is undefined.');
   9  
  10      if ($event == 'css') {
  11          require_privs('css');
  12      
  13          switch ($step) {
  14              case '': css_edit(); break;
  15              case 'css_edit_raw': css_edit();           break;
  16              case 'css_edit_form': css_edit();          break;
  17              case 'pour': css_edit();                   break;
  18              case 'css_save': css_save();               break;
  19              case 'css_copy': css_copy();               break;
  20              case 'css_save_as': css_save_as();         break;
  21              case 'css_save_posted': css_save_posted(); break;
  22              case 'css_delete': css_delete();           break;
  23              case 'css_edit': css_edit();               break;
  24              case 'del_dec': css_edit();                break;
  25              case 'add_dec': css_edit();                break;
  26              case 'add_sel': css_edit();
  27          }
  28      }
  29  
  30  //-------------------------------------------------------------
  31  
  32  	function css_list($current, $default) {    
  33          $out[] = startTable('list', 'left');    
  34  
  35          $rs = safe_rows_start('name', 'txp_css', "1=1");
  36  
  37          if ($rs) {
  38              while ($a = nextRow($rs)) {
  39                  extract($a);
  40  
  41                  $edit = ($current != $name) ?    eLink('css', '', 'name', $name, $name) : $name;
  42                  $delete = ($name != $default) ? dLink('css', 'css_delete', 'name', $name) : '';
  43  
  44                  $out[] = tr(td($edit).td($delete));
  45              }
  46  
  47              $out[] =  endTable();
  48  
  49              return join('', $out);
  50          }
  51      }
  52  
  53  //-------------------------------------------------------------
  54  	function css_edit($message='')
  55      {
  56          pagetop(gTxt("edit_css"),$message);
  57          global $step,$prefs;
  58          if (!$step or $step == 'css_save'){
  59  
  60              if ($prefs['edit_raw_css_by_default']) {
  61                  css_edit_raw();
  62              } else {
  63                  css_edit_form();
  64              }    
  65  
  66          } else {
  67  
  68              if ($step=='css_edit_raw' or $step=='pour' or ($step=='css_delete' && $prefs['edit_raw_css_by_default'])) {
  69                  css_edit_raw();
  70              } else {
  71                  css_edit_form();
  72              }
  73          }
  74      }
  75  
  76  // -------------------------------------------------------------
  77  
  78  	function css_edit_form() {
  79          global $step;
  80  
  81          $name = gps('name');
  82  
  83          $default_name = safe_field('css', 'txp_section', "name = 'default'");
  84  
  85          $name = (!$name or $step == 'css_delete') ? $default_name : $name;
  86  
  87          if (gps('copy') && trim(preg_replace('/[<>&"\']/', '', gps('newname'))) )
  88              $name = gps('newname');
  89          $css = base64_decode(fetch("css",'txp_css','name',$name));
  90          $css = parseCSS($css);
  91          
  92          $css = ($step == 'add_dec') ? add_declaration($css) : $css;
  93          $css = ($step == 'del_dec') ? delete_declaration($css) : $css;
  94          $css = ($step == 'add_sel') ? addSel($css) : $css;
  95  
  96          $right = 
  97          hed(gTxt('all_stylesheets'),2).
  98          css_list($name, $default_name);
  99  
 100          $left = graf(gTxt('you_are_editing_css').br.strong($name)).
 101              graf(eLink('css', 'css_edit_raw', 'name', $name, gTxt('edit_raw_css'))).
 102              graf(sLink('css', 'pour', gTxt('bulkload_existing_css'))); 
 103  
 104          $out[] = startTable('css-edit', '', '', 3);
 105          
 106          $out[] = 
 107          tr(
 108              td(strong(gTxt('css_selector'))).
 109              td(strong(gTxt('css_property_value')))
 110          );
 111          
 112          $i = -1;
 113          foreach($css as $selector=>$propvals) {
 114              $out[] = n.'<tr>'.n.
 115                  td(fInput('text',++$i,$selector,'css')
 116                  .' '.aLink('css','add_dec','selector',$selector,'name',$name)
 117                  ,'', 'selector','s'.$i);
 118              if(is_array($propvals))
 119              {
 120                  $out[] = n.t.'<td class="selector2">';
 121                  $ii = -1;
 122                  foreach($propvals as $property=>$value)
 123                  {
 124                      $out[] = fInput('text',$i.'-'.++$ii.'p',$property,'css'). ' '
 125                      .fInput('text',$i.'-'.$ii.'v',ltrim($value),'css').' '
 126                      .dLink('css','del_dec','declaration',$i.'-'.$ii,'','name',$name,1).br;
 127                  }
 128              $out[] = '</td>'.n.'</tr>';
 129           }
 130          }
 131          
 132          $out[] = tr(tdcs(fInput('submit','',gTxt('save'),'publish'),2)).
 133          endTable().eInput('css').sInput('css_save_posted').hInput('name',$name);
 134          
 135          echo 
 136          startTable('edit').
 137          tr(
 138              tdtl(
 139                  $left
 140              ).
 141              td(
 142                  form(
 143                      graf(
 144                          gTxt('add_new_selector').': '.sp.
 145                          fInput('text','selector','','css').sp.
 146                          fInput('submit','add_sel',gTxt('submit'),'smallerbox').
 147                          eInput('css') . sInput('add_sel') . hInput('name',$name)
 148                      )
 149                  ).
 150                  form(join('',$out)).
 151  
 152                  form(
 153                      graf(
 154                          gTxt('copy_css_as').sp.fInput('text', 'newname', '', 'edit').sp.
 155                          fInput('submit', 'copy', gTxt('copy'), 'smallerbox').
 156                          eInput('css').
 157                          sInput('css_copy').
 158                          hInput('oldname', $name).
 159                          hInput('name', $name)
 160                      )
 161                  )
 162              ).
 163              tdtl(
 164                  $right
 165              )
 166          ).
 167          endTable();
 168      
 169      }
 170  
 171  //-------------------------------------------------------------
 172  
 173  	function css_edit_raw() {
 174          global $step;
 175  
 176          $name = gps('name');
 177  
 178          $default_name = safe_field('css', 'txp_section', "name = 'default'");
 179  
 180          $name = (!$name or $step == 'css_delete') ? $default_name : $name;
 181  
 182          if (gps('copy') && trim(preg_replace('/[<>&"\']/', '', gps('newname'))) )
 183              $name = gps('newname');
 184  
 185          if ($step=='pour') 
 186          {
 187              $buttons = 
 188              gTxt('name_for_this_style').': '
 189              .fInput('text','newname','','edit','','',20).
 190              hInput('savenew','savenew');
 191              $thecss = '';
 192  
 193          } else {
 194              $buttons = '';
 195              $thecss = base64_decode(fetch("css",'txp_css','name',$name));
 196          }
 197      
 198          if ($step!='pour') {
 199  
 200              $left = graf(gTxt('you_are_editing_css').br.strong($name)).
 201                  graf(eLink('css', 'css_edit_form', 'name', $name, gTxt('edit_css_in_form'))).
 202                  graf(sLink('css', 'pour', gTxt('bulkload_existing_css')));
 203              
 204              $copy = gTxt('copy_css_as').sp.fInput('text', 'newname', '', 'edit').sp.
 205                  fInput('submit', 'copy', gTxt('copy'), 'smallerbox');        
 206          } else {
 207              $left = '&nbsp;';
 208              $copy = '';
 209          }
 210  
 211          $right = 
 212          hed(gTxt('all_stylesheets'),2).
 213          css_list($name, $default_name);
 214  
 215          echo 
 216          startTable('edit').
 217          tr(
 218              tdtl(
 219                  $left
 220              ).
 221              td(
 222                  form(
 223                      graf($buttons).
 224                      '<textarea id="css" class="code" name="css" cols="78" rows="32">'.htmlspecialchars($thecss).'</textarea>'.br.
 225                      fInput('submit','',gTxt('save'),'publish').
 226                      eInput('css').sInput('css_save').
 227                      hInput('name',$name)
 228                      .$copy
 229                  )
 230              ).
 231              tdtl(
 232                  $right
 233              )
 234          ).
 235          endTable();
 236          
 237      }
 238  
 239  // -------------------------------------------------------------
 240  	function parseCSS($css) // parse raw css into a multidimensional array
 241      {
 242          $css = preg_replace("/\/\*.+\*\//Usi","",$css); // remove comments
 243          $selectors = preg_replace('/\s+/',' ',strip_rn(explode("}",$css)));
 244          foreach($selectors as $selector) { 
 245              if(trim($selector)) {
 246              list($keystr,$codestr) = explode("{",$selector);
 247                  if (trim($keystr)) {
 248                      $codes = explode(";",trim($codestr));
 249                      foreach ($codes as $code) {
 250                          if (trim($code)) {
 251                              list($property,$value) = explode(":",$code,2);
 252                              $out[trim($keystr)][trim($property)] = trim($value);
 253                          } 
 254                      }
 255                  }
 256              }
 257          }
 258          return (isset($out)) ? $out : array();
 259      }
 260  
 261  // -------------------------------------------------------------
 262  	function parsePostedCSS() //turn css info delivered by editor form into an array
 263      {
 264          $post = (MAGIC_QUOTES_GPC) ? doStrip($_POST) : $_POST;
 265          foreach($post as $a=>$b){
 266              if (preg_match("/^\d+$/",$a)) {
 267                  $selector = $b;
 268              }
 269              if (preg_match("/^\d+-\d+(?:p|v)$/",$a)) {
 270                  if(strstr($a,'p')) {
 271                      $property = $b;
 272                  } else {
 273                      if(trim($property) && trim($selector)) {
 274                          $out[$selector][$property] = $b;
 275                      }
 276                  }
 277              }
 278          }
 279          return (isset($out)) ? $out : array();
 280      }
 281      
 282  // -------------------------------------------------------------
 283  
 284  	function css_copy()
 285      {
 286          extract(gpsa(array('oldname', 'newname')));
 287  
 288          $css = doSlash(fetch('css', 'txp_css', 'name', $oldname));
 289  
 290          $rs = safe_insert('txp_css', "css = '$css', name = '".doSlash($newname)."'");
 291  
 292          css_edit(
 293              gTxt('css_created', array('{name}' => $newname))
 294          );
 295      }
 296  
 297  // -------------------------------------------------------------
 298  
 299  	function css_save_posted() 
 300      {
 301          $name = gps('name');
 302          $css  = parsePostedCSS();
 303          $css  = doSlash(base64_encode(css_format($css)));
 304  
 305          safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
 306  
 307          // update site last mod time
 308          update_lastmod(); 
 309  
 310          $message = gTxt('css_updated', array('{name}' => $name));
 311  
 312          css_edit($message);
 313      }
 314  
 315  //-------------------------------------------------------------
 316  
 317  	function css_save()
 318      {
 319          extract(gpsa(array('name','css','savenew','newname','copy')));
 320          $css = doSlash(base64_encode($css));
 321  
 322          if ($savenew or $copy)
 323          {
 324              $newname = doSlash(trim(preg_replace('/[<>&"\']/', '', gps('newname'))));
 325  
 326              if ($newname and safe_field('name', 'txp_css', "name = '$newname'"))
 327              {
 328                  $message = gTxt('css_already_exists', array('{name}' => $newname));
 329              }
 330  
 331              elseif ($newname) 
 332              {
 333                  safe_insert('txp_css', "name = '".$newname."', css = '$css'");
 334  
 335                  // update site last mod time
 336                  update_lastmod(); 
 337  
 338                  $message = gTxt('css_created', array('{name}' => $newname));
 339              }
 340  
 341              else
 342              {
 343                  $message = gTxt('css_name_required');
 344              }
 345  
 346              css_edit($message);
 347          }
 348  
 349          else
 350          {
 351              safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
 352  
 353              // update site last mod time
 354              update_lastmod(); 
 355  
 356              $message = gTxt('css_updated', array('{name}' => $name));
 357  
 358              css_edit($message);
 359          }
 360      }
 361  
 362  // -------------------------------------------------------------
 363  	function css_format($css,$out='')
 364      {
 365          foreach ($css as $selector => $propvals) {
 366              $out .= n.$selector.n.'{'.n;
 367              foreach($propvals as $prop=>$val) {
 368                  $out .= t.$prop.': '.$val.';'.n;
 369              }
 370              $out .= '}'.n;
 371          }
 372          return trim($out);
 373      }
 374      
 375  // -------------------------------------------------------------
 376  	function addSel($css)
 377      {
 378          $selector = gps('selector');
 379          $css[$selector][' '] = '';
 380          return $css;
 381      }
 382  
 383  // -------------------------------------------------------------
 384  	function add_declaration($css)
 385      {
 386          $selector = gps('selector');
 387          $css[$selector][' '] = '';
 388          return $css;
 389      }
 390  
 391  // -------------------------------------------------------------
 392  	function delete_declaration($css) 
 393      {
 394          $thedec = gps('declaration');
 395          $name = gps('name');
 396          $i = 0;
 397          foreach($css as $a=>$b) {
 398              $cursel = $i++;
 399              $ii = 0;        
 400              foreach($b as $c=>$d) {
 401                  $curdec = $ii++;
 402                  if(($cursel.'-'.$curdec)!=$thedec) {
 403                      $out[$a][$c]=$d;
 404                  }
 405              }
 406           }
 407          $css = base64_encode(css_format($out));
 408          safe_update("txp_css", "css='".doSlash($css)."'", "name='".doSlash($name)."'");
 409  
 410          // update site last mod time
 411          update_lastmod(); 
 412  
 413          return parseCSS(base64_decode(fetch('css','txp_css','name',$name)));
 414      }
 415  
 416  //-------------------------------------------------------------
 417  
 418  	function css_delete()
 419      {
 420          $name  = ps('name');
 421          $count = safe_count('txp_section', "css = '".doSlash($name)."'");
 422  
 423          if ($count)
 424          {
 425              $message = gTxt('css_used_by_section', array('{name}' => $name, '{count}' => $count));
 426          }
 427          
 428          else
 429          {
 430              safe_delete('txp_css', "name = '".doSlash($name)."'");
 431  
 432              $message = gTxt('css_deleted', array('{name}' => $name));
 433          }
 434          
 435          css_edit($message);
 436      }
 437  
 438  ?>


Generated: Mon Feb 18 03:42:45 2008 Cross-referenced by PHPXref 0.7