Dotclear

source: admin/index.php @ 3260:cf9f7abdac2e

Revision 3260:cf9f7abdac2e, 13.6 KB checked in by franck <carnet.franck.paul@…>, 9 years ago (diff)

Add /var directory, closes #236 (until further needs)

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
13if (!empty($_GET['pf'])) {
14     require dirname(__FILE__).'/../inc/load_plugin_file.php';
15     exit;
16}
17
18if (!empty($_GET['vf'])) {
19     require dirname(__FILE__).'/../inc/load_var_file.php';
20     exit;
21}
22
23require dirname(__FILE__).'/../inc/admin/prepend.php';
24
25if (!empty($_GET['default_blog'])) {
26     try {
27          $core->setUserDefaultBlog($core->auth->userID(),$core->blog->id);
28          $core->adminurl->redirect("admin.home");
29     } catch (Exception $e) {
30          $core->error->add($e->getMessage());
31     }
32}
33
34dcPage::check('usage,contentadmin');
35
36if ($core->plugins->disableDepModules($core->adminurl->get('admin.home',array()))) {
37     exit;
38}
39
40# Logout
41if (!empty($_GET['logout'])) {
42     $core->session->destroy();
43     if (isset($_COOKIE['dc_admin'])) {
44          unset($_COOKIE['dc_admin']);
45          setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL);
46     }
47     $core->adminurl->redirect("admin.auth");
48     exit;
49}
50
51# Plugin install
52$plugins_install = $core->plugins->installModules();
53
54# Check dashboard module prefs
55$ws = $core->auth->user_prefs->addWorkspace('dashboard');
56if (!$core->auth->user_prefs->dashboard->prefExists('doclinks')) {
57     if (!$core->auth->user_prefs->dashboard->prefExists('doclinks',true)) {
58          $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true);
59     }
60     $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean');
61}
62if (!$core->auth->user_prefs->dashboard->prefExists('dcnews')) {
63     if (!$core->auth->user_prefs->dashboard->prefExists('dcnews',true)) {
64          $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
65     }
66     $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean');
67}
68if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) {
69     if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) {
70          $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
71     }
72     $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean');
73}
74
75// Handle folded/unfolded sections in admin from user preferences
76$ws = $core->auth->user_prefs->addWorkspace('toggles');
77if (!$core->auth->user_prefs->toggles->prefExists('unfolded_sections')) {
78     $core->auth->user_prefs->toggles->put('unfolded_sections','','string','Folded sections in admin',null,true);
79}
80
81
82# Dashboard icons
83$__dashboard_icons = new ArrayObject();
84
85$favs = $core->favs->getUserFavorites();
86$core->favs->appendDashboardIcons($__dashboard_icons);
87
88# Check plugins and themes update from repository
89function dc_check_store_update($mod, $url, $img, $icon)
90{
91     $repo = new dcStore($mod, $url);
92     $upd = $repo->get(true);
93     if (!empty($upd)) {
94          $icon[0] .= '<br />'.sprintf(__('An update is available', '%s updates are available.', count($upd)),count($upd));
95          $icon[1] .= '#update';
96          $icon[2] = 'images/menu/'.$img.'-b-update.png';
97     }
98}
99if (isset($__dashboard_icons['plugins'])) {
100     dc_check_store_update($core->plugins, $core->blog->settings->system->store_plugin_url, 'plugins', $__dashboard_icons['plugins']);
101}
102if (isset($__dashboard_icons['blog_theme'])) {
103     $themes = new dcThemes($core);
104     $themes->loadModules($core->blog->themes_path, null);
105     dc_check_store_update($themes, $core->blog->settings->system->store_theme_url, 'blog-theme', $__dashboard_icons['blog_theme']);
106}
107
108# Latest news for dashboard
109$__dashboard_items = new ArrayObject(array(new ArrayObject(),new ArrayObject()));
110
111$dashboardItem = 0;
112
113if ($core->auth->user_prefs->dashboard->dcnews) {
114     try
115     {
116          if (empty($__resources['rss_news'])) {
117               throw new Exception();
118          }
119
120          $feed_reader = new feedReader;
121          $feed_reader->setCacheDir(DC_TPL_CACHE);
122          $feed_reader->setTimeout(2);
123          $feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/');
124          $feed = $feed_reader->parse($__resources['rss_news']);
125          if ($feed)
126          {
127               $latest_news = '<div class="box medium dc-box"><h3>'.__('Dotclear news').'</h3><dl id="news">';
128               $i = 1;
129               foreach ($feed->items as $item)
130               {
131                    $dt = isset($item->link) ? '<a href="'.$item->link.'" class="outgoing" title="'.$item->title.'">'.
132                         $item->title.' <img src="images/outgoing-blue.png" alt="" /></a>' : $item->title;
133
134                    if ($i < 3) {
135                         $latest_news .=
136                         '<dt>'.$dt.'</dt>'.
137                         '<dd><p><strong>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</strong> '.
138                         '<em>'.text::cutString(html::clean($item->content),120).'...</em></p></dd>';
139                    } else {
140                         $latest_news .=
141                         '<dt>'.$dt.'</dt>'.
142                         '<dd>'.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'</dd>';
143                    }
144                    $i++;
145                    if ($i > 2) { break; }
146               }
147               $latest_news .= '</dl></div>';
148               $__dashboard_items[$dashboardItem][] = $latest_news;
149               $dashboardItem++;
150          }
151     }
152     catch (Exception $e) {}
153}
154
155# Documentation links
156if ($core->auth->user_prefs->dashboard->doclinks) {
157     if (!empty($__resources['doc']))
158     {
159          $doc_links = '<div class="box small dc-box"><h3>'.__('Documentation and support').'</h3><ul>';
160
161          foreach ($__resources['doc'] as $k => $v) {
162               $doc_links .= '<li><a class="outgoing" href="'.$v.'" title="'.$k.'">'.$k.
163               ' <img src="images/outgoing-blue.png" alt="" /></a></li>';
164          }
165
166          $doc_links .= '</ul></div>';
167          $__dashboard_items[$dashboardItem][] = $doc_links;
168          $dashboardItem++;
169     }
170}
171
172$core->callBehavior('adminDashboardItems', $core, $__dashboard_items);
173
174# Dashboard content
175$dashboardContents = '';
176$__dashboard_contents = new ArrayObject(array(new ArrayObject,new ArrayObject));
177$core->callBehavior('adminDashboardContents', $core, $__dashboard_contents);
178
179# Editor stuff
180$admin_post_behavior = '';
181if ($core->auth->user_prefs->dashboard->quickentry) {
182     if ($core->auth->check('usage,contentadmin',$core->blog->id))
183     {
184          $post_format = $core->auth->getOption('post_format');
185          $post_editor = $core->auth->getOption('editor');
186          if ($post_editor && !empty($post_editor[$post_format])) {
187               // context is not post because of tags not available
188               $admin_post_behavior = $core->callBehavior('adminPostEditor', $post_editor[$post_format], 'quickentry', array('#post_content'),$post_format);
189          }
190     }
191}
192
193/* DISPLAY
194-------------------------------------------------------- */
195dcPage::open(__('Dashboard'),
196     dcPage::jsLoad('js/_index.js').
197     $admin_post_behavior.
198     # --BEHAVIOR-- adminDashboardHeaders
199     $core->callBehavior('adminDashboardHeaders'),
200     dcPage::breadcrumb(
201          array(
202          __('Dashboard').' : '.html::escapeHTML($core->blog->name) => ''
203          ),
204          array('home_link' =>false)
205     )
206);
207
208# Dotclear updates notifications
209if ($core->auth->isSuperAdmin() && !DC_NOT_UPDATE && is_readable(DC_DIGESTS))
210{
211     $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
212     $new_v = $updater->check(DC_VERSION);
213     $version_info = $new_v ? $updater->getInfoURL() : '';
214
215     if ($updater->getNotify() && $new_v) {
216          echo
217          '<div class="dc-update"><h3>'.sprintf(__('Dotclear %s is available!'),$new_v).'</h3> '.
218          '<p><a class="button submit" href="'.$core->adminurl->get("admin.update").'">'.sprintf(__('Upgrade now'),$new_v).'</a> '.
219          '<a class="button" href="'.$core->adminurl->get("admin.update", array('hide_msg' => 1)).'">'.__('Remind me later').'</a>'.
220          ($version_info ? ' </p>'.
221          '<p class="updt-info"><a href="'.$version_info.'">'.__('Information about this version').'</a>' : '').'</p>'.
222          '</div>';
223     }
224}
225
226if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->getBlogCount() > 1) {
227     echo
228     '<p><a href="'.$core->adminurl->get("admin.home",array('default_blog' => 1)).'" class="button">'.__('Make this blog my default blog').'</a></p>';
229}
230
231if ($core->blog->status == 0) {
232     echo '<p class="static-msg">'.__('This blog is offline').'.</p>';
233} elseif ($core->blog->status == -1) {
234     echo '<p class="static-msg">'.__('This blog is removed').'.</p>';
235}
236
237if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
238     echo
239     '<p class="static-msg">'.
240     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL').
241     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
242     '</p>';
243}
244
245if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
246     echo
247     '<p class="static-msg">'.
248     sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM').
249     ' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
250     '</p>';
251}
252
253$err = array();
254
255# Check cache directory
256if ( $core->auth->isSuperAdmin() ) {
257     if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) {
258          $err[] = '<p>'.__("The cache directory does not exist or is not writable. You must create this directory with sufficient rights and affect this location to \"DC_TPL_CACHE\" in inc/config.php file.").'</p>';
259     }
260} else {
261     if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) {
262          $err[] = '<p>'.__("The cache directory does not exist or is not writable. You should contact your administrator.").'</p>';
263     }
264}
265
266# Check public directory
267if ( $core->auth->isSuperAdmin() ) {
268     if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) {
269          $err[] = '<p>'.__("There is no writable directory /public/ at the location set in about:config \"public_path\". You must create this directory with sufficient rights (or change this setting).").'</p>';
270     }
271} else {
272     if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) {
273          $err[] = '<p>'.__("There is no writable root directory for the media manager. You should contact your administrator.").'</p>';
274     }
275}
276
277# Error list
278if (count($err) > 0) {
279     echo '<div class="error"><p><strong>'.__('Error:').'</strong></p>'.
280     '<ul><li>'.implode("</li><li>",$err).'</li></ul></div>';
281}
282
283# Plugins install messages
284if (!empty($plugins_install['success']))
285{
286     echo '<div class="success">'.__('Following plugins have been installed:').'<ul>';
287     foreach ($plugins_install['success'] as $k => $v) {
288          echo '<li>'.$k.'</li>';
289     }
290     echo '</ul></div>';
291}
292if (!empty($plugins_install['failure']))
293{
294     echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
295     foreach ($plugins_install['failure'] as $k => $v) {
296          echo '<li>'.$k.' ('.$v.')</li>';
297     }
298     echo '</ul></div>';
299}
300# Errors modules notifications
301if ($core->auth->isSuperAdmin())
302{
303     $list = $core->plugins->getErrors();
304     if (!empty($list)) {
305          echo
306          '<div class="error" id="module-errors" class="error"><p>'.__('Errors have occured with following plugins:').'</p> '.
307          '<ul><li>'.implode("</li>\n<li>", $list).'</li></ul></div>';
308     }
309}
310
311# Dashboard columns (processed first, as we need to know the result before displaying the icons.)
312$dashboardItems = '';
313
314foreach ($__dashboard_items as $i)
315{
316     if ($i->count() > 0)
317     {
318          $dashboardItems .= '';
319          foreach ($i as $v) {
320               $dashboardItems .= $v;
321          }
322          $dashboardItems .= '';
323     }
324}
325
326# Dashboard elements
327echo '<div id="dashboard-main">';
328
329if (!$core->auth->user_prefs->dashboard->nofavicons) {
330     # Dashboard icons
331     echo '<div id="icons">';
332     foreach ($__dashboard_icons as $i)
333     {
334          echo
335          '<p><a href="'.$i[1].'"><img src="'.dc_admin_icon_url($i[2]).'" alt="" />'.
336          '<br /><span>'.$i[0].'</span></a></p>';
337     }
338     echo '</div>';
339}
340
341if ($core->auth->user_prefs->dashboard->quickentry) {
342     if ($core->auth->check('usage,contentadmin',$core->blog->id))
343     {
344          # Getting categories
345          $categories_combo = dcAdminCombos::getCategoriesCombo(
346               $core->blog->getCategories(array())
347          );
348
349          echo
350          '<div id="quick">'.
351          '<h3>'.__('Quick entry').sprintf(' &rsaquo; %s',$core->auth->getOption('post_format')).'</h3>'.
352          '<form id="quick-entry" action="'.$core->adminurl->get('admin.post').'" method="post" class="fieldset">'.
353          '<h4>'.__('New entry').'</h4>'.
354          '<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
355          form::field('post_title',20,255,'','maximal').
356          '</p>'.
357          '<p class="area"><label class="required" '.
358          'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
359          form::textarea('post_content',50,10).
360          '</p>'.
361          '<p><label for="cat_id" class="classic">'.__('Category:').'</label> '.
362          form::combo('cat_id',$categories_combo).'</p>'.
363          ($core->auth->check('categories', $core->blog->id)
364               ? '<div>'.
365               '<p id="new_cat" class="q-cat">'.__('Add a new category').'</p>'.
366               '<p class="q-cat"><label for="new_cat_title">'.__('Title:').'</label> '.
367               form::field('new_cat_title',30,255,'','').'</p>'.
368               '<p class="q-cat"><label for="new_cat_parent">'.__('Parent:').'</label> '.
369               form::combo('new_cat_parent',$categories_combo,'','').
370               '</p>'.
371               '<p class="form-note info clear">'.__('This category will be created when you will save your post.').'</p>'.
372               '</div>'
373               : '').
374          '<p><input type="submit" value="'.__('Save').'" name="save" /> '.
375          ($core->auth->check('publish',$core->blog->id)
376               ? '<input type="hidden" value="'.__('Save and publish').'" name="save-publish" />'
377               : '').
378          $core->formNonce().
379          form::hidden('post_status',-2).
380          form::hidden('post_format',$core->auth->getOption('post_format')).
381          form::hidden('post_excerpt','').
382          form::hidden('post_lang',$core->auth->getInfo('user_lang')).
383          form::hidden('post_notes','').
384          '</p>'.
385          '</form>'.
386          '</div>';
387     }
388}
389
390foreach ($__dashboard_contents as $i)
391{
392     if ($i->count() > 0)
393     {
394          $dashboardContents .= '';
395          foreach ($i as $v) {
396               $dashboardContents .= $v;
397          }
398          $dashboardContents .= '';
399     }
400}
401
402if ($dashboardContents != '' || $dashboardItems != '') {
403     echo
404     '<div id="dashboard-boxes">'.
405     '<div class="db-items">'.$dashboardItems.$dashboardContents.'</div>'.
406     '</div>';
407}
408
409echo '</div>'; #end dashboard-main
410dcPage::helpBlock('core_dashboard');
411dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map