Dotclear

source: admin/index.php @ 2614:db6f6a1f4f25

Revision 2614:db6f6a1f4f25, 12.6 KB checked in by Nicolas <nikrou77@…>, 12 years ago (diff)

Move legacy editor to a plugin. First step for alternate editors.
Addresses #1896

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

Sites map