| Textpattern | PHP Cross Reference | Content Management Systems |
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
Body
title
Description
Body
title
Description
Body
title
Body
title