Dotclear

source: inc/admin/lib.dc.page.php @ 489:2e9dba880461

Revision 489:2e9dba880461, 24.4 KB checked in by kozlika, 14 years ago (diff)

Ergo : déplacement du lien dashboard dans le header, stylage de l'item actif dans le header…

… et une petite fantaisie pour le titre de boîte des favoris (après tout le nom de code est bien All You Need Is Love, non ?). J'attends les tomates pourries de pied ferme.

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14define('DC_AUTH_PAGE','auth.php');
15
16class dcPage
17{
18     private static $loaded_js=array();
19
20     # Auth check
21     public static function check($permissions)
22     {
23          global $core;
24         
25          if ($core->blog && $core->auth->check($permissions,$core->blog->id))
26          {
27               return;
28          }
29         
30          if (session_id()) {
31               $core->session->destroy();
32          }
33          http::redirect(DC_AUTH_PAGE);
34     }
35     
36     # Check super admin
37     public static function checkSuper()
38     {
39          global $core;
40         
41          if (!$core->auth->isSuperAdmin())
42          {
43               if (session_id()) {
44                    $core->session->destroy();
45               }
46               http::redirect(DC_AUTH_PAGE);
47          }
48     }
49     
50     # Top of admin page
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               __('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          }
66          else
67          {
68               $rs_blogs = $core->getBlogs(array('order'=>'LOWER(blog_name)','limit'=>20));
69               $blogs = array();
70               while ($rs_blogs->fetch()) {
71                    $blogs[html::escapeHTML($rs_blogs->blog_name.' - '.$rs_blogs->blog_url)] = $rs_blogs->blog_id;
72               }
73               $blog_box =
74               '<label for="switchblog" class="classic">'.
75               __('Blogs:').' '.
76               $core->formNonce().
77               form::combo('switchblog',$blogs,$core->blog->id).
78               '</label>'.
79               '<noscript><div><input type="submit" value="'.__('ok').'" /></div></noscript>';
80          }
81         
82          $safe_mode = isset($_SESSION['sess_safe_mode']) && $_SESSION['sess_safe_mode'];
83         
84          # Display
85          header('Content-Type: text/html; charset=UTF-8');
86          echo
87          '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '.
88          ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n".
89          '<html xmlns="http://www.w3.org/1999/xhtml" '.
90          'xml:lang="'.$core->auth->getInfo('user_lang').'" '.
91          'lang="'.$core->auth->getInfo('user_lang').'">'."\n".
92          "<head>\n".
93          '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n".
94          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n".
95         
96          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n".
97          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n".
98         
99          self::jsLoadIE7().
100          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
101          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') {
102               echo
103          '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
104          }
105
106          $core->auth->user_prefs->addWorkspace('interface');
107          $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
108          if (!$user_ui_hide_std_favicon) {
109               echo '<link rel="icon" type="image/png" href="images/favicon.png" />';
110          }
111         
112          echo
113          self::jsCommon().
114          $head;
115         
116          # --BEHAVIOR-- adminPageHTMLHead
117          $core->callBehavior('adminPageHTMLHead');
118         
119          echo
120          "</head>\n".
121          '<body id="dotclear-admin'.
122          ($safe_mode ? ' safe-mode' : '').
123          '">'."\n".
124         
125          '<div id=header>'.
126          '<ul id="prelude"><li><a href="#content">Aller au contenu</a></li><li><a href="#main-menu">Aller au menu</a></li></ul>'."\n".
127          '<div id="top"><h1><a href="index.php">'.DC_VENDOR_NAME.'</a></h1></div>'."\n"; 
128         
129          echo
130          '<div id="info-boxes">'.
131          '<div id="info-box1">'.
132          '<form action="index.php" method="post">'.
133          $blog_box.
134          '<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>'.
135          '</form>'.
136          '</div>'.
137          '<div id="info-box2">'.
138          '<a'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="index.php">'.__('My dashboard').'</a>'.
139          '<span> | </span><a'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="preferences.php">'.__('My preferences').'</a>'.
140          '<span> | </span><a href="index.php?logout=1" class="logout">'.sprintf(__('Logout %s'),$core->auth->userID()).' <img src="images/logout.png" alt="" /></a>'.
141          '</div>'.
142          '</div>'.
143          '</div>';
144         
145          echo
146          '<div id="wrapper">'."\n".
147          '<div id="main">'."\n".
148          '<div id="content">'."\n";
149         
150          # Safe mode
151          if ($safe_mode)
152          {
153               echo
154               '<div class="error"><h3>'.__('Safe mode').'</h3>'.
155               '<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>'.
156               '</div>';
157          }
158         
159          if ($core->error->flag()) {
160               echo
161               '<div class="error"><strong>'.__('Errors:').'</strong>'.
162               $core->error->toHTML().
163               '</div>';
164          }
165     }
166     
167     public static function close()
168     {
169          $menu =& $GLOBALS['_menu'];
170         
171          echo
172          "</div>\n".         // End of #content
173          "</div>\n".         // End of #main
174         
175          '<div id="main-menu">'."\n";
176         
177          foreach ($menu as $k => $v) {
178               echo $menu[$k]->draw();
179          }
180         
181          echo
182          '</div>'."\n".      // End of #main-menu
183          '<div id="footer"><p>'.
184          sprintf(__('Thank you for using %s.'),'<a href="http://dotclear.org/">Dotclear '.DC_VERSION.'</a>').
185          ' <span class="credit"> (Icons by <a href="http://dryicons.com/">Dryicons</a>)</span>'.
186          '</p></div>'."\n".
187          "</div>\n";         // End of #wrapper
188         
189          if (defined('DC_DEV') && DC_DEV === true) {
190               echo self::debugInfo();
191          }
192         
193          echo
194          '</body></html>';
195     }
196     
197     public static function openPopup($title='', $head='')
198     {
199          global $core;
200         
201          # Display
202          header('Content-Type: text/html; charset=UTF-8');
203          echo
204          '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '.
205          ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n".
206          '<html xmlns="http://www.w3.org/1999/xhtml" '.
207          'xml:lang="'.$core->auth->getInfo('user_lang').'" '.
208          'lang="'.$core->auth->getInfo('user_lang').'">'."\n".
209          "<head>\n".
210          '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n".
211          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n".
212         
213          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n".
214          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n".
215         
216          self::jsLoadIE7().
217          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n"; 
218          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') {
219               echo
220               '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n"; 
221          }
222         
223          echo
224          self::jsCommon().
225          $head;
226         
227          # --BEHAVIOR-- adminPageHTMLHead
228          $core->callBehavior('adminPageHTMLHead');
229         
230          echo
231          "</head>\n".
232          '<body id="dotclear-admin" class="popup">'."\n".
233         
234          '<div id="top"><h1>'.DC_VENDOR_NAME.'</h1></div>'."\n";
235         
236          echo
237          '<div id="wrapper">'."\n".
238          '<div id="main">'."\n".
239          '<div id="content">'."\n";
240         
241          if ($core->error->flag()) {
242               echo
243               '<div class="error"><strong>'.__('Errors:').'</strong>'.
244               $core->error->toHTML().
245               '</div>';
246          }
247     }
248     
249     public static function closePopup()
250     {
251          echo
252          "</div>\n".         // End of #content
253          "</div>\n".         // End of #main
254          '<div id="footer"><p>&nbsp;</p></div>'."\n".
255          "</div>\n".         // End of #wrapper
256          '</body></html>';
257     }
258     
259     private static function debugInfo()
260     {
261          $global_vars = implode(', ',array_keys($GLOBALS));
262         
263          $res =
264          '<div id="debug"><div>'.
265          '<p>memory usage: '.memory_get_usage().' ('.files::size(memory_get_usage()).')</p>';
266         
267          if (function_exists('xdebug_get_profiler_filename'))
268          {
269               $res .= '<p>Elapsed time: '.xdebug_time_index().' seconds</p>';
270               
271               $prof_file = xdebug_get_profiler_filename();
272               if ($prof_file) {
273                    $res .= '<p>Profiler file : '.xdebug_get_profiler_filename().'</p>';
274               } else {
275                    $prof_url = http::getSelfURI();
276                    $prof_url .= (strpos($prof_url,'?') === false) ? '?' : '&';
277                    $prof_url .= 'XDEBUG_PROFILE';
278                    $res .= '<p><a href="'.html::escapeURL($prof_url).'">Trigger profiler</a></p>';
279               }
280               
281               /* xdebug configuration:
282               zend_extension = /.../xdebug.so
283               xdebug.auto_trace = On
284               xdebug.trace_format = 0
285               xdebug.trace_options = 1
286               xdebug.show_mem_delta = On
287               xdebug.profiler_enable = 0
288               xdebug.profiler_enable_trigger = 1
289               xdebug.profiler_output_dir = /tmp
290               xdebug.profiler_append = 0
291               xdebug.profiler_output_name = timestamp
292               */
293          }
294         
295          $res .=
296          '<p>Global vars: '.$global_vars.'</p>'.
297          '</div></div>';
298         
299          return $res;
300     }
301     
302     public static function help($page,$index='')
303     {
304          # Deprecated but we keep this for plugins.
305     }
306     
307     public static function helpBlock()
308     {
309          $args = func_get_args();
310          if (empty($args)) {
311               return;
312          };
313         
314          global $__resources;
315          if (empty($__resources['help'])) {
316               return;
317          }
318         
319          $content = '';
320          foreach ($args as $v)
321          {
322               if (is_object($v) && isset($v->content)) {
323                    $content .= $v->content;
324                    continue;
325               }
326               
327               if (!isset($__resources['help'][$v])) {
328                    continue;
329               }
330               $f = $__resources['help'][$v];
331               if (!file_exists($f) || !is_readable($f)) {
332                    continue;
333               }
334               
335               $fc = file_get_contents($f);
336               if (preg_match('|<body[^>]*?>(.*?)</body>|ms',$fc,$matches)) {
337                    $content .= $matches[1];
338               } else {
339                    $content .= $fc;
340               }
341          }
342         
343          if (trim($content) == '') {
344               return;
345          }
346         
347          echo
348          '<div id="help"><hr /><div class="help-content clear"><h2>'.__('Help').'</h2>'.
349          $content.
350          '</div></div>';
351     }
352     
353     public static function jsLoad($src)
354     {
355          $escaped_src = html::escapeHTML($src);
356          if (!isset(self::$loaded_js[$escaped_src])) {
357               self::$loaded_js[$escaped_src]=true;
358               return '<script type="text/javascript" src="'.$escaped_src.'"></script>'."\n";
359          }
360     }
361     
362     public static function jsVar($n,$v)
363     {
364          return $n." = '".html::escapeJS($v)."';\n";
365     }
366     
367     public static function jsCommon()
368     {
369          return
370          self::jsLoad('js/jquery/jquery.js').
371          self::jsLoad('js/jquery/jquery.biscuit.js').
372          self::jsLoad('js/jquery/jquery.bgFade.js').
373          self::jsLoad('js/common.js').
374          self::jsLoad('js/prelude.js').
375         
376          '<script type="text/javascript">'."\n".
377          "//<![CDATA[\n".
378          self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()).
379         
380          self::jsVar('dotclear.img_plus_src','images/plus.png').
381          self::jsVar('dotclear.img_plus_alt',__('uncover')).
382          self::jsVar('dotclear.img_minus_src','images/minus.png').
383          self::jsVar('dotclear.img_minus_alt',__('hide')).
384          self::jsVar('dotclear.img_menu_on','images/menu_on.png').
385          self::jsVar('dotclear.img_menu_off','images/menu_off.png').
386         
387          self::jsVar('dotclear.msg.help',
388               __('help')).
389          self::jsVar('dotclear.msg.no_selection',
390               __('no selection')).
391          self::jsVar('dotclear.msg.select_all',
392               __('select all')).
393          self::jsVar('dotclear.msg.invert_sel',
394               __('invert selection')).
395          self::jsVar('dotclear.msg.website',
396               __('Web site:')).
397          self::jsVar('dotclear.msg.email',
398               __('Email:')).
399          self::jsVar('dotclear.msg.ip_address',
400               __('IP address:')).
401          self::jsVar('dotclear.msg.error',
402               __('Error:')).
403          self::jsVar('dotclear.msg.entry_created',
404               __('Entry has been successfully created.')).
405          self::jsVar('dotclear.msg.edit_entry',
406               __('Edit entry')).
407          self::jsVar('dotclear.msg.view_entry',
408               __('view entry')).
409          self::jsVar('dotclear.msg.confirm_delete_posts',
410               __("Are you sure you want to delete selected entries (%s)?")).
411          self::jsVar('dotclear.msg.confirm_delete_post',
412               __("Are you sure you want to delete this entry?")).
413          self::jsVar('dotclear.msg.confirm_delete_comments',
414               __('Are you sure you want to delete selected comments (%s)?')).
415          self::jsVar('dotclear.msg.confirm_delete_comment',
416               __('Are you sure you want to delete this comment?')).
417          self::jsVar('dotclear.msg.cannot_delete_users',
418               __('Users with posts cannot be deleted.')).
419          self::jsVar('dotclear.msg.confirm_delete_user',
420               __('Are you sure you want to delete selected users (%s)?')).
421          self::jsVar('dotclear.msg.confirm_delete_category',
422               __('Are you sure you want to delete category "%s"?')).
423          self::jsVar('dotclear.msg.confirm_reorder_categories',
424               __('Are you sure you want to reorder all categories?')).
425          self::jsVar('dotclear.msg.confirm_delete_media',
426               __('Are you sure you want to remove media "%s"?')).
427          self::jsVar('dotclear.msg.confirm_extract_current',
428               __('Are you sure you want to extract archive in current directory?')).
429          self::jsVar('dotclear.msg.confirm_remove_attachment',
430               __('Are you sure you want to remove attachment "%s"?')).
431          self::jsVar('dotclear.msg.confirm_delete_lang',
432               __('Are you sure you want to delete "%s" language?')).
433          self::jsVar('dotclear.msg.confirm_delete_plugin',
434               __('Are you sure you want to delete "%s" plugin?')).
435          self::jsVar('dotclear.msg.use_this_theme',
436               __('Use this theme')).
437          self::jsVar('dotclear.msg.remove_this_theme',
438               __('Remove this theme')).
439          self::jsVar('dotclear.msg.confirm_delete_theme',
440               __('Are you sure you want to delete "%s" theme?')).
441          self::jsVar('dotclear.msg.zip_file_content',
442               __('Zip file content')).
443          self::jsVar('dotclear.msg.xhtml_validator',
444               __('XHTML markup validator')).
445          self::jsVar('dotclear.msg.xhtml_valid',
446               __('XHTML content is valid.')).
447          self::jsVar('dotclear.msg.xhtml_not_valid',
448               __('There are XHTML markup errors.')).
449          self::jsVar('dotclear.msg.confirm_change_post_format',
450               __('You have unsaved changes. Switch post format will loose these changes. Proceed anyway?')).
451          self::jsVar('dotclear.msg.load_enhanced_uploader',
452               __('Loading enhanced uploader, please wait.')).
453          "\n//]]>\n".
454          "</script>\n";
455     }
456     
457     public static function jsLoadIE7()
458     {
459          return
460          '<!--[if lt IE 8]>'."\n".
461          self::jsLoad('js/ie7/IE8.js').
462          '<link rel="stylesheet" type="text/css" href="style/iesucks.css" />'."\n".
463          '<![endif]-->'."\n";
464     }
465     
466     public static function jsConfirmClose()
467     {
468          $args = func_get_args();
469          if (count($args) > 0) {
470               foreach ($args as $k => $v) {
471                    $args[$k] = "'".html::escapeJS($v)."'";
472               }
473               $args = implode(',',$args);
474          } else {
475               $args = '';
476          }
477         
478          return
479          self::jsLoad('js/confirm-close.js').
480          '<script type="text/javascript">'."\n".
481          "//<![CDATA[\n".
482          "confirmClosePage = new confirmClose(".$args."); ".
483          "confirmClose.prototype.prompt = '".html::escapeJS(__('You have unsaved changes.'))."'; ".
484          "\n//]]>\n".
485          "</script>\n";
486     }
487     
488     public static function jsPageTabs($default=null)
489     {
490          if ($default) {
491               $default = "'".html::escapeJS($default)."'";
492          }
493         
494          return
495          self::jsLoad('js/jquery/jquery.pageTabs.js').
496          '<script type="text/javascript">'."\n".
497          "//<![CDATA[\n".
498          "\$(function() {\n".
499          "    \$.pageTabs(".$default.");\n".
500          "});\n".
501          "\n//]]>\n".
502          "</script>\n";
503     }
504     
505     public static function jsModal()
506     {
507          return
508          '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n".
509          self::jsLoad('js/jquery/jquery.modal.js').
510          '<script type="text/javascript">'."\n".
511          "//<![CDATA[\n".
512          self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif').
513          self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png').
514          "\n//]]>\n".
515          "</script>\n";
516     }
517     
518     public static function jsColorPicker()
519     {
520          return
521          '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n".
522          self::jsLoad('js/jquery/jquery.farbtastic.js').
523          self::jsLoad('js/color-picker.js');
524     }
525     
526     public static function jsDatePicker()
527     {
528          return
529          '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n".
530          self::jsLoad('js/date-picker.js').
531          '<script type="text/javascript">'."\n".
532          "//<![CDATA[\n".
533         
534          "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ".
535          "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ".
536          "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ".
537          "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ".
538          "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ".
539          "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ".
540          "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ".
541          "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ".
542          "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ".
543          "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ".
544          "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ".
545          "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ".
546         
547          "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ".
548          "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ".
549          "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ".
550          "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ".
551          "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ".
552          "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ".
553          "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ".
554         
555          "datePicker.prototype.img_src = 'images/date-picker.png'; ".
556         
557          "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ".
558          "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ".
559         
560          "\n//]]>\n".
561          "</script>\n";
562     }
563     
564     public static function jsToolBar()
565     {
566          $res =
567          '<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'.
568          '<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>';
569         
570          if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) {
571               $res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>';
572          }
573         
574          $res .=
575          '<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'.
576          '<script type="text/javascript">'."\n".
577          "//<![CDATA[\n".
578          "jsToolBar.prototype.dialog_url = 'popup.php'; ".
579          "jsToolBar.prototype.iframe_css = '".
580               'body{'.
581                    'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'.
582                    'color : #000;'.
583                    'background: #f9f9f9;'.
584                    'margin: 0;'.
585                    'padding : 2px;'.
586                    'border: none;'.
587                    (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : '').
588               '}'.
589               'pre, code, kbd, samp {'.
590                    'font-family:"Courier New",Courier,monospace;'.
591                    'font-size : 1.1em;'.
592               '}'.
593               'code {'.
594                    'color : #666;'.
595                    'font-weight : bold;'.
596               '}'.
597               'body > p:first-child {'.
598                    'margin-top: 0;'.
599               '}'.
600          "'; ".
601          "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ".
602          "jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ".
603          "jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ".
604          "jsToolBar.prototype.legend_msg = '".
605          html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ".
606          "jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ".
607          "jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ".
608          "jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ".
609          "jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ".
610          "jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ".
611          "jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ".
612          "jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ".
613          "jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ".
614          "jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ".
615          "jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ".
616          "jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ".
617          "jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ".
618          "jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ".
619          "jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ".
620          "jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ".
621          "jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ".
622          "jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ".
623          "jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ".
624          "jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ".
625          "jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ".
626         
627          "jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ".
628          "jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ".
629          "jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ".
630         
631          "jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ".
632          "jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ".
633         
634          "jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ".
635          "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; ";
636         
637          if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) {
638               $res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n";
639          }
640         
641          $res .=
642          "\n//]]>\n".
643          "</script>\n";
644         
645          return $res;
646     }
647     
648     public static function jsCandyUpload($params=array(),$base_url=null)
649     {
650          if (!$base_url) {
651               $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/';
652          }
653         
654          $params = array_merge($params,array(
655               'sess_id='.session_id(),
656               'sess_uid='.$_SESSION['sess_browser_uid'],
657               'xd_check='.$GLOBALS['core']->getNonce()
658          ));
659         
660          return
661          '<link rel="stylesheet" type="text/css" href="style/candyUpload/style.css" />'."\n".
662          self::jsLoad('js/jquery/jquery.candyUpload.js').
663         
664          '<script type="text/javascript">'."\n".
665          "//<![CDATA[\n".
666          "dotclear.candyUpload = {};\n".
667          self::jsVar('dotclear.msg.activate_enhanced_uploader',__('Activate enhanced uploader')).
668          self::jsVar('dotclear.msg.disable_enhanced_uploader',__('Disable enhanced uploader')).
669          self::jsVar('$._candyUpload.prototype.locales.file_uploaded',__('File successfully uploaded.')).
670          self::jsVar('$._candyUpload.prototype.locales.max_file_size',__('Maximum file size allowed:')).
671          self::jsVar('$._candyUpload.prototype.locales.limit_exceeded',__('Limit exceeded.')).
672          self::jsVar('$._candyUpload.prototype.locales.size_limit_exceeded',__('File size exceeds allowed limit.')).
673          self::jsVar('$._candyUpload.prototype.locales.canceled',__('Canceled.')).
674          self::jsVar('$._candyUpload.prototype.locales.http_error',__('HTTP Error:')).
675          self::jsVar('$._candyUpload.prototype.locales.error',__('Error:')).
676          self::jsVar('$._candyUpload.prototype.locales.choose_file',__('Choose file')).
677          self::jsVar('$._candyUpload.prototype.locales.choose_files',__('Choose files')).
678          self::jsVar('$._candyUpload.prototype.locales.cancel',__('Cancel')).
679          self::jsVar('$._candyUpload.prototype.locales.clean',__('Clean')).
680          self::jsVar('$._candyUpload.prototype.locales.upload',__('Upload')).
681          self::jsVar('$._candyUpload.prototype.locales.no_file_in_queue',__('No file in queue.')).
682          self::jsVar('$._candyUpload.prototype.locales.file_in_queue',__('1 file in queue.')).
683          self::jsVar('$._candyUpload.prototype.locales.files_in_queue',__('%d files in queue.')).
684          self::jsVar('$._candyUpload.prototype.locales.queue_error',__('Queue error:')).
685          self::jsVar('dotclear.candyUpload.base_url',$base_url).
686          self::jsVar('dotclear.candyUpload.movie_url',$base_url.'index.php?pf=swfupload.swf').
687          self::jsVar('dotclear.candyUpload.params',implode('&',$params)).
688          "\n//]]>\n".
689          "</script>\n";
690     }
691     
692     public static function jsToolMan()
693     {
694          return
695          '<script type="text/javascript" src="js/tool-man/core.js"></script>'.
696          '<script type="text/javascript" src="js/tool-man/events.js"></script>'.
697          '<script type="text/javascript" src="js/tool-man/css.js"></script>'.
698          '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'.
699          '<script type="text/javascript" src="js/tool-man/drag.js"></script>'.
700          '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'.
701          '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>';
702     }
703     
704     public static function jsMetaEditor()
705     {
706          return
707          '<script type="text/javascript" src="js/meta-editor.js"></script>';
708     }
709}
710?>
Note: See TracBrowser for help on using the repository browser.

Sites map