Textpattern PHP Cross Reference Content Management Systems

Source: /textpattern/include/txp_page.php - 283 lines - 7777 bytes - Summary - Text - Print

   1  <?php
   2  /*
   3      This is Textpattern
   4  
   5      Copyright 2005 by Dean Allen
   6      www.textpattern.com
   7      All rights reserved
   8  
   9      Use of this software indicates acceptance of the Textpattern license agreement
  10  
  11  $HeadURL: https://textpattern.googlecode.com/svn/releases/4.5.4/source/textpattern/include/txp_page.php $
  12  $LastChangedRevision: 4873 $
  13  
  14  */
  15      if (!defined('txpinterface')) die('txpinterface is undefined.');
  16  
  17      if ($event == 'page') {
  18          require_privs('page');
  19  
  20          bouncer($step,
  21              array(
  22                  'page_edit'       => false,
  23                  'page_save'       => true,
  24                  'page_delete'     => true,
  25                  'save_pane_state' => true
  26              )
  27          );
  28  
  29          switch(strtolower($step)) {
  30              case "":                page_edit();             break;
  31              case "page_edit":       page_edit();             break;
  32              case "page_save":       page_save();             break;
  33              case "page_delete":     page_delete();           break;
  34              case "page_new":        page_new();              break;
  35              case "save_pane_state": page_save_pane_state();  break;
  36          }
  37      }
  38  
  39  // -------------------------------------------------------------
  40  
  41  	function page_edit($message = '') {
  42          global $event,$step;
  43  
  44          pagetop(gTxt('edit_pages'), $message);
  45  
  46          extract(array_map('assert_string', gpsa(array('copy', 'savenew'))));
  47          $name = sanitizeForPage(assert_string(gps('name')));
  48          $newname = sanitizeForPage(assert_string(gps('newname')));
  49  
  50          if ($step == 'page_delete' || empty($name) && $step != 'page_new' && !$savenew)
  51          {
  52              $name = safe_field('page', 'txp_section', "name = 'default'");
  53          }
  54          elseif( ( $copy || $savenew ) && $newname )
  55          {
  56              $name = $newname;
  57          }
  58  
  59          // Format of each entry is popTagLink -> array ( gTxt() string, class/ID)
  60          $tagbuild_items = array(
  61              'page_article'     => array('page_article_hed', 'article-tags'),
  62              'page_article_nav' => array('page_article_nav_hed', 'article-nav-tags'),
  63              'page_nav'         => array('page_nav_hed', 'nav-tags'),
  64              'page_xml'         => array('page_xml_hed', 'xml-tags'),
  65              'page_misc'        => array('page_misc_hed', 'misc-tags'),
  66              'page_file'        => array('page_file_hed', 'file-tags'),
  67          );
  68  
  69          $tagbuild_options = '';
  70          foreach ($tagbuild_items as $tb => $item) {
  71              $tagbuild_options .= n.n.'<div class="'.$item[1].'">'.hed('<a href="#'.$item[1].'">'.gTxt($item[0]).'</a>'
  72                      , 3, ' class="lever'.(get_pref('pane_page_'.$item[1].'_visible') ? ' expanded' : '').'"').
  73                          n.'<div id="'.$item[1].'" class="toggle" style="display:'.(get_pref('pane_page_'.$item[1].'_visible') ? 'block' : 'none').'">'.taglinks($tb).'</div></div>';
  74          }
  75  
  76          echo
  77              '<h1 class="txp-heading">'.gTxt('tab_pages').'</h1>'.
  78              '<div id="'.$event.'_container" class="txp-container">'.
  79              startTable('', '', 'txp-columntable').
  80              tr(
  81                  tda(
  82  
  83                      '<div id="tagbuild_links">'.n.hed(
  84                          gTxt('tagbuilder')
  85                      , 2).
  86                          $tagbuild_options.
  87                          n.'</div>'
  88                  ,' class="column"').
  89  
  90                  tda(
  91                      page_edit_form($name)
  92                  , ' class="column"').
  93  
  94                  tda(
  95                      '<div id="content_switcher">'.
  96                      hed(gTxt('all_pages'), 2).
  97                      graf(sLink('page', 'page_new', gTxt('create_new_page')), ' class="action-create"').
  98                      page_list($name).
  99                      '</div>'
 100                  , ' class="column"')
 101              ).
 102              endTable().'</div>';
 103      }
 104  
 105  // -------------------------------------------------------------
 106  
 107  	function page_edit_form($name)
 108      {
 109          global $step;
 110          if ($name) {
 111              $html = safe_field('user_html','txp_page',"name='".doSlash($name)."'");
 112          } else {
 113              $html = gps('html');
 114          }
 115  
 116          if (empty($name))
 117          {
 118              $buttons = '<div class="edit-title">'.
 119              gTxt('name_for_this_page').': '
 120              .fInput('text','newname','','','','',INPUT_REGULAR).
 121              hInput('savenew','savenew').
 122              '</div>';
 123          } else {
 124              $buttons = '<div class="edit-title">'.gTxt('you_are_editing_page').sp.strong(txpspecialchars($name)).'</div>';
 125          }
 126  
 127          $out[] = '<div id="main_content">'.$buttons.
 128                      '<textarea id="html" class="code" name="html" cols="'.INPUT_LARGE.'" rows="'.INPUT_REGULAR.'">'.txpspecialchars($html).'</textarea>'.
 129                      n.'<p>'.fInput('submit','save',gTxt('save'),'publish').
 130                      n.eInput('page').
 131                      n.sInput('page_save').
 132                      n.hInput('name',$name).'</p>';
 133  
 134          if (!empty($name)) {
 135              $out[] =
 136                  n.'<p class="copy-as"><label for="copy-page">'.gTxt('copy_page_as').'</label>'.
 137                  n.fInput('text','newname','','input-medium','','',INPUT_MEDIUM,'','copy-page').
 138                  n.fInput('submit','copy',gTxt('copy')).'</p>';
 139          }
 140          $out[] = '</div>';
 141  
 142          return form(join('',$out), '', '', 'post', '', '', 'page_form');
 143      }
 144  
 145  // -------------------------------------------------------------
 146  
 147  	function page_list($current)
 148      {
 149          $protected = safe_column('DISTINCT page', 'txp_section', '1=1') + array('error_default');
 150  
 151          $criteria = 1;
 152          $criteria .= callback_event('admin_criteria', 'page_list', 0, $criteria);
 153  
 154          $rs = safe_rows_start('name', 'txp_page', "$criteria order by name asc");
 155  
 156          while ($a = nextRow($rs))
 157          {
 158              extract($a);
 159  
 160              $link  = eLink('page', '', 'name', $name, $name);
 161              $dlink = !in_array($name, $protected) ? dLink('page', 'page_delete', 'name', $name) : '';
 162              $out[] = ($current == $name) ?
 163                  tr(td($name).td($dlink)) :
 164                  tr(td($link).td($dlink));
 165          }
 166  
 167          return startTable('', '', 'txp-list').join(n, $out).endTable();
 168      }
 169  
 170  // -------------------------------------------------------------
 171  
 172  	function page_delete()
 173      {
 174          $name  = ps('name');
 175          $count = safe_count('txp_section', "page = '".doSlash($name)."'");
 176  
 177          if ($name == 'error_default')
 178          {
 179              return page_edit();
 180          }
 181  
 182          if ($count)
 183          {
 184              $message = array(gTxt('page_used_by_section', array('{name}' => $name, '{count}' => $count)), E_WARNING);
 185          }
 186  
 187          else
 188          {
 189              safe_delete('txp_page', "name = '".doSlash($name)."'");
 190              callback_event('page_deleted', '', 0, $name);
 191  
 192              $message = gTxt('page_deleted', array('{name}' => $name));
 193          }
 194  
 195          page_edit($message);
 196      }
 197  
 198  // -------------------------------------------------------------
 199  
 200  	function page_save()
 201      {
 202          extract(doSlash(array_map('assert_string', gpsa(array('savenew', 'html', 'copy')))));
 203          $name = sanitizeForPage(assert_string(gps('name')));
 204  
 205          if ($savenew or $copy)
 206          {
 207              $newname = doSlash(sanitizeForPage(assert_string(gps('newname'))));
 208  
 209              if ($newname and safe_field('name', 'txp_page', "name = '$newname'"))
 210              {
 211                  $message = array(gTxt('page_already_exists', array('{name}' => $newname)), E_ERROR);
 212                  if ($savenew)
 213                  {
 214                      $_POST['newname'] = '';
 215                  }
 216              }
 217              elseif ($newname)
 218              {
 219                  if (safe_insert('txp_page', "name = '$newname', user_html = '$html'"))
 220                  {
 221                      update_lastmod();
 222                      $message = gTxt('page_created', array('{name}' => $newname));
 223                  }
 224                  else
 225                  {
 226                      $message = array(gTxt('page_save_failed'), E_ERROR);
 227                  }
 228              }
 229              else
 230              {
 231                  $message = array(gTxt('page_name_invalid'), E_ERROR);
 232              }
 233  
 234              page_edit($message);
 235          }
 236  
 237          else
 238          {
 239              if (safe_update('txp_page', "user_html = '$html'", "name = '".doSlash($name)."'"))
 240              {
 241                  update_lastmod();
 242                  $message = gTxt('page_updated', array('{name}' => $name));
 243              }
 244              else
 245              {
 246                  $message = array(gTxt('page_save_failed'), E_ERROR);
 247              }
 248  
 249              page_edit($message);
 250          }
 251      }
 252  
 253  // -------------------------------------------------------------
 254  
 255  	function page_new()
 256      {
 257          page_edit();
 258      }
 259  
 260  // -------------------------------------------------------------
 261  
 262  	function taglinks($type)
 263      {
 264          return popTagLinks($type);
 265      }
 266  
 267  // -------------------------------------------------------------
 268  
 269  	function page_save_pane_state()
 270      {
 271          global $event;
 272          $panes = array('article-tags', 'article-nav-tags', 'nav-tags', 'xml-tags', 'misc-tags', 'file-tags');
 273          $pane = gps('pane');
 274          if (in_array($pane, $panes))
 275          {
 276              set_pref("pane_page_{$pane}_visible", (gps('visible') == 'true' ? '1' : '0'), $event, PREF_HIDDEN, 'yesnoradio', 0, PREF_PRIVATE);
 277              send_xml_response();
 278          } else {
 279              trigger_error('invalid_pane', E_USER_WARNING);
 280          }
 281      }
 282  
 283  ?>

title

Description

title

Description

title

Description

title

title

Body