Dotclear

source: admin/blog_pref.php @ 3227:302777510b83

Revision 3227:302777510b83, 30.3 KB checked in by franck <carnet.franck.paul@…>, 9 years ago (diff)

Blog description is now editable with XHTML editor (set in user pref)

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 -----------------------------------------
12
13$standalone = !isset($edit_blog_mode);
14
15$blog_id = false;
16
17if ($standalone)
18{
19     require dirname(__FILE__).'/../inc/admin/prepend.php';
20     dcPage::check('admin');
21     $blog_id = $core->blog->id;
22     $blog_status = $core->blog->status;
23     $blog_name = $core->blog->name;
24     $blog_desc = $core->blog->desc;
25     $blog_settings = $core->blog->settings;
26     $blog_url = $core->blog->url;
27
28     $action = $core->adminurl->get("admin.blog.pref");
29     $redir = $core->adminurl->get("admin.blog.pref");
30}
31else
32{
33     dcPage::checkSuper();
34     try
35     {
36          if (empty($_REQUEST['id'])) {
37               throw new Exception(__('No given blog id.'));
38          }
39          $rs = $core->getBlog($_REQUEST['id']);
40
41          if (!$rs) {
42               throw new Exception(__('No such blog.'));
43          }
44
45          $blog_id = $rs->blog_id;
46          $blog_status = $rs->blog_status;
47          $blog_name = $rs->blog_name;
48          $blog_desc = $rs->blog_desc;
49          $blog_settings = new dcSettings($core,$blog_id);
50          $blog_url = $rs->blog_url ;
51     }
52     catch (Exception $e)
53     {
54          $core->error->add($e->getMessage());
55     }
56
57     $action = $core->adminurl->get("admin.blog");
58     $redir = $core->adminurl->get("admin.blog",array('id' => "%s"),'&',true);
59}
60
61# Language codes
62$lang_combo = dcAdminCombos::getAdminLangsCombo();
63
64# Status combo
65$status_combo = dcAdminCombos::getBlogStatusescombo();
66
67# Date format combo
68$now = time();
69$date_formats = $blog_settings->system->date_formats;
70$time_formats = $blog_settings->system->time_formats;
71$date_formats_combo = array('' => '');
72foreach ($date_formats as $format) {
73    $date_formats_combo[dt::str($format, $now)] = $format;
74}
75$time_formats_combo = array('' => '');
76foreach ($time_formats as $format) {
77    $time_formats_combo[dt::str($format, $now)] = $format;
78}
79
80
81# URL scan modes
82$url_scan_combo = array(
83     'PATH_INFO' => 'path_info',
84     'QUERY_STRING' => 'query_string'
85);
86
87# Post URL combo
88$post_url_combo = array(
89     __('year/month/day/title') => '{y}/{m}/{d}/{t}',
90     __('year/month/title') => '{y}/{m}/{t}',
91     __('year/title') => '{y}/{t}',
92     __('title') => '{t}',
93     __('post id/title') => '{id}/{t}',
94     __('post id') => '{id}'
95);
96if (!in_array($blog_settings->system->post_url_format,$post_url_combo)) {
97     $post_url_combo[html::escapeHTML($blog_settings->system->post_url_format)] = html::escapeHTML($blog_settings->system->post_url_format);
98}
99
100# Note title tag combo
101$note_title_tag_combo = array(
102     __('H4') => 0,
103     __('H3') => 1,
104     __('P') => 2
105);
106
107# Image title combo
108$img_title_combo = array(
109     __('(none)') => '',
110     __('Title') => 'Title ;; separator(, )',
111     __('Title, Date') => 'Title ;; Date(%b %Y) ;; separator(, )',
112     __('Title, Country, Date') => 'Title ;; Country ;; Date(%b %Y) ;; separator(, )',
113     __('Title, City, Country, Date') => 'Title ;; City ;; Country ;; Date(%b %Y) ;; separator(, )',
114);
115if (!in_array($blog_settings->system->media_img_title_pattern,$img_title_combo)) {
116     $img_title_combo[html::escapeHTML($blog_settings->system->media_img_title_pattern)] = html::escapeHTML($blog_settings->system->media_img_title_pattern);
117}
118
119# Image default size combo
120$img_default_size_combo = array();
121try {
122     $media = new dcMedia($core);
123     $img_default_size_combo[__('original')] = 'o';
124     foreach ($media->thumb_sizes as $code => $size) {
125          $img_default_size_combo[__($size[2])] = $code;
126     }
127} catch (Exception $e) {
128     $core->error->add($e->getMessage());
129}
130
131# Image default alignment combo
132$img_default_alignment_combo = array(
133     __('None') => 'none',
134     __('Left') => 'left',
135     __('Right') => 'right',
136     __('Center') => 'center'
137);
138
139# Robots policy options
140$robots_policy_options = array(
141     'INDEX,FOLLOW' => __("I would like search engines and archivers to index and archive my blog's content."),
142     'INDEX,FOLLOW,NOARCHIVE' => __("I would like search engines and archivers to index but not archive my blog's content."),
143     'NOINDEX,NOFOLLOW,NOARCHIVE' => __("I would like to prevent search engines and archivers from indexing or archiving my blog's content."),
144);
145
146# jQuery available versions
147$jquery_root = dirname(__FILE__).'/../inc/js/jquery';
148$jquery_versions_combo = array(__('Default').' ('.DC_DEFAULT_JQUERY.')' => DC_DEFAULT_JQUERY);
149if (is_dir($jquery_root) && is_readable($jquery_root)) {
150     if (($d = @dir($jquery_root)) !== false) {
151          while (($entry = $d->read()) !== false) {
152               if ($entry != '.' && $entry != '..' && substr($entry, 0, 1) != '.' && is_dir($jquery_root.'/'.$entry)) {
153                    if ($entry != DC_DEFAULT_JQUERY) {
154                         $jquery_versions_combo[$entry] = $entry;
155                    }
156               }
157          }
158     }
159}
160
161# Update a blog
162if ($blog_id && !empty($_POST) && $core->auth->check('admin',$blog_id))
163{
164     $cur = $core->con->openCursor($core->prefix.'blog');
165     $cur->blog_id = $_POST['blog_id'];
166     $cur->blog_url = preg_replace('/\?+$/','?', $_POST['blog_url']);
167     $cur->blog_name = $_POST['blog_name'];
168     $cur->blog_desc = $_POST['blog_desc'];
169
170     if ($core->auth->isSuperAdmin() && in_array($_POST['blog_status'], $status_combo)) {
171          $cur->blog_status = (int) $_POST['blog_status'];
172     }
173
174     $media_img_t_size = abs((integer) $_POST['media_img_t_size']);
175     if ($media_img_t_size < 0) { $media_img_t_size = 100; }
176
177     $media_img_s_size = abs((integer) $_POST['media_img_s_size']);
178     if ($media_img_s_size < 0) { $media_img_s_size = 240; }
179
180     $media_img_m_size = abs((integer) $_POST['media_img_m_size']);
181     if ($media_img_m_size < 0) { $media_img_m_size = 448; }
182
183     $media_video_width = abs((integer) $_POST['media_video_width']);
184     if ($media_video_width < 0) { $media_video_width = 400; }
185
186     $media_video_height = abs((integer) $_POST['media_video_height']);
187     if ($media_video_height < 0) { $media_video_height = 300; }
188
189     $nb_post_for_home = abs((integer) $_POST['nb_post_for_home']);
190     if ($nb_post_for_home <= 1) { $nb_post_for_home = 1; }
191
192     $nb_post_per_page = abs((integer) $_POST['nb_post_per_page']);
193     if ($nb_post_per_page <= 1) { $nb_post_per_page = 1; }
194
195     $nb_post_per_feed = abs((integer) $_POST['nb_post_per_feed']);
196     if ($nb_post_per_feed <= 1) { $nb_post_per_feed = 1; }
197
198     $nb_comment_per_feed = abs((integer) $_POST['nb_comment_per_feed']);
199     if ($nb_comment_per_feed <= 1) { $nb_comment_per_feed = 1; }
200
201     try
202     {
203          if ($cur->blog_id != null && $cur->blog_id != $blog_id) {
204               $rs = $core->getBlog($cur->blog_id);
205
206               if ($rs) {
207                    throw new Exception(__('This blog ID is already used.'));
208               }
209          }
210
211          # --BEHAVIOR-- adminBeforeBlogUpdate
212          $core->callBehavior('adminBeforeBlogUpdate',$cur,$blog_id);
213
214          if (!preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_POST['lang'])) {
215               throw new Exception(__('Invalid language code'));
216          }
217
218          $core->updBlog($blog_id,$cur);
219
220          # --BEHAVIOR-- adminAfterBlogUpdate
221          $core->callBehavior('adminAfterBlogUpdate',$cur,$blog_id);
222
223          if ($cur->blog_id != null && $cur->blog_id != $blog_id) {
224               if ($blog_id == $core->blog->id) {
225                    $core->setBlog($cur->blog_id);
226                    $_SESSION['sess_blog_id'] = $cur->blog_id;
227                    $blog_settings = $core->blog->settings;
228               } else {
229                    $blog_settings = new dcSettings($core,$cur->blog_id);
230               }
231
232               $blog_id = $cur->blog_id;
233          }
234
235
236          $blog_settings->addNameSpace('system');
237
238          $blog_settings->system->put('editor',$_POST['editor']);
239          $blog_settings->system->put('copyright_notice',$_POST['copyright_notice']);
240          $blog_settings->system->put('post_url_format',$_POST['post_url_format']);
241          $blog_settings->system->put('lang',$_POST['lang']);
242          $blog_settings->system->put('blog_timezone',$_POST['blog_timezone']);
243          $blog_settings->system->put('date_format',$_POST['date_format']);
244          $blog_settings->system->put('time_format',$_POST['time_format']);
245          $blog_settings->system->put('comments_ttl',abs((integer) $_POST['comments_ttl']));
246          $blog_settings->system->put('trackbacks_ttl',abs((integer) $_POST['trackbacks_ttl']));
247          $blog_settings->system->put('allow_comments',!empty($_POST['allow_comments']));
248          $blog_settings->system->put('allow_trackbacks',!empty($_POST['allow_trackbacks']));
249          $blog_settings->system->put('comments_pub',empty($_POST['comments_pub']));
250          $blog_settings->system->put('trackbacks_pub',empty($_POST['trackbacks_pub']));
251          $blog_settings->system->put('comments_nofollow',!empty($_POST['comments_nofollow']));
252          $blog_settings->system->put('wiki_comments',!empty($_POST['wiki_comments']));
253          $blog_settings->system->put('comment_preview_optional',!empty($_POST['comment_preview_optional']));
254          $blog_settings->system->put('enable_xmlrpc',!empty($_POST['enable_xmlrpc']));
255          $blog_settings->system->put('note_title_tag',$_POST['note_title_tag']);
256          $blog_settings->system->put('nb_post_for_home',$nb_post_for_home);
257          $blog_settings->system->put('nb_post_per_page',$nb_post_per_page);
258          $blog_settings->system->put('use_smilies',!empty($_POST['use_smilies']));
259          $blog_settings->system->put('no_search',!empty($_POST['no_search']));
260          $blog_settings->system->put('inc_subcats',!empty($_POST['inc_subcats']));
261          $blog_settings->system->put('media_img_t_size',$media_img_t_size);
262          $blog_settings->system->put('media_img_s_size',$media_img_s_size);
263          $blog_settings->system->put('media_img_m_size',$media_img_m_size);
264          $blog_settings->system->put('media_video_width',$media_video_width);
265          $blog_settings->system->put('media_video_height',$media_video_height);
266          $blog_settings->system->put('media_flash_fallback',!empty($_POST['media_flash_fallback']));
267          $blog_settings->system->put('media_img_title_pattern',$_POST['media_img_title_pattern']);
268          $blog_settings->system->put('media_img_use_dto_first',!empty($_POST['media_img_use_dto_first']));
269          $blog_settings->system->put('media_img_no_date_alone',!empty($_POST['media_img_no_date_alone']));
270          $blog_settings->system->put('media_img_default_size',$_POST['media_img_default_size']);
271          $blog_settings->system->put('media_img_default_alignment',$_POST['media_img_default_alignment']);
272          $blog_settings->system->put('media_img_default_link',!empty($_POST['media_img_default_link']));
273          $blog_settings->system->put('nb_post_per_feed',$nb_post_per_feed);
274          $blog_settings->system->put('nb_comment_per_feed',$nb_comment_per_feed);
275          $blog_settings->system->put('short_feed_items',!empty($_POST['short_feed_items']));
276          if (isset($_POST['robots_policy'])) {
277               $blog_settings->system->put('robots_policy',$_POST['robots_policy']);
278          }
279          $blog_settings->system->put('jquery_version',$_POST['jquery_version']);
280          $blog_settings->system->put('prevents_clickjacking',!empty($_POST['prevents_clickjacking']));
281
282          # --BEHAVIOR-- adminBeforeBlogSettingsUpdate
283          $core->callBehavior('adminBeforeBlogSettingsUpdate',$blog_settings);
284
285          if ($core->auth->isSuperAdmin() && in_array($_POST['url_scan'],$url_scan_combo)) {
286               $blog_settings->system->put('url_scan',$_POST['url_scan']);
287          }
288          dcPage::addSuccessNotice(__('Blog has been successfully updated.'));
289
290          http::redirect(sprintf($redir,$blog_id));
291     }
292     catch (Exception $e)
293     {
294          $core->error->add($e->getMessage());
295     }
296}
297
298if ($standalone) {
299     $breadcrumb = dcPage::breadcrumb(
300          array(
301               html::escapeHTML($blog_name) => '',
302               __('Blog settings') => ''
303          )
304     );
305} else {
306     $breadcrumb = dcPage::breadcrumb(
307          array(
308               __('System') => '',
309               __('Blogs') => $core->adminurl->get("admin.blogs"),
310               __('Blog settings').' : '.html::escapeHTML($blog_name) => ''
311          ));
312}
313
314$desc_editor = $core->auth->getOption('editor');
315
316dcPage::open(__('Blog settings'),
317     '<script type="text/javascript">'."\n".
318     "//<![CDATA["."\n".
319     dcPage::jsVar('dotclear.msg.warning_path_info',
320          __('Warning: except for special configurations, it is generally advised to have a trailing "/" in your blog URL in PATH_INFO mode.'))."\n".
321     dcPage::jsVar('dotclear.msg.warning_query_string',
322          __('Warning: except for special configurations, it is generally advised to have a trailing "?" in your blog URL in QUERY_STRING mode.'))."\n".
323     "//]]>".
324     "</script>".
325     dcPage::jsConfirmClose('blog-form').
326     $core->callBehavior('adminPostEditor',$desc_editor['xhtml'],'blog_desc',array('#blog_desc'),'xhtml').
327     dcPage::jsLoad('js/_blog_pref.js').
328
329
330     # --BEHAVIOR-- adminBlogPreferencesHeaders
331     $core->callBehavior('adminBlogPreferencesHeaders').
332
333     dcPage::jsPageTabs(),
334     $breadcrumb
335);
336
337if ($blog_id)
338{
339     if (!empty($_GET['add'])) {
340          dcPage::success(__('Blog has been successfully created.'));
341     }
342
343     if (!empty($_GET['upd'])) {
344          dcPage::success(__('Blog has been successfully updated.'));
345     }
346
347     echo
348     '<div class="multi-part" id="params" title="'.__('Parameters').'">'.
349     '<h3 class="out-of-screen-if-js">'.__('Parameters').'</h3>'.
350     '<form action="'.$action.'" method="post" id="blog-form">';
351
352     echo
353     '<div class="fieldset"><h4>'.__('Blog details').'</h4>'.
354     $core->formNonce();
355
356     if ($core->auth->isSuperAdmin())
357     {
358          echo
359          '<p><label for="blog_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').'</label>'.
360          form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</p>'.
361          '<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p> '.
362          '<p class="form-note warn">'.__('Please note that changing your blog ID may require changes in your public index.php file.').'</p>';
363     } else {
364          /*
365          Only super admins can change the blog ID and URL, but we need to pass
366          their values to the POST request via hidden html input values  so as
367          to allow admins to update other settings.
368          Otherwise dcCore::getBlogCursor() throws an exception.
369          */
370          echo form::field('blog_id', 30, 32, html::escapeHTML($blog_id), '', '', false, 'hidden="hidden"');
371          echo form::field('blog_url', 50, 255, html::escapeHTML($blog_url), '', '', false, 'hidden="hidden"');
372     }
373
374     echo
375     '<p><label for="blog_name" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog name:').'</label>'.
376     form::field('blog_name',30,255,html::escapeHTML($blog_name)).'</p>';
377
378     if ($core->auth->isSuperAdmin())
379     {
380          echo
381          '<p><label for="blog_url" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog URL:').'</label>'.
382          form::field('blog_url',50,255,html::escapeHTML($blog_url)).'</p>'.
383
384          '<p><label for="url_scan">'.__('URL scan method:').'</label>'.
385          form::combo('url_scan',$url_scan_combo,$blog_settings->system->url_scan).'</p>';
386
387          try
388          {
389               # Test URL of blog by testing it's ATOM feed
390               $file = $blog_url.$core->url->getURLFor('feed','atom');
391               $path = '';
392               $status = '404';
393               $content = '';
394
395               $client = netHttp::initClient($file,$path);
396               if ($client !== false) {
397                    $client->setTimeout(4);
398                    $client->setUserAgent($_SERVER['HTTP_USER_AGENT']);
399                    $client->get($path);
400                    $status = $client->getStatus();
401                    $content = $client->getContent();
402               }
403               if ($status != '200') {
404                    // Might be 404 (URL not found), 670 (blog not online), ...
405                    echo
406                    '<p class="form-note warn">'.
407                    sprintf(__('The URL of blog or the URL scan method might not be well set (<code>%s</code> return a <strong>%s</strong> status).'),
408                              $file,$status).
409                    '</p>';
410               } else {
411                    if (substr($content,0,6) != '<?xml ') {
412                         // Not well formed XML feed
413                         echo
414                         '<p class="form-note warn">'.
415                         sprintf(__('The URL of blog or the URL scan method might not be well set (<code>%s</code> does not return an ATOM feed).'),
416                                   $file).
417                         '</p>';
418                    }
419               }
420          }
421          catch (Exception $e)
422          {
423               $core->error->add($e->getMessage());
424          }
425          echo
426          '<p><label for="blog_status">'.__('Blog status:').'</label>'.
427          form::combo('blog_status',$status_combo,$blog_status).'</p>';
428     }
429
430     echo
431     '<p class="area"><label for="blog_desc">'.__('Blog description:').'</label>'.
432     form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'</p>'.
433     '</div>';
434
435
436     echo
437     '<div class="fieldset"><h4>'.__('Blog configuration').'</h4>'.
438     '<div class="two-cols">'.
439     '<div class="col">'.
440     '<p><label for="editor">'.__('Blog editor name:').'</label>'.
441     form::field('editor',30,255,html::escapeHTML($blog_settings->system->editor)).
442     '</p>'.
443
444     '<p><label for="lang">'.__('Default language:').'</label>'.
445     form::combo('lang',$lang_combo,$blog_settings->system->lang,'l10n').
446     '</p>'.
447
448     '<p><label for="blog_timezone">'.__('Blog timezone:').'</label>'.
449     form::combo('blog_timezone',dt::getZones(true,true),html::escapeHTML($blog_settings->system->blog_timezone)).
450     '</p>'.
451
452     '<p><label for="copyright_notice">'.__('Copyright notice:').'</label>'.
453     form::field('copyright_notice',30,255,html::escapeHTML($blog_settings->system->copyright_notice)).
454     '</p>'.
455     '</div>'.
456
457     '<div class="col">'.
458     '<p><label for="post_url_format">'.__('New post URL format:').'</label>'.
459     form::combo('post_url_format',$post_url_combo,html::escapeHTML($blog_settings->system->post_url_format)).
460     '</p>'.
461
462     '<p><label for="note_title_tag">'.__('HTML tag for the title of the notes on the blog:').'</label>'.
463     form::combo('note_title_tag',$note_title_tag_combo,$blog_settings->system->note_title_tag).
464     '</p>'.
465
466     '<p><label for="enable_xmlrpc" class="classic">'.
467     form::checkbox('enable_xmlrpc','1',$blog_settings->system->enable_xmlrpc).
468     __('Enable XML/RPC interface').'</label>'.'</p>';
469
470     echo
471          '<p class="form-note info">'.__('XML/RPC interface allows you to edit your blog with an external client.').'</p>';
472
473     if ($blog_settings->system->enable_xmlrpc) {
474          echo
475          '<p>'.__('XML/RPC interface is active. You should set the following parameters on your XML/RPC client:').'</p>'.
476          '<ul>'.
477          '<li>'.__('Server URL:').' <strong><code>'.
478          sprintf(DC_XMLRPC_URL,$core->blog->url,$core->blog->id).
479          '</code></strong></li>'.
480          '<li>'.__('Blogging system:').' <strong><code>Movable Type</code></strong></li>'.
481          '<li>'.__('User name:').' <strong><code>'.$core->auth->userID().'</code></strong></li>'.
482          '<li>'.__('Password:').' <strong><code>&lt;'.__('your password').'&gt;</code></strong></li>'.
483          '<li>'.__('Blog ID:').' <strong><code>1</code></strong></li>'.
484          '</ul>';
485     }
486
487     echo
488     '</div>'.
489     '</div>'.
490     '<br class="clear" />'. //Opera sucks
491     '</div>';
492
493     echo
494     '<div class="fieldset"><h4>'.__('Comments and trackbacks').'</h4>'.
495
496     '<div class="two-cols">'.
497
498     '<div class="col">'.
499     '<p><label for="allow_comments" class="classic">'.
500     form::checkbox('allow_comments','1',$blog_settings->system->allow_comments).
501     __('Accept comments').'</label></p>'.
502     '<p><label for="comments_pub" class="classic">'.
503     form::checkbox('comments_pub','1',!$blog_settings->system->comments_pub).
504     __('Moderate comments').'</label></p>'.
505     '<p><label for="comments_ttl" class="classic">'.sprintf(__('Leave comments open for %s days').'.',
506     form::field('comments_ttl',2,3,$blog_settings->system->comments_ttl)).
507     '</label></p>'.
508     '<p class="form-note">'.__('No limit: leave blank.').'</p>'.
509     '<p><label for="wiki_comments" class="classic">'.
510     form::checkbox('wiki_comments','1',$blog_settings->system->wiki_comments).
511     __('Wiki syntax for comments').'</label></p>'.
512     '<p><label for="comment_preview_optional" class="classic">'.
513     form::checkbox('comment_preview_optional','1',$blog_settings->system->comment_preview_optional).
514     __('Preview of comment before submit is not mandatory').'</label></p>'.
515     '</div>'.
516
517     '<div class="col">'.
518     '<p><label for="allow_trackbacks" class="classic">'.
519     form::checkbox('allow_trackbacks','1',$blog_settings->system->allow_trackbacks).
520     __('Accept trackbacks').'</label></p>'.
521     '<p><label for="trackbacks_pub" class="classic">'.
522     form::checkbox('trackbacks_pub','1',!$blog_settings->system->trackbacks_pub).
523     __('Moderate trackbacks').'</label></p>'.
524     '<p><label for="trackbacks_ttl" class="classic">'.sprintf(__('Leave trackbacks open for %s days').'.',
525     form::field('trackbacks_ttl',2,3,$blog_settings->system->trackbacks_ttl)).'</label></p>'.
526     '<p class="form-note">'.__('No limit: leave blank.').'</p>'.
527     '<p><label for="comments_nofollow" class="classic">'.
528     form::checkbox('comments_nofollow','1',$blog_settings->system->comments_nofollow).
529     __('Add "nofollow" relation on comments and trackbacks links').'</label></p>'.
530     '</div>'.
531     '<br class="clear" />'. //Opera sucks
532
533     '</div>'.
534     '<br class="clear" />'. //Opera sucks
535     '</div>';
536
537     echo
538     '<div class="fieldset"><h4>'.__('Blog presentation').'</h4>'.
539     '<div class="two-cols">'.
540     '<div class="col">'.
541     '<p><label for="date_format">'.__('Date format:').'</label> '.
542     form::field('date_format',30,255,html::escapeHTML($blog_settings->system->date_format)).
543     form::combo('date_format_select',$date_formats_combo,'','','',false,'title="'.__('Pattern of date').'"').
544     '</p>'.
545     '<p class="chosen form-note">'.__('Sample:').' '.dt::str(html::escapeHTML($blog_settings->system->date_format)).'</p>'.
546
547     '<p><label for="time_format">'.__('Time format:').'</label>'.
548     form::field('time_format',30,255,html::escapeHTML($blog_settings->system->time_format)).
549     form::combo('time_format_select',$time_formats_combo,'','','',false,'title="'.__('Pattern of time').'"').
550     '</p>'.
551     '<p class="chosen form-note">'.__('Sample:').' '.dt::str(html::escapeHTML($blog_settings->system->time_format)).'</p>'.
552
553     '<p><label for="use_smilies" class="classic">'.
554     form::checkbox('use_smilies','1',$blog_settings->system->use_smilies).
555     __('Display smilies on entries and comments').'</label></p>'.
556
557     '<p><label for="no_search" class="classic">'.
558     form::checkbox('no_search','1',$blog_settings->system->no_search).
559     __('Disable internal search system').'</label></p>'.
560     '</div>'.
561
562     '<div class="col">'.
563     '<p><label for="nb_post_for_home" class="classic">'.sprintf(__('Display %s entries on home page'),
564     form::field('nb_post_for_home',2,3,$blog_settings->system->nb_post_for_home)).
565     '</label></p>'.
566
567     '<p><label for="nb_post_per_page" class="classic">'.sprintf(__('Display %s entries per page'),
568     form::field('nb_post_per_page',2,3,$blog_settings->system->nb_post_per_page)).
569     '</label></p>'.
570
571     '<p><label for="nb_post_per_feed" class="classic">'.sprintf(__('Display %s entries per feed'),
572     form::field('nb_post_per_feed',2,3,$blog_settings->system->nb_post_per_feed)).
573     '</label></p>'.
574
575     '<p><label for="nb_comment_per_feed" class="classic">'.sprintf(__('Display %s comments per feed'),
576     form::field('nb_comment_per_feed',2,3,$blog_settings->system->nb_comment_per_feed)).
577     '</label></p>'.
578
579     '<p><label for="short_feed_items" class="classic">'.
580     form::checkbox('short_feed_items','1',$blog_settings->system->short_feed_items).
581     __('Truncate feeds').'</label></p>'.
582
583     '<p><label for="inc_subcats" class="classic">'.
584     form::checkbox('inc_subcats','1',$blog_settings->system->inc_subcats).
585     __('Include sub-categories in category page and category posts feed').'</label></p>'.
586     '</div>'.
587    '</div>'.
588     '<br class="clear" />'. //Opera sucks
589     '</div>';
590
591     echo
592     '<div class="fieldset"><h4 id="medias-settings">'.__('Media and images').'</h4>'.
593          '<p class="form-note warning">'.
594     __('Please note that if you change current settings bellow, they will now apply to all new images in the media manager.').
595     ' '.__('Be carefull if you share it with other blogs in your installation.').'</p>'.
596
597     '<div class="two-cols">'.
598     '<div class="col">'.
599     '<h5>'.__('Generated image sizes (in pixels)').'</h5>'.
600     '<p class="field"><label for="media_img_t_size">'.__('Thumbnail').'</label> '.
601     form::field('media_img_t_size',3,3,$blog_settings->system->media_img_t_size).'</p>'.
602
603     '<p class="field"><label for="media_img_s_size">'.__('Small').'</label> '.
604     form::field('media_img_s_size',3,3,$blog_settings->system->media_img_s_size).'</p>'.
605
606     '<p class="field"><label for="media_img_m_size">'.__('Medium').'</label> '.
607     form::field('media_img_m_size',3,3,$blog_settings->system->media_img_m_size).'</p>'.
608
609     '<h5>'.__('Default size of the inserted video (in pixels)').'</h5>'.
610     '<p class="field"><label for="media_video_width">'.__('Width').'</label> '.
611     form::field('media_video_width',3,3,$blog_settings->system->media_video_width).'</p>'.
612
613     '<p class="field"><label for="media_video_height">'.__('Height').'</label> '.
614     form::field('media_video_height',3,3,$blog_settings->system->media_video_height).'</p>'.
615
616     '<h5>'.__('Flash player').'</h5>'.
617     '<p><label for="media_flash_fallback">'.
618     form::checkbox('media_flash_fallback','1',$blog_settings->system->media_flash_fallback).
619     __('Insert Flash player fallback for video (mp4 or m4v) and audio (mp3) media').'</label></p>'.
620     '<p class="form-note info">'.__('For flv video, the Flash player will be anyway inserted.').'</p>'.
621     '</div>'.
622
623     '<div class="col">'.
624     '<h5>'.__('Default image insertion attributes').'</h5>'.
625     '<p class="vertical-separator"><label for="media_img_title_pattern">'.__('Inserted image title').'</label>'.
626     form::combo('media_img_title_pattern',$img_title_combo,html::escapeHTML($blog_settings->system->media_img_title_pattern)).'</p>'.
627     '<p><label for="media_img_use_dto_first" class="classic">'.
628     form::checkbox('media_img_use_dto_first','1',$blog_settings->system->media_img_use_dto_first).
629     __('Use original media date if possible').'</label></p>'.
630     '<p><label for="media_img_no_date_alone" class="classic">'.
631     form::checkbox('media_img_no_date_alone','1',$blog_settings->system->media_img_no_date_alone).
632     __('Do not display date if alone in title').'</label></p>'.
633     '<p class="form-note info">'.__('It is retrieved from the picture\'s metadata.').'</p>'.
634
635     '<p class="field vertical-separator"><label for="media_img_default_size">'.__('Size of inserted image:').'</label>'.
636     form::combo('media_img_default_size',$img_default_size_combo,
637          (html::escapeHTML($blog_settings->system->media_img_default_size) != '' ? html::escapeHTML($blog_settings->system->media_img_default_size) : 'm')).
638     '</p>'.
639     '<p class="field"><label for="media_img_default_alignment">'.__('Image alignment:').'</label>'.
640     form::combo('media_img_default_alignment',$img_default_alignment_combo,html::escapeHTML($blog_settings->system->media_img_default_alignment)).
641     '</p>'.
642     '<p><label for="media_img_default_link">'.
643     form::checkbox('media_img_default_link','1',$blog_settings->system->media_img_default_link).
644     __('Insert a link to the original image').'</label></p>'.
645     '</div>'.
646     '</div>'.
647     '<br class="clear" />'. //Opera sucks
648
649     '</div>';
650
651     echo
652     '<div class="fieldset"><h4>'.__('Search engines robots policy').'</h4>';
653
654     $i = 0;
655     foreach ($robots_policy_options as $k => $v)
656     {
657          echo '<p><label for="robots_policy-'.$i.'" class="classic">'.
658          form::radio(array('robots_policy','robots_policy-'.$i),$k,$blog_settings->system->robots_policy == $k).' '.$v.'</label></p>';
659          $i++;
660     }
661
662     echo '</div>';
663
664     echo
665     '<div class="fieldset"><h4>'.__('jQuery javascript library').'</h4>'.
666     '<p><label for="jquery_version" class="classic">'.__('jQuery version to be loaded for this blog:').'</label>'.' '.
667     form::combo('jquery_version',$jquery_versions_combo,$blog_settings->system->jquery_version).
668     '</p>'.
669     '<br class="clear" />'. //Opera sucks
670     '</div>';
671
672     echo
673     '<div class="fieldset"><h4>'.__('Blog security').'</h4>'.
674     '<p><label for="prevents_clickjacking" class="classic">'.
675     form::checkbox('prevents_clickjacking','1',$blog_settings->system->prevents_clickjacking).
676     __('Protect the blog from Clickjacking (see <a href="https://en.wikipedia.org/wiki/Clickjacking">Wikipedia</a>)').'</label></p>'.
677     '<br class="clear" />'. //Opera sucks
678     '</div>';
679
680     # --BEHAVIOR-- adminBlogPreferencesForm
681     $core->callBehavior('adminBlogPreferencesForm',$core,$blog_settings);
682
683     echo
684     '<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
685     (!$standalone ? form::hidden('id',$blog_id) : '').
686     '</p>'.
687     '</form>';
688
689     if ($core->auth->isSuperAdmin() && $blog_id != $core->blog->id)
690     {
691          echo
692          '<form action="'.$core->adminurl->get("admin.blog.del").'" method="post">'.
693          '<p><input type="submit" class="delete" value="'.__('Delete this blog').'" />'.
694          form::hidden(array('blog_id'),$blog_id).
695          $core->formNonce().'</p>'.
696          '</form>';
697     } else {
698          if ($blog_id == $core->blog->id) {
699               echo '<p class="message">'.__('The current blog cannot be deleted.').'</p>';
700          } else {
701               echo '<p class="message">'.__('Only superadmin can delete a blog.').'</p>';
702          }
703     }
704
705     echo '</div>';
706
707     #
708     # Users on the blog (with permissions)
709
710     $blog_users = $core->getBlogPermissions($blog_id,$core->auth->isSuperAdmin());
711     $perm_types = $core->auth->getPermissionsTypes();
712
713     echo
714     '<div class="multi-part" id="users" title="'.__('Users').'">'.
715     '<h3 class="out-of-screen-if-js">'.__('Users on this blog').'</h3>';
716
717     if (empty($blog_users))
718     {
719          echo '<p>'.__('No users').'</p>';
720     }
721     else
722     {
723          if ($core->auth->isSuperAdmin()) {
724               $user_url_p = '<a href="'.$core->adminurl->get("admin.user",array('id' => '%1$s'),'&amp;',true).'">%1$s</a>';
725          } else {
726               $user_url_p = '%1$s';
727          }
728
729          # Sort users list on user_id key
730          dcUtils::lexicalKeySort($blog_users);
731
732          $post_type = $core->getPostTypes();
733          $current_blog_id = $core->blog->id;
734          if ($blog_id != $core->blog->id) {
735               $core->setBlog($blog_id);
736          }
737
738          foreach ($blog_users as $k => $v)
739          {
740               if (count($v['p']) > 0)
741               {
742                    echo
743                    '<div class="user-perm">'.
744                    '<h4>'.sprintf($user_url_p,html::escapeHTML($k)).
745                    ' ('.html::escapeHTML(dcUtils::getUserCN(
746                         $k, $v['name'], $v['firstname'], $v['displayname']
747                    )).')</h4>';
748
749                    if ($core->auth->isSuperAdmin()) {
750                         echo
751                         '<p>'.__('Email:').' '.
752                         ($v['email'] != '' ? '<a href="mailto:'.$v['email'].'">'.$v['email'].'</a>' : __('(none)')).
753                         '</p>';
754                    }
755
756                    echo
757                    '<h5>'.__('Publications on this blog:').'</h5>'.
758                    '<ul>';
759                    foreach ($post_type as $type => $pt_info) {
760                         $params = array(
761                              'post_type' => $type,
762                              'user_id' => $k
763                              );
764                         echo '<li>'.sprintf(__('%1$s: %2$s'),__($pt_info['label']),$core->blog->getPosts($params,true)->f(0)).'</li>';
765                    }
766                    echo
767                    '</ul>';
768
769                    echo
770                    '<h5>'.__('Permissions:').'</h5>'.
771                    '<ul>';
772                    if ($v['super']) {
773                         echo '<li class="user_super">'.__('Super administrator').'<br />'.
774                         '<span class="form-note">'.__('All rights on all blogs.').'</span></li>';
775                    } else {
776                         foreach ($v['p'] as $p => $V) {
777                              if (isset($perm_types[$p])) {
778                                   echo '<li '.($p == 'admin' ? 'class="user_admin"' : '').'>'.__($perm_types[$p]);
779                              } else {
780                                   echo '<li>'.sprintf(__('[%s] (unreferenced permission)'),$p);
781                              }
782
783                              if($p == 'admin') {
784                                   echo '<br /><span class="form-note">'.__('All rights on this blog.').'</span>';
785                              }
786                              echo '</li>';
787                         }
788                    }
789                    echo
790                    '</ul>';
791
792                    if (!$v['super'] && $core->auth->isSuperAdmin()) {
793                         echo
794                         '<form action="'.$core->adminurl->get('admin.user.actions').'" method="post">'.
795                         '<p class="change-user-perm"><input type="submit" class="reset" value="'.__('Change permissions').'" />'.
796                         form::hidden(array('redir'),$core->adminurl->get("admin.blog.pref",array('id' => $k),'&')).
797                         form::hidden(array('action'),'perms').
798                         form::hidden(array('users[]'),$k).
799                         form::hidden(array('blogs[]'),$blog_id).
800                         $core->formNonce().
801                         '</p>'.
802                         '</form>';
803                    }
804                    echo '</div>';
805               }
806          }
807          if ($current_blog_id != $core->blog->id) {
808               $core->setBlog($current_blog_id);
809          }
810     }
811
812     echo '</div>';
813}
814
815dcPage::helpBlock('core_blog_pref');
816dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map