Dotclear

source: inc/admin/lib.dc.page.php @ 2082:00db985f1d5e

Revision 2082:00db985f1d5e, 29.4 KB checked in by Anne Kozlika <kozlika@…>, 12 years ago (diff)

En attendant qu'on ait des aides contextuelles sur toutes les pages, lorsque l'utilisateur va être redirigé vers l'aide générale l'intitulé change et on ouvre dans une nouvelle fenêtre.
Note : il faudrait externaliser le js et l'ajout de la mention "(nouvelle fenêtre)", pour ce lien comme pour "voir le blog" ou "voir ce billet sur le blog".

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 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='',$breadcrumb='')
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">'.
76               __('Blogs:').'</label> '.
77               $core->formNonce().
78               form::combo('switchblog',$blogs,$core->blog->id).
79               '<input type="submit" value="'.__('ok').'" class="hidden-if-js" /></p>';
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          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n".
95          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n".
96          '  <meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n".
97          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n".
98
99
100          self::jsLoadIE7().
101          '  <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n";
102          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') {
103               echo
104               '  <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n";
105          }
106
107          $core->auth->user_prefs->addWorkspace('interface');
108          $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
109          if (!$user_ui_hide_std_favicon) {
110               echo '<link rel="icon" type="image/png" href="images/favicon.png" />';
111          }
112
113          echo
114          self::jsCommon().
115          self::jsToggles().
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' : '').'" class="no-js">'."\n".
125
126          '<ul id="prelude">'.
127          '<li><a href="#content">'.__('Go to the content').'</a></li>'.
128          '<li><a href="#main-menu">'.__('Go to the menu').'</a></li>'.
129          '<li><a href="#qx">'.__('Go to search').'</a></li>'.
130          '</ul>'."\n".
131          '<div id="header">'.
132          '<h1><a href="index.php"><span class="hidden">'.DC_VENDOR_NAME.'</span></a></h1>'."\n";
133
134          echo
135          '<form action="index.php" method="post" id="top-info-blog">'.
136          $blog_box.
137          '<p><a href="'.$core->blog->url.'" onclick="window.open(this.href);return false;" title="'.__('Go to site').
138          ' ('.__('new window').')'.'">'.__('Go to site').'<img src="images/outgoing.png" alt="" /></a>'.
139          '</p></form>'.
140          '<ul id="top-info-user">'.
141          '<li><a class="'.(preg_match('/index.php$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="index.php">'.__('My dashboard').'</a></li>'.
142          '<li><a class="smallscreen'.(preg_match('/preferences.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').
143          '" href="preferences.php">'.__('My preferences').'</a></li>'.
144          '<li><a href="index.php?logout=1" class="logout"><span class="nomobile">'.sprintf(__('Logout %s'),$core->auth->userID()).
145          '</span><img src="images/logout.png" alt="" /></a></li>'.
146          '</ul>'.
147          '</div>'; // end header
148
149          echo
150          '<div id="wrapper" class="clearfix">'."\n".
151          '<div class="hidden-if-no-js collapser-box"><a href="#" id="collapser">'.
152          '<img class="collapse-mm" src="images/collapser-hide.png" alt="'.__('Hide main menu').'" />'.
153          '<img class="expand-mm" src="images/collapser-show.png" alt="'.__('Show main menu').'" />'.
154          '</a></div>'.
155          '<div id="main">'."\n".
156          '<div id="content" class="clearfix">'."\n";
157
158          # Safe mode
159          if ($safe_mode)
160          {
161               echo
162               '<div class="warning"><h3>'.__('Safe mode').'</h3>'.
163               '<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>'.
164               '</div>';
165          }
166
167          // Display breadcrumb (if given) before any error message
168          echo $breadcrumb;
169
170          if ($core->error->flag()) {
171               echo
172               '<div class="error"><p><strong>'.(count($core->error->getErrors()) > 1 ? __('Errors:') : __('Error:')).'</strong></p>'.
173               $core->error->toHTML().
174               '</div>';
175          }
176     }
177
178     public static function close()
179     {
180          global $core;
181
182          if (!$GLOBALS['__resources']['ctxhelp']) {
183               echo
184               '<p id="help-button"><a href="help.php" onclick="window.open(this.href);return false;" title="'.
185               __('Global help').' ('.__('new window').')">'.__('Global help').'</a></p>';
186          }
187
188          $menu =& $GLOBALS['_menu'];
189
190          echo
191          "</div>\n".         // End of #content
192          "</div>\n".         // End of #main
193
194          '<div id="main-menu">'."\n".
195
196          '<form id="search-menu" action="search.php" method="get">'.
197          '<p><label for="qx" class="hidden">'.__('Search:').' </label>'.form::field('qx',30,255,'').
198          '<input type="submit" value="'.__('OK').'" /></p>'.
199          '</form>';
200
201          foreach ($menu as $k => $v) {
202               echo $menu[$k]->draw();
203          }
204
205          $text = sprintf(__('Thank you for using %s.'),'Dotclear '.DC_VERSION);
206
207          # --BEHAVIOR-- adminPageFooter
208          $textAlt = $core->callBehavior('adminPageFooter',$core,$text);
209          if ($textAlt != '') {
210               $text = $textAlt;
211          }
212          $text = html::escapeHTML($text);
213
214          echo
215          '</div>'."\n".      // End of #main-menu
216          "</div>\n";         // End of #wrapper
217
218          echo
219          '<div id="footer">'.
220          '<a href="http://dotclear.org/" title="'.$text.'"><img src="style/dc_logos/w-dotclear90.png" alt="'.$text.'" /></a></div>'."\n".
221          '<!-- '."\n".
222'                  .'."\n".
223'               ,;:\'`\'::'."\n".
224'            __||'."\n".
225'      _____/LLLL\_'."\n".
226'      \__________"|'."\n".
227'    ~^~^~^~^~^~^~^~^~^~'."\n".
228' -->'."\n";
229
230          if (defined('DC_DEV') && DC_DEV === true) {
231               echo self::debugInfo();
232          }
233
234          echo
235          '</body></html>';
236     }
237
238     public static function openPopup($title='',$head='',$breadcrumb='')
239     {
240          global $core;
241
242          # Display
243          header('Content-Type: text/html; charset=UTF-8');
244          echo
245          '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '.
246          ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n".
247          '<html xmlns="http://www.w3.org/1999/xhtml" '.
248          'xml:lang="'.$core->auth->getInfo('user_lang').'" '.
249          'lang="'.$core->auth->getInfo('user_lang').'">'."\n".
250          '<meta name="viewport" content="width=device-width, initial-scale=1.0" />'."\n".
251          "<head>\n".
252          '  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'."\n".
253          '  <title>'.$title.' - '.html::escapeHTML($core->blog->name).' - '.html::escapeHTML(DC_VENDOR_NAME).' - '.DC_VERSION.'</title>'."\n".
254
255          '  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />'."\n".
256          '  <meta name="GOOGLEBOT" content="NOSNIPPET" />'."\n".
257
258          self::jsLoadIE7().
259          '    <link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />'."\n";
260          if (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl') {
261               echo
262               '    <link rel="stylesheet" href="style/default-rtl.css" type="text/css" media="screen" />'."\n";
263          }
264
265          echo
266          self::jsCommon().
267          self::jsToggles().
268          $head;
269
270          # --BEHAVIOR-- adminPageHTMLHead
271          $core->callBehavior('adminPageHTMLHead');
272
273          echo
274          "</head>\n".
275          '<body id="dotclear-admin" class="popup">'."\n".
276
277          '<h1>'.DC_VENDOR_NAME.'</h1>'."\n";
278
279          echo
280          '<div id="wrapper">'."\n".
281          '<div id="main">'."\n".
282          '<div id="content">'."\n";
283
284          // display breadcrumb if given
285          echo $breadcrumb;
286
287          if ($core->error->flag()) {
288               echo
289               '<div class="error"><strong>'.__('Errors:').'</strong>'.
290               $core->error->toHTML().
291               '</div>';
292          }
293     }
294
295     public static function closePopup()
296     {
297          echo
298          "</div>\n".         // End of #content
299          "</div>\n".         // End of #main
300          "</div>\n".         // End of #wrapper
301          '<div id="footer"><p>&nbsp;</p></div>'."\n".
302          '</body></html>';
303     }
304
305     public static function breadcrumb($elements=null,$with_home_link=true,$echo=false)
306     {
307          // First item of array elements should be blog's name, System or Plugins
308          $res = '<h2>'.($with_home_link ?
309               '<a class="go_home" href="index.php"><img src="style/dashboard.png" alt="'.__('Go to dashboard').'" /></a>' :
310               '<img src="style/dashboard-alt.png" alt="" />');
311          $index = 0;
312          foreach ($elements as $element => $url) {
313               $res .= ($with_home_link ? ($index == 1 ? ' : ' : ' &rsaquo; ') : ($index == 0 ? ' ' : ' &rsaquo; ')).
314                    ($url ? '<a href="'.$url.'">' : '').$element.($url ? '</a>' : '');
315               $index++;
316          }
317          $res .= '</h2>';
318          if ($echo) {
319               echo $res;
320          }
321          return $res;
322     }
323
324     public static function message($msg,$timestamp=true,$div=false,$echo=true,$class='message')
325     {
326          global $core;
327
328          $res = '';
329          if ($msg != '') {
330               $res = ($div ? '<div class="'.$class.'">' : '').'<p'.($div ? '' : ' class="'.$class.'"').'>'.
331               ($timestamp ? dt::str(__('%H:%M:%S:'),null,$core->auth->getInfo('user_tz')).' ' : '').$msg.
332               '</p>'.($div ? '</div>' : '');
333               if ($echo) {
334                    echo $res;
335               }
336          }
337          return $res;
338     }
339
340     public static function success($msg,$timestamp=true,$div=false,$echo=true)
341     {
342          return self::message($msg,$timestamp,$div,$echo,"success");
343     }
344
345     public static function warning($msg,$timestamp=true,$div=false,$echo=true)
346     {
347          return self::message($msg,$timestamp,$div,$echo,"warning-msg");
348     }
349
350     private static function debugInfo()
351     {
352          $global_vars = implode(', ',array_keys($GLOBALS));
353
354          $res =
355          '<div id="debug"><div>'.
356          '<p>memory usage: '.memory_get_usage().' ('.files::size(memory_get_usage()).')</p>';
357
358          if (function_exists('xdebug_get_profiler_filename'))
359          {
360               $res .= '<p>Elapsed time: '.xdebug_time_index().' seconds</p>';
361
362               $prof_file = xdebug_get_profiler_filename();
363               if ($prof_file) {
364                    $res .= '<p>Profiler file : '.xdebug_get_profiler_filename().'</p>';
365               } else {
366                    $prof_url = http::getSelfURI();
367                    $prof_url .= (strpos($prof_url,'?') === false) ? '?' : '&';
368                    $prof_url .= 'XDEBUG_PROFILE';
369                    $res .= '<p><a href="'.html::escapeURL($prof_url).'">Trigger profiler</a></p>';
370               }
371
372               /* xdebug configuration:
373               zend_extension = /.../xdebug.so
374               xdebug.auto_trace = On
375               xdebug.trace_format = 0
376               xdebug.trace_options = 1
377               xdebug.show_mem_delta = On
378               xdebug.profiler_enable = 0
379               xdebug.profiler_enable_trigger = 1
380               xdebug.profiler_output_dir = /tmp
381               xdebug.profiler_append = 0
382               xdebug.profiler_output_name = timestamp
383               */
384          }
385
386          $res .=
387          '<p>Global vars: '.$global_vars.'</p>'.
388          '</div></div>';
389
390          return $res;
391     }
392
393     public static function help($page,$index='')
394     {
395          # Deprecated but we keep this for plugins.
396     }
397
398     public static function helpBlock()
399     {
400          $args = func_get_args();
401
402          $args = new ArrayObject($args);
403
404          # --BEHAVIOR-- adminPageHelpBlock
405          $GLOBALS['core']->callBehavior('adminPageHelpBlock',$args);
406
407          if (empty($args)) {
408               return;
409          };
410
411          global $__resources;
412          if (empty($__resources['help'])) {
413               return;
414          }
415
416          $content = '';
417          foreach ($args as $v)
418          {
419               if (is_object($v) && isset($v->content)) {
420                    $content .= $v->content;
421                    continue;
422               }
423
424               if (!isset($__resources['help'][$v])) {
425                    continue;
426               }
427               $f = $__resources['help'][$v];
428               if (!file_exists($f) || !is_readable($f)) {
429                    continue;
430               }
431
432               $fc = file_get_contents($f);
433               if (preg_match('|<body[^>]*?>(.*?)</body>|ms',$fc,$matches)) {
434                    $content .= $matches[1];
435               } else {
436                    $content .= $fc;
437               }
438          }
439
440          if (trim($content) == '') {
441               return;
442          }
443
444          // Set contextual help global flag
445          $GLOBALS['__resources']['ctxhelp'] = true;
446
447          echo
448          '<div id="help"><hr /><div class="help-content clear"><h3>'.__('Help about this page').'</h3>'.
449          $content.
450          '</div>'.
451          '<div id="helplink"><hr />'.
452          '<p>'.
453          sprintf(__('See also %s'),sprintf('<a href="help.php">%s</a>',__('the global help'))).
454          '.</p>'.
455          '</div></div>';
456     }
457
458     public static function jsLoad($src)
459     {
460          $escaped_src = html::escapeHTML($src);
461          if (!isset(self::$loaded_js[$escaped_src])) {
462               self::$loaded_js[$escaped_src]=true;
463               return '<script type="text/javascript" src="'.$escaped_src.'"></script>'."\n";
464          }
465     }
466
467     public static function jsVar($n,$v)
468     {
469          return $n." = '".html::escapeJS($v)."';\n";
470     }
471
472     public static function jsToggles()
473     {
474          if($GLOBALS['core']->auth->user_prefs->toggles) {
475               $unfolded_sections = explode(',',$GLOBALS['core']->auth->user_prefs->toggles->unfolded_sections);
476               foreach ($unfolded_sections as $k=>&$v) {
477                    if ($v == '') {
478                         unset($unfolded_sections[$k]);
479                    } else {
480                         $v = "'".html::escapeJS($v)."':true";
481                    }
482               }
483          } else {
484               $unfolded_sections=array();
485          }
486          return '<script type="text/javascript">'."\n".
487                         "//<![CDATA[\n".
488                         'dotclear.unfolded_sections = {'.join(",",$unfolded_sections)."};\n".
489                         "\n//]]>\n".
490                    "</script>\n";
491     }
492     
493     public static function jsCommon()
494     {
495          $mute_or_no = '';
496          if (empty($GLOBALS['core']->blog) || $GLOBALS['core']->blog->settings->system->jquery_migrate_mute) {
497               $mute_or_no .=
498                    '<script type="text/javascript">'."\n".
499                    "//<![CDATA[\n".
500                    'jQuery.migrateMute = true;'.
501                    "\n//]]>\n".
502                    "</script>\n";
503          }
504
505          return
506          self::jsLoad('js/jquery/jquery.js').
507          $mute_or_no.
508          self::jsLoad('js/jquery/jquery-migrate-1.2.1.js').
509          self::jsLoad('js/jquery/jquery.biscuit.js').
510          self::jsLoad('js/jquery/jquery.bgFade.js').
511          self::jsLoad('js/common.js').
512          self::jsLoad('js/prelude.js').
513
514          '<script type="text/javascript">'."\n".
515          "//<![CDATA[\n".
516          self::jsVar('dotclear.nonce',$GLOBALS['core']->getNonce()).
517          self::jsVar('dotclear.img_plus_src','images/expand.png').
518          self::jsVar('dotclear.img_plus_alt',__('uncover')).
519          self::jsVar('dotclear.img_minus_src','images/hide.png').
520          self::jsVar('dotclear.img_minus_alt',__('hide')).
521          self::jsVar('dotclear.img_menu_on','images/menu_on.png').
522          self::jsVar('dotclear.img_menu_off','images/menu_off.png').
523
524          self::jsVar('dotclear.msg.help',
525               __('Need help?')).
526          self::jsVar('dotclear.msg.help_hide',
527               __('Hide')).
528          self::jsVar('dotclear.msg.to_select',
529               __('Select:')).
530          self::jsVar('dotclear.msg.no_selection',
531               __('no selection')).
532          self::jsVar('dotclear.msg.select_all',
533               __('select all')).
534          self::jsVar('dotclear.msg.invert_sel',
535               __('Invert selection')).
536          self::jsVar('dotclear.msg.website',
537               __('Web site:')).
538          self::jsVar('dotclear.msg.email',
539               __('Email:')).
540          self::jsVar('dotclear.msg.ip_address',
541               __('IP address:')).
542          self::jsVar('dotclear.msg.error',
543               __('Error:')).
544          self::jsVar('dotclear.msg.entry_created',
545               __('Entry has been successfully created.')).
546          self::jsVar('dotclear.msg.edit_entry',
547               __('Edit entry')).
548          self::jsVar('dotclear.msg.view_entry',
549               __('view entry')).
550          self::jsVar('dotclear.msg.confirm_delete_posts',
551               __("Are you sure you want to delete selected entries (%s)?")).
552          self::jsVar('dotclear.msg.confirm_delete_categories',
553               __("Are you sure you want to delete selected categories (%s)?")).
554          self::jsVar('dotclear.msg.confirm_delete_post',
555               __("Are you sure you want to delete this entry?")).
556          self::jsVar('dotclear.msg.click_to_unlock',
557               __("Click here to unlock the field")).
558          self::jsVar('dotclear.msg.confirm_spam_delete',
559               __('Are you sure you want to delete all spams?')).
560          self::jsVar('dotclear.msg.confirm_delete_comments',
561               __('Are you sure you want to delete selected comments (%s)?')).
562          self::jsVar('dotclear.msg.confirm_delete_comment',
563               __('Are you sure you want to delete this comment?')).
564          self::jsVar('dotclear.msg.cannot_delete_users',
565               __('Users with posts cannot be deleted.')).
566          self::jsVar('dotclear.msg.confirm_delete_user',
567               __('Are you sure you want to delete selected users (%s)?')).
568          self::jsVar('dotclear.msg.confirm_delete_category',
569               __('Are you sure you want to delete category "%s"?')).
570          self::jsVar('dotclear.msg.confirm_reorder_categories',
571               __('Are you sure you want to reorder all categories?')).
572          self::jsVar('dotclear.msg.confirm_delete_media',
573               __('Are you sure you want to remove media "%s"?')).
574          self::jsVar('dotclear.msg.confirm_extract_current',
575               __('Are you sure you want to extract archive in current directory?')).
576          self::jsVar('dotclear.msg.confirm_remove_attachment',
577               __('Are you sure you want to remove attachment "%s"?')).
578          self::jsVar('dotclear.msg.confirm_delete_lang',
579               __('Are you sure you want to delete "%s" language?')).
580          self::jsVar('dotclear.msg.confirm_delete_plugin',
581               __('Are you sure you want to delete "%s" plugin?')).
582          self::jsVar('dotclear.msg.use_this_theme',
583               __('Use this theme')).
584          self::jsVar('dotclear.msg.remove_this_theme',
585               __('Remove this theme')).
586          self::jsVar('dotclear.msg.confirm_delete_theme',
587               __('Are you sure you want to delete "%s" theme?')).
588          self::jsVar('dotclear.msg.confirm_delete_backup',
589               __('Are you sure you want to delete this backup?')).
590          self::jsVar('dotclear.msg.zip_file_content',
591               __('Zip file content')).
592          self::jsVar('dotclear.msg.xhtml_validator',
593               __('XHTML markup validator')).
594          self::jsVar('dotclear.msg.xhtml_valid',
595               __('XHTML content is valid.')).
596          self::jsVar('dotclear.msg.xhtml_not_valid',
597               __('There are XHTML markup errors.')).
598          self::jsVar('dotclear.msg.warning_validate_no_save_content',
599               __('Attention: an audit of a content not yet registered.')).
600          self::jsVar('dotclear.msg.confirm_change_post_format',
601               __('You have unsaved changes. Switch post format will loose these changes. Proceed anyway?')).
602          self::jsVar('dotclear.msg.confirm_change_post_format_noconvert',
603               __("Warning: post format change will not convert existing content. You will need to apply new format by yourself. Proceed anyway?")).
604          self::jsVar('dotclear.msg.load_enhanced_uploader',
605               __('Loading enhanced uploader, please wait.')).
606               "\n//]]>\n".
607          "</script>\n";
608     }
609
610     public static function jsLoadIE7()
611     {
612          return
613          '<!--[if lt IE 9]>'."\n".
614          self::jsLoad('js/ie7/IE9.js').
615          '<link rel="stylesheet" type="text/css" href="style/iesucks.css" />'."\n".
616          '<![endif]-->'."\n";
617     }
618
619     public static function jsConfirmClose()
620     {
621          $args = func_get_args();
622          if (count($args) > 0) {
623               foreach ($args as $k => $v) {
624                    $args[$k] = "'".html::escapeJS($v)."'";
625               }
626               $args = implode(',',$args);
627          } else {
628               $args = '';
629          }
630
631          return
632          self::jsLoad('js/confirm-close.js').
633          '<script type="text/javascript">'."\n".
634          "//<![CDATA[\n".
635          "confirmClosePage = new confirmClose(".$args."); ".
636          "confirmClose.prototype.prompt = '".html::escapeJS(__('You have unsaved changes.'))."'; ".
637          "\n//]]>\n".
638          "</script>\n";
639     }
640
641     public static function jsPageTabs($default=null)
642     {
643          if ($default) {
644               $default = "'".html::escapeJS($default)."'";
645          }
646
647          return
648          self::jsLoad('js/jquery/jquery.pageTabs.js').
649          '<script type="text/javascript">'."\n".
650          "//<![CDATA[\n".
651          '$(function() {'."\n".
652          '$.pageTabs('.$default.');'."\n".
653          '});'."\n".
654          "\n//]]>\n".
655          "</script>\n";
656     }
657
658public static function jsModal()
659{
660     return
661     '<link rel="stylesheet" type="text/css" href="style/modal/modal.css" />'."\n".
662     self::jsLoad('js/jquery/jquery.modal.js').
663     '<script type="text/javascript">'."\n".
664     "//<![CDATA[\n".
665     self::jsVar('$.modal.prototype.params.loader_img','style/modal/loader.gif').
666     self::jsVar('$.modal.prototype.params.close_img','style/modal/close.png').
667     "\n//]]>\n".
668     "</script>\n";
669}
670
671public static function jsColorPicker()
672{
673     return
674     '<link rel="stylesheet" type="text/css" href="style/farbtastic/farbtastic.css" />'."\n".
675     self::jsLoad('js/jquery/jquery.farbtastic.js').
676     self::jsLoad('js/color-picker.js');
677}
678
679public static function jsDatePicker()
680{
681     return
682     '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n".
683     self::jsLoad('js/date-picker.js').
684     '<script type="text/javascript">'."\n".
685     "//<![CDATA[\n".
686
687     "datePicker.prototype.months[0] = '".html::escapeJS(__('January'))."'; ".
688     "datePicker.prototype.months[1] = '".html::escapeJS(__('February'))."'; ".
689     "datePicker.prototype.months[2] = '".html::escapeJS(__('March'))."'; ".
690     "datePicker.prototype.months[3] = '".html::escapeJS(__('April'))."'; ".
691     "datePicker.prototype.months[4] = '".html::escapeJS(__('May'))."'; ".
692     "datePicker.prototype.months[5] = '".html::escapeJS(__('June'))."'; ".
693     "datePicker.prototype.months[6] = '".html::escapeJS(__('July'))."'; ".
694     "datePicker.prototype.months[7] = '".html::escapeJS(__('August'))."'; ".
695     "datePicker.prototype.months[8] = '".html::escapeJS(__('September'))."'; ".
696     "datePicker.prototype.months[9] = '".html::escapeJS(__('October'))."'; ".
697     "datePicker.prototype.months[10] = '".html::escapeJS(__('November'))."'; ".
698     "datePicker.prototype.months[11] = '".html::escapeJS(__('December'))."'; ".
699
700     "datePicker.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ".
701     "datePicker.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ".
702     "datePicker.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ".
703     "datePicker.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ".
704     "datePicker.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ".
705     "datePicker.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ".
706     "datePicker.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ".
707
708     "datePicker.prototype.img_src = 'images/date-picker.png'; ".
709
710     "datePicker.prototype.close_msg = '".html::escapeJS(__('close'))."'; ".
711     "datePicker.prototype.now_msg = '".html::escapeJS(__('now'))."'; ".
712
713     "\n//]]>\n".
714     "</script>\n";
715}
716
717public static function jsToolBar()
718{
719     $res =
720     '<link rel="stylesheet" type="text/css" href="style/jsToolBar/jsToolBar.css" />'.
721     '<script type="text/javascript" src="js/jsToolBar/jsToolBar.js"></script>';
722
723     if (isset($GLOBALS['core']->auth) && $GLOBALS['core']->auth->getOption('enable_wysiwyg')) {
724          $res .= '<script type="text/javascript" src="js/jsToolBar/jsToolBar.wysiwyg.js"></script>';
725     }
726
727     $res .=
728     '<script type="text/javascript" src="js/jsToolBar/jsToolBar.dotclear.js"></script>'.
729     '<script type="text/javascript">'."\n".
730     "//<![CDATA[\n".
731     "jsToolBar.prototype.dialog_url = 'popup.php'; ".
732     "jsToolBar.prototype.iframe_css = '".
733     'body{'.
734     'font: 12px "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;'.
735     'color : #000;'.
736     'background: #f9f9f9;'.
737     'margin: 0;'.
738     'padding : 2px;'.
739     'border: none;'.
740     (l10n::getTextDirection($GLOBALS['_lang']) == 'rtl' ? 'direction:rtl;' : '').
741     '}'.
742     'pre, code, kbd, samp {'.
743     'font-family:"Courier New",Courier,monospace;'.
744     'font-size : 1.1em;'.
745     '}'.
746     'code {'.
747     'color : #666;'.
748     'font-weight : bold;'.
749     '}'.
750     'body > p:first-child {'.
751     'margin-top: 0;'.
752     '}'.
753     "'; ".
754     "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."'; ".
755     "jsToolBar.prototype.switcher_visual_title = '".html::escapeJS(__('visual'))."'; ".
756     "jsToolBar.prototype.switcher_source_title = '".html::escapeJS(__('source'))."'; ".
757     "jsToolBar.prototype.legend_msg = '".
758     html::escapeJS(__('You can use the following shortcuts to format your text.'))."'; ".
759     "jsToolBar.prototype.elements.blocks.options.none = '".html::escapeJS(__('-- none --'))."'; ".
760     "jsToolBar.prototype.elements.blocks.options.nonebis = '".html::escapeJS(__('-- block format --'))."'; ".
761     "jsToolBar.prototype.elements.blocks.options.p = '".html::escapeJS(__('Paragraph'))."'; ".
762     "jsToolBar.prototype.elements.blocks.options.h1 = '".html::escapeJS(__('Level 1 header'))."'; ".
763     "jsToolBar.prototype.elements.blocks.options.h2 = '".html::escapeJS(__('Level 2 header'))."'; ".
764     "jsToolBar.prototype.elements.blocks.options.h3 = '".html::escapeJS(__('Level 3 header'))."'; ".
765     "jsToolBar.prototype.elements.blocks.options.h4 = '".html::escapeJS(__('Level 4 header'))."'; ".
766     "jsToolBar.prototype.elements.blocks.options.h5 = '".html::escapeJS(__('Level 5 header'))."'; ".
767     "jsToolBar.prototype.elements.blocks.options.h6 = '".html::escapeJS(__('Level 6 header'))."'; ".
768     "jsToolBar.prototype.elements.strong.title = '".html::escapeJS(__('Strong emphasis'))."'; ".
769     "jsToolBar.prototype.elements.em.title = '".html::escapeJS(__('Emphasis'))."'; ".
770     "jsToolBar.prototype.elements.ins.title = '".html::escapeJS(__('Inserted'))."'; ".
771     "jsToolBar.prototype.elements.del.title = '".html::escapeJS(__('Deleted'))."'; ".
772     "jsToolBar.prototype.elements.quote.title = '".html::escapeJS(__('Inline quote'))."'; ".
773     "jsToolBar.prototype.elements.code.title = '".html::escapeJS(__('Code'))."'; ".
774     "jsToolBar.prototype.elements.br.title = '".html::escapeJS(__('Line break'))."'; ".
775     "jsToolBar.prototype.elements.blockquote.title = '".html::escapeJS(__('Blockquote'))."'; ".
776     "jsToolBar.prototype.elements.pre.title = '".html::escapeJS(__('Preformated text'))."'; ".
777     "jsToolBar.prototype.elements.ul.title = '".html::escapeJS(__('Unordered list'))."'; ".
778     "jsToolBar.prototype.elements.ol.title = '".html::escapeJS(__('Ordered list'))."'; ".
779
780     "jsToolBar.prototype.elements.link.title = '".html::escapeJS(__('Link'))."'; ".
781     "jsToolBar.prototype.elements.link.href_prompt = '".html::escapeJS(__('URL?'))."'; ".
782     "jsToolBar.prototype.elements.link.hreflang_prompt = '".html::escapeJS(__('Language?'))."'; ".
783
784     "jsToolBar.prototype.elements.img.title = '".html::escapeJS(__('External image'))."'; ".
785     "jsToolBar.prototype.elements.img.src_prompt = '".html::escapeJS(__('URL?'))."'; ".
786
787     "jsToolBar.prototype.elements.img_select.title = '".html::escapeJS(__('Media chooser'))."'; ".
788     "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."'; ";
789
790     if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) {
791          $res .= "jsToolBar.prototype.elements.img_select.disabled = true;\n";
792     }
793
794     $res .=
795     "\n//]]>\n".
796     "</script>\n";
797
798     return $res;
799}
800
801public static function jsUpload($params=array(),$base_url=null)
802{
803     if (!$base_url) {
804          $base_url = path::clean(dirname(preg_replace('/(\?.*$)?/','',$_SERVER['REQUEST_URI']))).'/';
805     }
806
807     $params = array_merge($params,array(
808          'sess_id='.session_id(),
809          'sess_uid='.$_SESSION['sess_browser_uid'],
810          'xd_check='.$GLOBALS['core']->getNonce()
811          ));
812
813     return
814     '<script type="text/javascript">'."\n".
815     "//<![CDATA[\n".
816     "dotclear.jsUpload = {};\n".
817     "dotclear.jsUpload.msg = {};\n".
818     self::jsVar('dotclear.msg.enhanced_uploader_activate',__('Temporarily activate enhanced uploader')).
819     self::jsVar('dotclear.msg.enhanced_uploader_disable',__('Temporarily disable enhanced uploader')).
820     self::jsVar('dotclear.jsUpload.msg.limit_exceeded',__('Limit exceeded.')).
821     self::jsVar('dotclear.jsUpload.msg.size_limit_exceeded',__('File size exceeds allowed limit.')).
822     self::jsVar('dotclear.jsUpload.msg.canceled',__('Canceled.')).
823     self::jsVar('dotclear.jsUpload.msg.http_error',__('HTTP Error:')).
824     self::jsVar('dotclear.jsUpload.msg.error',__('Error:')).
825     self::jsVar('dotclear.jsUpload.msg.choose_file',__('Choose file')).
826     self::jsVar('dotclear.jsUpload.msg.choose_files',__('Choose files')).
827     self::jsVar('dotclear.jsUpload.msg.cancel',__('Cancel')).
828     self::jsVar('dotclear.jsUpload.msg.clean',__('Clean')).
829     self::jsVar('dotclear.jsUpload.msg.upload',__('Upload')).
830     self::jsVar('dotclear.jsUpload.msg.send',__('Send')).
831     self::jsVar('dotclear.jsUpload.msg.file_successfully_uploaded',__('File successfully uploaded.')).
832     self::jsVar('dotclear.jsUpload.msg.no_file_in_queue',__('No file in queue.')).
833     self::jsVar('dotclear.jsUpload.msg.file_in_queue',__('1 file in queue.')).
834     self::jsVar('dotclear.jsUpload.msg.files_in_queue',__('%d files in queue.')).
835     self::jsVar('dotclear.jsUpload.msg.queue_error',__('Queue error:')).
836     self::jsVar('dotclear.jsUpload.base_url',$base_url).
837     "\n//]]>\n".
838     "</script>\n".
839
840     self::jsLoad('js/jsUpload/vendor/jquery.ui.widget.js').
841     self::jsLoad('js/jsUpload/tmpl.js').
842     self::jsLoad('js/jsUpload/template-upload.js').
843     self::jsLoad('js/jsUpload/template-download.js').
844     self::jsLoad('js/jsUpload/load-image.js').
845     self::jsLoad('js/jsUpload/jquery.iframe-transport.js').
846     self::jsLoad('js/jsUpload/jquery.fileupload.js').
847     self::jsLoad('js/jsUpload/jquery.fileupload-process.js').
848     self::jsLoad('js/jsUpload/jquery.fileupload-resize.js').
849     self::jsLoad('js/jsUpload/jquery.fileupload-ui.js');
850}
851
852public static function jsToolMan()
853{
854     return
855     '<script type="text/javascript" src="js/tool-man/core.js"></script>'.
856     '<script type="text/javascript" src="js/tool-man/events.js"></script>'.
857     '<script type="text/javascript" src="js/tool-man/css.js"></script>'.
858     '<script type="text/javascript" src="js/tool-man/coordinates.js"></script>'.
859     '<script type="text/javascript" src="js/tool-man/drag.js"></script>'.
860     '<script type="text/javascript" src="js/tool-man/dragsort.js"></script>'.
861     '<script type="text/javascript" src="js/dragsort-tablerows.js"></script>';
862}
863
864public static function jsMetaEditor()
865{
866     return
867     '<script type="text/javascript" src="js/meta-editor.js"></script>';
868}
869}
870?>
Note: See TracBrowser for help on using the repository browser.

Sites map