[ Index ]

PHP Cross Reference of Textpattern 4.0.8

title

Body

[close]

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

   1  <?php
   2  
   3  /*
   4  $HeadURL: https://textpattern.googlecode.com/svn/releases/4.0.8/source/textpattern/include/txp_css.php $
   5  $LastChangedRevision: 3081 $
   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) : htmlspecialchars($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(htmlspecialchars($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(htmlspecialchars($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          n.'<script type="text/javascript">'.
 237          n.'if(jQuery.browser.mozilla){$("#css").attr("spellcheck", false);}'.
 238          n.'</script>';
 239      }
 240  
 241  // -------------------------------------------------------------
 242  	function parseCSS($css) // parse raw css into a multidimensional array
 243      {
 244          $css = preg_replace("/\/\*.+\*\//Usi","",$css); // remove comments
 245          $selectors = preg_replace('/\s+/',' ',explode("}",strip_rn($css)));
 246          foreach($selectors as $selector) {
 247              if(trim($selector)) {
 248              list($keystr,$codestr) = explode("{",$selector);
 249                  if (trim($keystr)) {
 250                      $codes = explode(";",trim($codestr));
 251                      foreach ($codes as $code) {
 252                          if (trim($code)) {
 253                              list($property,$value) = explode(":",$code,2);
 254                              $out[trim($keystr)][trim($property)] = trim($value);
 255                          }
 256                      }
 257                  }
 258              }
 259          }
 260          return (isset($out)) ? $out : array();
 261      }
 262  
 263  // -------------------------------------------------------------
 264  	function parsePostedCSS() //turn css info delivered by editor form into an array
 265      {
 266          $post = (MAGIC_QUOTES_GPC) ? doStrip($_POST) : $_POST;
 267          foreach($post as $a=>$b){
 268              if (preg_match("/^\d+$/",$a)) {
 269                  $selector = $b;
 270              }
 271              if (preg_match("/^\d+-\d+(?:p|v)$/",$a)) {
 272                  if(strstr($a,'p')) {
 273                      $property = $b;
 274                  } else {
 275                      if(trim($property) && trim($selector)) {
 276                          $out[$selector][$property] = $b;
 277                      }
 278                  }
 279              }
 280          }
 281          return (isset($out)) ? $out : array();
 282      }
 283  
 284  // -------------------------------------------------------------
 285  
 286  	function css_copy()
 287      {
 288          extract(gpsa(array('oldname', 'newname')));
 289  
 290          $css = doSlash(fetch('css', 'txp_css', 'name', $oldname));
 291  
 292          $rs = safe_insert('txp_css', "css = '$css', name = '".doSlash($newname)."'");
 293  
 294          css_edit(
 295              gTxt('css_created', array('{name}' => $newname))
 296          );
 297      }
 298  
 299  // -------------------------------------------------------------
 300  
 301  	function css_save_posted()
 302      {
 303          $name = gps('name');
 304          $css  = parsePostedCSS();
 305          $css  = doSlash(base64_encode(css_format($css)));
 306  
 307          safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
 308  
 309          // update site last mod time
 310          update_lastmod();
 311  
 312          $message = gTxt('css_updated', array('{name}' => $name));
 313  
 314          css_edit($message);
 315      }
 316  
 317  //-------------------------------------------------------------
 318  
 319  	function css_save()
 320      {
 321          extract(gpsa(array('name','css','savenew','newname','copy')));
 322          $css = doSlash(base64_encode($css));
 323  
 324          if ($savenew or $copy)
 325          {
 326              $newname = doSlash(trim(preg_replace('/[<>&"\']/', '', gps('newname'))));
 327  
 328              if ($newname and safe_field('name', 'txp_css', "name = '$newname'"))
 329              {
 330                  $message = gTxt('css_already_exists', array('{name}' => $newname));
 331              }
 332  
 333              elseif ($newname)
 334              {
 335                  safe_insert('txp_css', "name = '".$newname."', css = '$css'");
 336  
 337                  // update site last mod time
 338                  update_lastmod();
 339  
 340                  $message = gTxt('css_created', array('{name}' => $newname));
 341              }
 342  
 343              else
 344              {
 345                  $message = gTxt('css_name_required');
 346              }
 347  
 348              css_edit($message);
 349          }
 350  
 351          else
 352          {
 353              safe_update('txp_css', "css = '$css'", "name = '".doSlash($name)."'");
 354  
 355              // update site last mod time
 356              update_lastmod();
 357  
 358              $message = gTxt('css_updated', array('{name}' => $name));
 359  
 360              css_edit($message);
 361          }
 362      }
 363  
 364  // -------------------------------------------------------------
 365  	function css_format($css,$out='')
 366      {
 367          foreach ($css as $selector => $propvals) {
 368              $out .= n.$selector.n.'{'.n;
 369              foreach($propvals as $prop=>$val) {
 370                  $out .= t.$prop.': '.$val.';'.n;
 371              }
 372              $out .= '}'.n;
 373          }
 374          return trim($out);
 375      }
 376  
 377  // -------------------------------------------------------------
 378  	function addSel($css)
 379      {
 380          $selector = gps('selector');
 381          $css[$selector][' '] = '';
 382          return $css;
 383      }
 384  
 385  // -------------------------------------------------------------
 386  	function add_declaration($css)
 387      {
 388          $selector = gps('selector');
 389          $css[$selector][' '] = '';
 390          return $css;
 391      }
 392  
 393  // -------------------------------------------------------------
 394  	function delete_declaration($css)
 395      {
 396          $thedec = gps('declaration');
 397          $name = gps('name');
 398          $i = 0;
 399          foreach($css as $a=>$b) {
 400              $cursel = $i++;
 401              $ii = 0;
 402              foreach($b as $c=>$d) {
 403                  $curdec = $ii++;
 404                  if(($cursel.'-'.$curdec)!=$thedec) {
 405                      $out[$a][$c]=$d;
 406                  }
 407              }
 408           }
 409          $css = base64_encode(css_format($out));
 410          safe_update("txp_css", "css='".doSlash($css)."'", "name='".doSlash($name)."'");
 411  
 412          // update site last mod time
 413          update_lastmod();
 414  
 415          return parseCSS(base64_decode(fetch('css','txp_css','name',$name)));
 416      }
 417  
 418  //-------------------------------------------------------------
 419  
 420  	function css_delete()
 421      {
 422          $name  = ps('name');
 423          $count = safe_count('txp_section', "css = '".doSlash($name)."'");
 424  
 425          if ($count)
 426          {
 427              $message = gTxt('css_used_by_section', array('{name}' => $name, '{count}' => $count));
 428          }
 429  
 430          else
 431          {
 432              safe_delete('txp_css', "name = '".doSlash($name)."'");
 433  
 434              $message = gTxt('css_deleted', array('{name}' => $name));
 435          }
 436  
 437          css_edit($message);
 438      }
 439  
 440  ?>


Generated: Thu May 21 23:03:01 2009 Cross-referenced by PHPXref 0.7