Dotclear

source: plugins/simpleMenu/index.php @ 532:f4e2399ace03

Revision 532:f4e2399ace03, 9.0 KB checked in by Franck <carnet.franck.paul@…>, 14 years ago (diff)

Premier squelette d'un plugin simpleMenu basique (1 seul niveau). La mécanique de sélection guidée d'un item de menu (home, langue, catégorie, page, tag(s), archives, libre) est en place.

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_CONTEXT_ADMIN')) { return; }
13
14dcPage::check('admin');
15
16$page_title = __('Simple menu');
17
18# Url de base
19$p_url = 'plugin.php?p=simpleMenu';
20
21# Récupération paramètres postés
22$item_type = isset($_POST['item_type']) ? $_POST['item_type'] : '';
23$item_select = isset($_POST['item_select']) ? $_POST['item_select'] : '';
24
25# Liste des catégories
26$categories_combo = array();
27$categories_label = array();
28try {
29     $rs = $core->blog->getCategories(array('post_type'=>'post'));
30     while ($rs->fetch()) {
31          $categories_combo[] = new formSelectOption(
32               str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title),
33               $rs->cat_url
34          );
35          $categories_label[$rs->cat_url] = html::escapeHTML($rs->cat_title);
36     }
37} catch (Exception $e) { }
38
39# Liste des langues utilisées
40$langs_combo = array();
41try {
42     $rs = $core->blog->getLangs(array('order'=>'asc'));
43     if ($rs->count() > 1)
44     {
45          $all_langs = l10n::getISOcodes(0,1);
46          while ($rs->fetch()) {
47               $lang_name = isset($all_langs[$rs->post_lang]) ? $all_langs[$rs->post_lang] : $rs->post_lang;
48               $langs_combo[$lang_name] = $rs->post_lang;
49          }
50          unset($all_langs);
51     }
52     unset($rs);
53} catch (Exception $e) { }
54
55# Liste des mois d'archive
56$months_combo = array();
57try {
58     $rs = $core->blog->getDates(array('type'=>'month'));
59     $months_combo[__('All months')] = '-';
60     $first_year = $last_year = 0;
61     while ($rs->fetch()) {
62          $months_combo[dt::str('%B %Y',$rs->ts())] = $rs->year().$rs->month();
63          if (($first_year == 0) || ($rs->year() < $first_year)) $first_year = $rs->year();
64          if (($last_year == 0) || ($rs->year() > $last_year)) $last_year = $rs->year();
65     }
66     unset($rs);
67} catch (Exception $e) { }
68
69# Liste des pages -- Doit être pris en charge plus tard par le plugin ?
70$pages_combo = array();
71try {
72     $rs = $core->blog->getPosts(array('post_type'=>'page'));
73     while ($rs->fetch()) {
74          $pages_combo[$rs->post_title] = $rs->getURL();
75     }
76     unset($rs);
77} catch (Exception $e) { }
78
79# Liste des tags -- Doit être pris en charge plus tard par le plugin ?
80$tags_combo = array();
81try {
82     $rs = $core->meta->getMetadata(array('meta_type' => 'tag'));
83     $tags_combo[__('All tags')] = '-';
84     while ($rs->fetch()) {
85          $tags_combo[$rs->meta_id] = $rs->meta_id;
86     }
87     unset($rs);
88} catch (Exception $e) { }
89
90# Liste des types d'item de menu
91$items = array('home' => array(__('Page d‘accueil'),0));
92
93if (count($langs_combo) > 1) {
94     $items['lang'] = array(__('Langue'),1);
95}
96if (count($categories_combo)) {
97     $items['category'] = array(__('Category'),1);
98}
99if (count($months_combo) > 1) {
100     $items['archive'] = array(__('Archive'),1);
101}
102if ($core->plugins->moduleExists('pages')) {
103     if(count($pages_combo))
104          $items['pages'] = array(__('Page'),1);
105}
106if ($core->plugins->moduleExists('tags')) {
107     if (count($tags_combo) > 1)
108          $items['tags'] = array(__('Tags'),1);
109}
110$items['special'] = array(__('User defined'),0);
111
112$items_combo = array();
113foreach ($items as $k => $v) {
114     $items_combo[$v[0]] = $k;
115}
116
117# Traitement
118$step = (!empty($_GET['add']) ? (integer) $_GET['add'] : 0);
119if (($step > 4) || ($step < 0)) $step = 0;
120if ($step) {
121
122     # Récupération libellés des choix
123     $item_type_label = isset($items[$item_type]) ? $items[$item_type][0] : '';
124
125     switch ($step) {
126          case 1:
127               $item_type = $item_select = '';
128               break;
129          case 2:
130               if ($items[$item_type][1] > 0) {
131                    $item_select = '';
132                    break;
133               }
134          case 3:
135               $item_select_label = '';
136               $item_label = __('Title');
137               $item_descr = __('Description');
138               $item_url = html::stripHostURL($core->blog->url);
139               switch ($item_type) {
140                    case 'home':
141                         $item_label = __('Home');
142                         $item_descr = __('Recent posts');
143                         break;
144                    case 'lang':
145                         $item_select_label = array_search($item_select,$langs_combo);
146                         $item_label = $item_select_label;
147                         $item_descr = sprintf(__('Switch to %s language'),$item_select_label);
148                         $item_url .= $core->url->getBase('lang').$item_select;
149                         break;
150                    case 'category':
151                         $item_select_label = $categories_label[$item_select];
152                         $item_label = $item_select_label;
153                         $item_descr = __('Recent Posts from this category');
154                         $item_url .= $core->url->getBase('category').'/'.$item_select;
155                         break;
156                    case 'archive':
157                         $item_select_label = array_search($item_select,$months_combo);
158                         if ($item_select == '-') {
159                              $item_label = __('Archives');
160                              $item_descr = $first_year.($first_year != $last_year ? ' - '.$last_year : '');
161                              $item_url .= $core->url->getBase('archive');
162                         } else {
163                              $item_label = $item_select_label;
164                              $item_descr = sprintf(__('Posts from %s'),$item_select_label);
165                              $item_url .= $core->url->getBase('archive').'/'.substr($item_select,0,4).'/'.substr($item_select,-2);
166                         }
167                         break;
168                    case 'pages':
169                         $item_select_label = array_search($item_select,$pages_combo);
170                         $item_label = $item_select_label;
171                         $item_descr = '';
172                         $item_url = html::stripHostURL($item_select);
173                         break;
174                    case 'tags':
175                         $item_select_label = array_search($item_select,$tags_combo);
176                         if ($item_select == '-') {
177                              $item_label = __('All tags');
178                              $item_descr = '';
179                              $item_url .= $core->url->getBase('tags');
180                         } else {
181                              $item_label = $item_select_label;
182                              $item_descr = sprintf(__('Recent posts for %s tag'),$item_select_label);
183                              $item_url .= $core->url->getBase('tag').'/'.$item_select;
184                         }
185                         break;
186                    case 'special':
187                         break;
188               }
189               break;
190     }
191}
192
193# Display
194?>
195
196<html>
197<head>
198  <title><?php echo $page_title; ?></title>
199</head>
200
201<body>
202
203<?php
204
205if ($step) 
206{
207     // Formulaire d'ajout d'un item
208     echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <a href="'.$p_url.'">'.$page_title.'</a> &rsaquo; <span class="page-title">'.__('Add item').'</span></h2>';
209     
210     switch ($step) {
211          case 1:
212               // Selection du type d'item
213               echo '<form id="additem" action="'.$p_url.'&add=2" method="post">';
214               echo '<fieldset><legend>'.__('Select type').'</legend>';
215               echo '<p><label for"item_type" class="classic">'.__('Type of item menu:').'</label>'.form::combo('item_type',$items_combo,'').'</p>';
216               echo '<p>'.$core->formNonce().'<input type="submit" name="append" value="'.__('Continue').'" />'.'</p>';
217               echo '</fieldset>';
218               echo '</form>';
219               break;
220          case 2:
221               if ($items[$item_type][1] > 0) {
222                    // Choix à faire
223                    echo '<form id="additem" action="'.$p_url.'&add=3" method="post">';
224                    echo '<fieldset><legend>'.$item_type_label.'</legend>';
225                    switch ($item_type) {
226                         case 'lang':
227                              echo '<p><label for"item_select" class="classic">'.__('Select language:').'</label>'.
228                                   form::combo('item_select',$langs_combo,'');
229                              break;
230                         case 'category':
231                              echo '<p><label for"item_select" class="classic">'.__('Select category:').'</label>'.
232                                   form::combo('item_select',$categories_combo,'');
233                              break;
234                         case 'archive':
235                              echo '<p><label for"item_select" class="classic">'.__('Select month:').'</label>'.
236                                   form::combo('item_select',$months_combo,'');
237                              break;
238                         case 'pages':
239                              echo '<p><label for"item_select" class="classic">'.__('Select page:').'</label>'.
240                                   form::combo('item_select',$pages_combo,'');
241                              break;
242                         case 'tags':
243                              echo '<p><label for"item_select" class="classic">'.__('Select tag:').'</label>'.
244                                   form::combo('item_select',$tags_combo,'');
245                              break;
246                    }
247                    echo form::hidden('item_type',$item_type);
248                    echo '<p>'.$core->formNonce().'<input type="submit" name="append" value="'.__('Continue').'" /></p>';
249                    echo '</fieldset>';
250                    echo '</form>';
251                    break;
252               }
253          case 3:
254               // Libellé et description
255               echo '<form id="additem" action="'.$p_url.'&add=4" method="post">';
256               echo '<fieldset><legend>'.$item_type_label.($item_select_label != '' ? ' ('.$item_select_label.')' : '').'</legend>';
257               echo '<p><label for"item_label" class="classic">'.__('Label of item menu:').'</label>'.form::field('item_label',10,255,$item_label).'</p>';
258               echo '<p><label for"item_descr" class="classic">'.__('Description of item menu:').'</label>'.form::field('item_label',20,255,$item_descr).'</p>';
259               echo '<p><label for"item_url" class="classic">'.__('URL of item menu:').'</label>'.form::field('item_url',40,255,$item_url).'</p>';
260               echo form::hidden('item_type',$item_type).form::hidden('item_select',$item_select);
261               echo '<p>'.$core->formNonce().'<input type="submit" name="append" value="'.__('Add item').'" /></p>';
262               echo '</fieldset>';
263               echo '</form>';
264               break;
265     }
266} else {
267     // Liste des items
268     echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.$page_title.'</span></h2>';
269
270     echo '<form id="menuitems" action="'.$p_url.'&add=1" method="post">';
271     echo '<p>'.$core->formNonce().'<input type="submit" name="append" value="'.__('Add an item').'" /></p>';
272     echo '</form>';
273}
274
275?>
276
277</body>
278</html>
Note: See TracBrowser for help on using the repository browser.

Sites map