Changeset 1413:0581a433675d for inc
- Timestamp:
- 08/12/13 13:34:09 (12 years ago)
- Branch:
- twig
- Parents:
- 1319:32528cac0405 (diff), 1333:5e1388edd0c9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
inc/admin/lib.dc.page.php
r1316 r1413 4 4 # This file is part of Dotclear 2. 5 5 # 6 # Copyright (c) 2003-201 1Olivier Meunier & Association Dotclear6 # Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear 7 7 # Licensed under the GPL version 2.0 license. 8 8 # See LICENSE file or … … 22 22 { 23 23 global $core; 24 24 25 25 if ($core->blog && $core->auth->check($permissions,$core->blog->id)) 26 26 { 27 27 return; 28 28 } 29 29 30 30 if (session_id()) { 31 31 $core->session->destroy(); … … 33 33 http::redirect(DC_AUTH_PAGE); 34 34 } 35 35 36 36 # Check super admin 37 37 public static function checkSuper() 38 38 { 39 39 global $core; 40 40 41 41 if (!$core->auth->isSuperAdmin()) 42 42 { … … 47 47 } 48 48 } 49 49 50 50 # Top of admin page 51 public static function open($title='',$head='',$popup=false) 52 { 53 global $core, $_ctx; 54 55 $_ctx->popup = (boolean) $popup; 56 $_ctx->page_header = $head; 57 $_ctx->fillPageTitle($title); 58 59 ob_start(); 60 } 61 51 public static function open($title='', $head='') 52 { 53 global $core; 54 55 # List of user's blogs 56 if ($core->auth->blog_count == 1 || $core->auth->blog_count > 20) 57 { 58 $blog_box = 59 '<p>'.__('Blog:').' <strong title="'.html::escapeHTML($core->blog->url).'">'. 60 html::escapeHTML($core->blog->name).'</strong>'; 61 62 if ($core->auth->blog_count > 20) { 63 $blog_box .= ' - <a href="blogs.php">'.__('Change blog').'</a>'; 64 } 65 $blog_box .= '</p>'; 66 } 67 else 68 { 69 $rs_blogs = $core->getBlogs(array('order'=>'LOWER(blog_name)','limit'=>20)); 70 $blogs = array(); 71 while ($rs_blogs->fetch()) { 72 $blogs[html::escapeHTML($rs_blogs->blog_name.' - '.$rs_blogs->blog_url)] = $rs_blogs->blog_id; 73 } 74 $blog_box = 75 '<p><label for="switchblog" class="classic nomobile">'. 76 __('Blogs:').'</label> '. 77 $core->formNonce(). 78 form::combo('switchblog',$blogs,$core->blog->id). 79 '</p>'. 80 '<noscript><p><input type="submit" value="'.__('ok').'" /></p></noscript>'; 81 } 82 83 $safe_mode = isset($_SESSION['sess_safe_mode']) && $_SESSION['sess_safe_mode']; 84 85 # Display 86 header('Content-Type: text/html; charset=UTF-8'); 87 echo 88 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 89 ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 90 '<html xmlns="http://www.w3.org/1999/xhtml" '. 91 'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 92 'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 93 "<head>\n". 94 ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 95 ' <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 96 ' <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 97 ' <meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n". 98 ' <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 99 100 101 self::jsLoadIE7(). 102 ' <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 103 if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 104 echo 105 ' <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 106 } 107 108 $core->auth->user_prefs->addWorkspace('interface'); 109 $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; 110 if (!$user_ui_hide_std_favicon) { 111 echo '<link rel="icon" type="image/png" href="images/favicon.png" />'; 112 } 113 114 echo 115 self::jsCommon(). 116 $head; 117 118 # --BEHAVIOR-- adminPageHTMLHead 119 $core->callBehavior('adminPageHTMLHead'); 120 121 echo 122 "</head>\n". 123 '<body id="dotclear-admin'. 124 ($safe_mode ? ' safe-mode' : ''). 125 '">'."\n". 126 127 '<div id="header">'. 128 '<ul id="prelude"><li><a href="#content">'.__('Go to the content').'</a></li><li><a href="#main-menu">'.__('Go to the menu').'</a></li></ul>'."\n". 129 '<div id="top"><h1><a href="index.php">'.DC_VENDOR_NAME.'</a></h1></div>'."\n"; 130 131 echo 132 '<div id="info-boxes">'. 133 '<div id="info-box1">'. 134 '<form action="index.php" method="post">'. 135 $blog_box. 136 '<p class="nomobile"><a href="'.$core->blog->url.'" onclick="window.open(this.href);return false;" title="'.__('Go to site').' ('.__('new window').')'.'">'.__('Go to site').' <img src="images/outgoing.png" alt="" /></a>'. 137 '</p></form>'. 138 '</div>'. 139 '<div id="info-box2">'. 140 '<a class="smallscreen'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="index.php">'.__('My dashboard').'</a>'. 141 '<span class="smallscreen"> | </span><a class="smallscreen'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="preferences.php">'.__('My preferences').'</a>'. 142 '<span class="smallscreen"> | </span><a href="index.php?logout=1" class="logout">'.sprintf(__('Logout %s'),$core->auth->userID()).' <img src="images/logout.png" alt="" /></a>'. 143 '</div>'. 144 '</div>'. 145 '</div>'; 146 147 echo 148 '<div id="wrapper">'."\n". 149 '<div id="main">'."\n". 150 '<div id="content">'."\n"; 151 152 # Safe mode 153 if ($safe_mode) 154 { 155 echo 156 '<div class="error"><h3>'.__('Safe mode').'</h3>'. 157 '<p>'.__('You are in safe mode. All plugins have been temporarily disabled. Remind to log out then log in again normally to get back all functionalities').'</p>'. 158 '</div>'; 159 } 160 161 if ($core->error->flag()) { 162 echo 163 '<div class="error"><p><strong>'.(count($core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')).'</p></strong>'. 164 $core->error->toHTML(). 165 '</div>'; 166 } 167 } 168 62 169 public static function close() 63 170 { 64 $res = ob_get_contents(); 65 ob_end_clean(); 66 67 global $core, $_ctx; 68 171 global $core; 172 173 $menu =& $GLOBALS['_menu']; 174 175 echo 176 "</div>\n". // End of #content 177 "</div>\n". // End of #main 178 179 '<div id="main-menu">'."\n". 180 181 '<form id="search-menu" action="search.php" method="get">'. 182 '<p><label for="q" class="hidden">'.__('Search:').' </label>'.form::field('q',30,255,''). 183 '<input type="submit" value="'.__('OK').'" /></p>'. 184 '</form>'; 185 186 foreach ($menu as $k => $v) { 187 echo $menu[$k]->draw(); 188 } 189 190 $text = sprintf(__('Thank you for using %s.'),'Dotclear '.DC_VERSION); 191 192 # --BEHAVIOR-- adminPageFooter 193 $textAlt = $core->callBehavior('adminPageFooter',$core,$text); 194 if ($textAlt != '') { 195 $text = $textAlt; 196 } 197 $text = html::escapeHTML($text); 198 199 echo 200 '</div>'."\n". // End of #main-menu 201 '<div id="footer"><a href="http://dotclear.org/" title="'.$text.'"><img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n". 202 "</div>\n"; // End of #wrapper 203 204 if (defined('DC_DEV') && DC_DEV === true) { 205 echo self::debugInfo(); 206 } 207 208 echo 209 '</body></html>'; 210 } 211 212 public static function openPopup($title='', $head='') 213 { 214 global $core; 215 216 # Display 217 header('Content-Type: text/html; charset=UTF-8'); 218 echo 219 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '. 220 ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n". 221 '<html xmlns="http://www.w3.org/1999/xhtml" '. 222 'xml:lang="'.$core->auth->getInfo('user_lang').'" '. 223 'lang="'.$core->auth->getInfo('user_lang').'">'."\n". 224 '<meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n". 225 "<head>\n". 226 ' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n". 227 ' <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n". 228 229 ' <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n". 230 ' <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n". 231 232 self::jsLoadIE7(). 233 ' <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 234 if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') { 235 echo 236 ' <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 237 } 238 239 echo 240 self::jsCommon(). 241 $head; 242 243 # --BEHAVIOR-- adminPageHTMLHead 244 $core->callBehavior('adminPageHTMLHead'); 245 246 echo 247 "</head>\n". 248 '<body id="dotclear-admin" class="popup">'."\n". 249 250 '<div id="top hidden"><h1>'.DC_VENDOR_NAME.'</h1></div>'."\n"; 251 252 echo 253 '<div id="wrapper">'."\n". 254 '<div id="main">'."\n". 255 '<div id="content">'."\n"; 256 69 257 if ($core->error->flag()) { 70 foreach($core->error->getErrors() as $e) { 71 $_ctx->addError($e); 72 } 73 } 74 $_ctx->page_content = $res; 75 $core->tpl->display('page_layout.html.twig'); 76 } 77 78 public static function openPopup($title='',$head='') 79 { 80 self::open($title,$head,true); 81 } 82 258 echo 259 '<div class="error"><strong>'.__('Errors:').'</strong>'. 260 $core->error->toHTML(). 261 '</div>'; 262 } 263 } 264 83 265 public static function closePopup() 84 266 { 85 self::close(); 267 echo 268 "</div>\n". // End of #content 269 "</div>\n". // End of #main 270 '<div id="footer"><p> </p></div>'."\n". 271 "</div>\n". // End of #wrapper 272 '</body></html>'; 273 } 274 275 public static function breadcrumb($elements=null,$no_home_link=false) 276 { 277 // First item of array elements should be blog's name, System or Plugins 278 $res = '<h2>'.($no_home_link ? 279 '<img src="style/dashboard-alt.png" alt="" />' : 280 '<a class="go_home" href="index.php"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>'); 281 $index = 0; 282 foreach ($elements as $element => $url) { 283 $res .= ($no_home_link ? ' ' : ($index == 1 ? ' : ' : ' › ')).($url ? '<a href="'.$url.'">' : '').$element.($url ? '</a>' : ''); 284 $index++; 285 } 286 $res .= '</h2>'; 287 return $res; 86 288 } 87 289 … … 89 291 { 90 292 global $core; 91 293 92 294 $res = ''; 93 295 if ($msg != '') { 94 296 $res = ($div ? '<div class="message">' : '').'<p'.($div ? '' : ' class="message"').'>'. 95 96 297 ($timestamp ? dt::str(__('%H:%M:%S:'),null,$core->auth->getInfo('user_tz')).' ' : '').$msg. 298 '</p>'.($div ? '</div>' : ''); 97 299 if ($echo) { 98 300 echo $res; … … 101 303 return $res; 102 304 } 103 305 306 private static function debugInfo() 307 { 308 $global_vars = implode(', ',array_keys($GLOBALS)); 309 310 $res = 311 '<div id="debug"><div>'. 312 '<p>memory usage: '.memory_get_usage().' ('.files::size(memory_get_usage()).')</p>'; 313 314 if (function_exists('xdebug_get_profiler_filename')) 315 { 316 $res .= '<p>Elapsed time: '.xdebug_time_index().' seconds</p>'; 317 318 $prof_file = xdebug_get_profiler_filename(); 319 if ($prof_file) { 320 $res .= '<p>Profiler file : '.xdebug_get_profiler_filename().'</p>'; 321 } else { 322 $prof_url = http::getSelfURI(); 323 $prof_url .= (strpos($prof_url,'?') === false) ? '?' : '&'; 324 $prof_url .= 'XDEBUG_PROFILE'; 325 $res .= '<p><a href="'.html::escapeURL($prof_url).'">Trigger profiler</a></p>'; 326 } 327 328 /* xdebug configuration: 329 zend_extension = /.../xdebug.so 330 xdebug.auto_trace = On 331 xdebug.trace_format = 0 332 xdebug.trace_options = 1 333 xdebug.show_mem_delta = On 334 xdebug.profiler_enable = 0 335 xdebug.profiler_enable_trigger = 1 336 xdebug.profiler_output_dir = /tmp 337 xdebug.profiler_append = 0 338 xdebug.profiler_output_name = timestamp 339 */ 340 } 341 342 $res .= 343 '<p>Global vars: '.$global_vars.'</p>'. 344 '</div></div>'; 345 346 return $res; 347 } 348 104 349 public static function help($page,$index='') 105 350 { 106 351 # Deprecated but we keep this for plugins. 107 352 } 108 353 109 354 public static function helpBlock() 110 355 { … … 113 358 return; 114 359 }; 115 360 116 361 global $__resources; 117 362 if (empty($__resources['help'])) { 118 363 return; 119 364 } 120 365 121 366 $content = ''; 122 367 foreach ($args as $v) … … 126 371 continue; 127 372 } 128 373 129 374 if (!isset($__resources['help'][$v])) { 130 375 continue; … … 134 379 continue; 135 380 } 136 381 137 382 $fc = file_get_contents($f); 138 383 if (preg_match('|<body[^>]*?>(.*?)</body>|ms',$fc,$matches)) { … … 142 387 } 143 388 } 144 389 145 390 if (trim($content) == '') { 146 391 return; 147 392 } 148 393 149 394 echo 150 395 '<div id="help"><hr /><div class="help-content clear"><h2>'.__('Help').'</h2>'. … … 152 397 '</div></div>'; 153 398 } 154 399 155 400 public static function jsLoad($src) 156 401 { … … 161 406 } 162 407 } 163 408 164 409 public static function jsVar($n,$v) 165 410 { 166 411 return $n." = '".html::escapeJS($v)."';\n"; 167 412 } 168 413 169 414 public static function jsCommon() 170 415 { … … 175 420 self::jsLoad('js/common.js'). 176 421 self::jsLoad('js/prelude.js'). 177 422 178 423 '<script type="text/javascript">'."\n". 179 424 "//<![CDATA[\n". 180 425 self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()). 181 426 182 427 self::jsVar('dotclear.img_plus_src','images/expand.png'). 183 428 self::jsVar('dotclear.img_plus_alt',__('uncover')). … … 186 431 self::jsVar('dotclear.img_menu_on','images/menu_on.png'). 187 432 self::jsVar('dotclear.img_menu_off','images/menu_off.png'). 188 433 189 434 self::jsVar('dotclear.msg.help', 190 435 __('Help about this page')). … … 260 505 "</script>\n"; 261 506 } 262 507 263 508 public static function jsLoadIE7() 264 509 { … … 269 514 '<![endif]-->'."\n"; 270 515 } 271 516 272 517 public static function jsConfirmClose() 273 518 { … … 281 526 $args = ''; 282 527 } 283 528 284 529 return 285 530 self::jsLoad('js/confirm-close.js'). … … 291 536 "</script>\n"; 292 537 } 293 538 294 539 public static function jsPageTabs($default=null) 295 540 { … … 297 542 $default = "'".html::escapeJS($default)."'"; 298 543 } 299 544 300 545 return 301 546 self::jsLoad('js/jquery/jquery.pageTabs.js'). … … 303 548 "//<![CDATA[\n". 304 549 "\$(function() {\n". 305 " \$.pageTabs(".$default.");\n".306 "});\n".307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 550 " \$.pageTabs(".$default.");\n". 551 "});\n". 552 "\n//]]>\n". 553 "</script>\n"; 554 } 555 556 public static function jsModal() 557 { 558 return 559 '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n". 560 self::jsLoad('js/jquery/jquery.modal.js'). 561 '<script type="text/javascript">'."\n". 562 "//<![CDATA[\n". 563 self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif'). 564 self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png'). 565 "\n//]]>\n". 566 "</script>\n"; 567 } 568 569 public static function jsColorPicker() 570 { 571 return 572 '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n". 573 self::jsLoad('js/jquery/jquery.farbtastic.js'). 574 self::jsLoad('js/color-picker.js'); 575 } 576 577 public static function jsDatePicker() 578 { 579 return 580 '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n". 581 self::jsLoad('js/date-picker.js'). 582 '<script type="text/javascript">'."\n". 583 "//<![CDATA[\n". 584 585 "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ". 586 "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ". 587 "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ". 588 "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ". 589 "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ". 590 "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ". 591 "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ". 592 "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ". 593 "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ". 594 "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ". 595 "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ". 596 "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ". 597 598 "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ". 599 "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ". 600 "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ". 601 "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ". 602 "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ". 603 "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ". 604 "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ". 605 606 "datePicker.prototype.img_src = 'images/date-picker.png'; ". 607 608 "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ". 609 "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ". 610 611 "\n//]]>\n". 612 "</script>\n"; 613 } 614 615 public static function jsToolBar() 616 { 617 $res = 618 '<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'. 619 '<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>'; 620 621 if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) { 622 $res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>'; 623 } 624 625 $res .= 626 '<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'. 627 '<script type="text/javascript">'."\n". 628 "//<![CDATA[\n". 629 "jsToolBar.prototype.dialog_url = 'popup.php'; ". 630 "jsToolBar.prototype.iframe_css = '". 631 'body{'. 632 'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'. 633 'color : #000;'. 634 'background: #f9f9f9;'. 635 'margin: 0;'. 636 'padding : 2px;'. 637 'border: none;'. 638 (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : ''). 639 '}'. 640 'pre, code, kbd, samp {'. 641 'font-family:"Courier New",Courier,monospace;'. 642 'font-size : 1.1em;'. 643 '}'. 644 'code {'. 645 'color : #666;'. 646 'font-weight : bold;'. 647 '}'. 648 'body > p:first-child {'. 649 'margin-top: 0;'. 650 '}'. 651 "'; ". 652 "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ". 653 "jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ". 654 "jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ". 655 "jsToolBar.prototype.legend_msg = '". 656 html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ". 657 "jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ". 658 "jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ". 659 "jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ". 660 "jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ". 661 "jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ". 662 "jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ". 663 "jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ". 664 "jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ". 665 "jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ". 666 "jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ". 667 "jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ". 668 "jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ". 669 "jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ". 670 "jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ". 671 "jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ". 672 "jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ". 673 "jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ". 674 "jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ". 675 "jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ". 676 "jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ". 677 678 "jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ". 679 "jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ". 680 "jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ". 681 682 "jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ". 683 "jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ". 684 685 "jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ". 686 "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; "; 687 688 if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) { 689 $res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n"; 690 } 691 692 $res .= 693 "\n//]]>\n". 694 "</script>\n"; 695 696 return $res; 697 } 698 699 public static function jsUpload($params=array(),$base_url=null) 700 { 701 if (!$base_url) { 702 $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/'; 703 } 704 705 $params = array_merge($params,array( 706 'sess_id='.session_id(), 707 'sess_uid='.$_SESSION['sess_browser_uid'], 708 'xd_check='.$GLOBALS['core']->getNonce() 464 709 )); 465 466 return 467 '<link rel="stylesheet" type="text/css" href="style/jsUpload/style.css" />'."\n". 468 469 '<script id="template-upload" type="text/x-tmpl"> 470 {% for (var i=0, file; file=o.files[i]; i++) { %} 471 <tr class="template-upload fade"> 472 <td> 473 <span class="preview"></span> 474 </td> 475 <td> 476 <p class="name">{%=file.name%}</p> 477 {% if (file.error) { %} 478 <div><span class="label label-error">'.__('Error:').'</span> {%=file.error%}</div> 479 {% } %} 480 </td> 481 <td> 482 <p class="size">{%=o.formatFileSize(file.size)%}</p> 483 {% if (!o.files.error) { %} 484 <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div> 485 {% } %} 486 </td> 487 <td> 488 {% if (!o.files.error && !i && !o.options.autoUpload) { %} 489 <input type="submit" class="button start" value="'.__('Send').'"/> 490 {% } %} 491 </td> 492 </tr> 493 {% } %} 494 </script> 495 <!-- The template to display files available for download --> 496 <script id="template-download" type="text/x-tmpl"> 497 {% for (var i=0, file; file=o.files[i]; i++) { %} 498 <tr class="template-download fade"> 499 <td> 500 <span class="preview"> 501 {% if (file.thumbnail_url) { %} 502 <a href="{%=file.url%}" title="{%=file.name%}" data-gallery="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a> 503 {% } %} 504 </span> 505 </td> 506 <td> 507 <p class="name">{%=file.name%}</p> 508 {% if (file.error) { %} 509 <div><span class="label label-important">'.__('Error:').'</span> {%=file.error%}</div> 510 {% } %} 511 </td> 512 <td> 513 <span class="size">{%=o.formatFileSize(file.size)%}</span> 514 </td> 515 <td> 516 {% if (file.error) { %} 517 <span class="upload-status error"></span> 518 {% } else { %} 519 <span class="upload-status ok"></span> 520 {% } %} 521 </td> 522 </tr> 523 {% } %} 524 </script>'. 525 526 self::jsLoad('js/jsUpload/vendor/jquery.ui.widget.js'). 527 self::jsLoad('js/jsUpload/tmpl.js'). 528 self::jsLoad('js/jsUpload/load-image.js'). 529 self::jsLoad('js/jsUpload/jquery.iframe-transport.js'). 530 self::jsLoad('js/jsUpload/jquery.fileupload.js'). 531 self::jsLoad('js/jsUpload/jquery.fileupload-process.js'). 532 self::jsLoad('js/jsUpload/jquery.fileupload-resize.js'). 533 self::jsLoad('js/jsUpload/jquery.fileupload-ui.js'). 534 535 '<script type="text/javascript">'."\n". 536 "//<![CDATA[\n". 537 "dotclear.jsUpload = {};\n". 538 "dotclear.jsUpload.msg = {};\n". 539 self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')). 540 self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')). 541 self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')). 542 self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')). 543 self::jsVar('dotclear.jsUpload.msg.error',__('Error:')). 544 self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')). 545 self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')). 546 self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')). 547 self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')). 548 self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')). 549 self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')). 550 self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')). 551 self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')). 552 self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')). 553 self::jsVar('dotclear.jsUpload.base_url',$base_url). 554 "\n//]]>\n". 555 "</script>\n"; 556 } 557 558 public static function jsToolMan() 559 { 560 return 561 '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 562 '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 563 '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 564 '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 565 '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 566 '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 567 '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 568 } 569 570 public static function jsMetaEditor() 571 { 572 return 573 '<script type="text/javascript" src="js/meta-editor.js"></script>'; 574 } 710 711 return 712 '<link rel="stylesheet" type="text/css" href="style/jsUpload/style.css" />'."\n". 713 714 '<script id="template-upload" type="text/x-tmpl"> 715 {% for (var i=0, file; file=o.files[i]; i++) { %} 716 <div class="template-upload fade"> 717 <div class="upload-file"> 718 <div class="upload-fileinfo"> 719 <span class="upload-filename">{%=file.name%}</span> 720 <span class="upload-filesize">({%=o.formatFileSize(file.size)%})</span> 721 <span class="upload-filecancel cancel">'.__('Cancel').'</span> 722 {% if (!o.files.error && !i && !o.options.autoUpload) { %} 723 <input type="submit" class="button start" value="'.__('Send').'"/> 724 {% } %} 725 <span class="upload-filemsg"></span> 726 </div> 727 {% if (!o.files.error) { %} 728 <div class="upload-progress progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div> 729 {% } %} 730 </div> 731 {% } %} 732 </script> 733 <!-- The template to display files available for download --> 734 <script id="template-download" type="text/x-tmpl"> 735 {% for (var i=0, file; file=o.files[i]; i++) { %} 736 <div class="template-download fade"> 737 <div class="upload-file"> 738 <div class="upload-fileinfo"> 739 <span class="upload-filename">{%=file.name%}</span> 740 <span class="upload-filesize">({%=o.formatFileSize(file.size)%})</span> 741 <span class="upload-filemsg{% if (file.error) { %} upload-error{% } %}"> 742 {% if (file.error) { %} 743 '.__('Error:').' {%=file.error%} 744 {% } else { %} 745 '.__('File successfully uploaded.').' 746 {% } %} 747 </span> 748 </div> 749 <div class="upload-progress"> 750 {% if (!file.error) { %} 751 <div class="bar" style="width:100%;">100%</div> 752 {% } %} 753 </div> 754 </div> 755 {% } %} 756 </script>'. 757 758 self::jsLoad('js/jsUpload/vendor/jquery.ui.widget.js'). 759 self::jsLoad('js/jsUpload/tmpl.js'). 760 self::jsLoad('js/jsUpload/load-image.js'). 761 self::jsLoad('js/jsUpload/jquery.iframe-transport.js'). 762 self::jsLoad('js/jsUpload/jquery.fileupload.js'). 763 self::jsLoad('js/jsUpload/jquery.fileupload-process.js'). 764 self::jsLoad('js/jsUpload/jquery.fileupload-resize.js'). 765 self::jsLoad('js/jsUpload/jquery.fileupload-ui.js'). 766 767 '<script type="text/javascript">'."\n". 768 "//<![CDATA[\n". 769 "dotclear.jsUpload = {};\n". 770 "dotclear.jsUpload.msg = {};\n". 771 self::jsVar('dotclear.msg.enhanced_uploader_activate',__('Temporarily activate enhanced uploader')). 772 self::jsVar('dotclear.msg.enhanced_uploader_disable',__('Temporarily disable enhanced uploader')). 773 self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')). 774 self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')). 775 self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')). 776 self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')). 777 self::jsVar('dotclear.jsUpload.msg.error',__('Error:')). 778 self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')). 779 self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')). 780 self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')). 781 self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')). 782 self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')). 783 self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')). 784 self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')). 785 self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')). 786 self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')). 787 self::jsVar('dotclear.jsUpload.base_url',$base_url). 788 "\n//]]>\n". 789 "</script>\n"; 790 } 791 792 public static function jsToolMan() 793 { 794 return 795 '<script type="text/javascript" src="js/tool-man/core.js"></script>'. 796 '<script type="text/javascript" src="js/tool-man/events.js"></script>'. 797 '<script type="text/javascript" src="js/tool-man/css.js"></script>'. 798 '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'. 799 '<script type="text/javascript" src="js/tool-man/drag.js"></script>'. 800 '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'. 801 '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>'; 802 } 803 804 public static function jsMetaEditor() 805 { 806 return 807 '<script type="text/javascript" src="js/meta-editor.js"></script>'; 808 } 575 809 } 576 810 ?>
Note: See TracChangeset
for help on using the changeset viewer.