| [ Index ] | [ Index ] [ Classes ] [ Functions ] [ Variables ] [ Constants ] |
PHP Cross Reference of TXP stable 4.0.6 |
||
[Summary view] [Print] [Text view]
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 = ' '; 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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Feb 18 03:42:45 2008 | Cross-referenced by PHPXref 0.7 |