Dotclear

source: plugins/eventdata/_admin.php @ 960

Revision 960, 12.0 KB checked in by JcDenis, 14 years ago (diff)

First commit

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of eventdata, a plugin for Dotclear 2.
4#
5# Copyright (c) 2009 JC Denis and contributors
6# jcdenis@gdwd.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13if (!defined('DC_CONTEXT_ADMIN')) return;
14
15# Verify Settings
16if ($core->blog->settings->event_option_active === null) {
17     try {
18          eventdataInstall::setSettings($core);
19     }
20     catch (Exception $e) {
21          $core->error->add($e->getMessage());
22     }
23}
24
25# Admin menu
26$_menu[($core->blog->settings->event_option_menu ? 'Blog' : 'Plugins')]->addItem(
27     __('Events'),
28     'plugin.php?p=eventdata',DC_ADMIN_URL.'?pf=eventdata/img/icon.png',
29     preg_match('/plugin.php\?p=eventdata(&.*)?$/',$_SERVER['REQUEST_URI']),
30     $core->auth->check('usage,contentadmin',$core->blog->id));
31
32# Add auth perm
33$core->auth->setPermissionType('eventdata',__('manage events'));
34
35# Load _widgets.php
36require dirname(__FILE__).'/_widgets.php';
37
38# Admin behaviors
39$core->addBehavior('adminPostHeaders',array('eventdataAdminBehaviors','adminPostHeaders'));
40$core->addBehavior('adminPostFormSidebar',array('eventdataAdminBehaviors','adminPostFormSidebar'));
41$core->addBehavior('adminAfterPostUpdate',array('eventdataAdminBehaviors','adminAfterPostSave'));
42$core->addBehavior('adminAfterPostCreate',array('eventdataAdminBehaviors','adminAfterPostSave'));
43$core->addBehavior('adminBeforePostDelete',array('eventdataAdminBehaviors','adminBeforePostDelete'));
44$core->addBehavior('adminPostsActionsCombo',array('eventdataAdminBehaviors','adminPostsActionsCombo'));
45$core->addBehavior('adminPostsActions',array('eventdataAdminBehaviors','adminPostsActions'));
46$core->addBehavior('adminPostsActionsContent',array('eventdataAdminBehaviors','adminPostsActionsContent'));
47
48# Rest functions
49$core->rest->addFunction('getEvent',array('eventRest','getEvent'));
50$core->rest->addFunction('delEvent',array('eventRest','delEvent'));
51$core->rest->addFunction('setEvent',array('eventRest','setEvent'));
52
53# Import/export
54$core->addBehavior('exportFull',array('eventdataBackup','exportFull'));
55$core->addBehavior('exportSingle',array('eventdataBackup','exportSingle'));
56$core->addBehavior('importInit',array('eventdataBackup','importInit'));
57$core->addBehavior('importSingle',array('eventdataBackup','importSingle'));
58$core->addBehavior('importFull',array('eventdataBackup','importFull'));
59
60# Uninstall
61$core->addBehavior('pluginsBeforeDelete', array('eventdataInstall', 'pluginsBeforeDelete'));
62
63class eventdataAdminBehaviors
64{
65     # JS for post.php (bad hack!)
66     public static function adminPostHeaders()
67     {
68          return 
69          '<script type="text/javascript" src="'.DC_ADMIN_URL.'?pf=eventdata/js/post.js"></script>'.
70          '<script type="text/javascript" src="'.DC_ADMIN_URL.'?pf=eventdata/js/datepickerBC.js"></script>'.
71          '<script type="text/javascript">'."\n".
72          "//<![CDATA[\n".
73          "datePickerB.prototype.months[0] = datePickerC.prototype.months[0] = '".html::escapeJS(__('January'))."'; ".
74          "datePickerB.prototype.months[1] = datePickerC.prototype.months[1] = '".html::escapeJS(__('February'))."'; ".
75          "datePickerB.prototype.months[2] = datePickerC.prototype.months[2] = '".html::escapeJS(__('March'))."'; ".
76          "datePickerB.prototype.months[3] = datePickerC.prototype.months[3] = '".html::escapeJS(__('April'))."'; ".
77          "datePickerB.prototype.months[4] = datePickerC.prototype.months[4] = '".html::escapeJS(__('May'))."'; ".
78          "datePickerB.prototype.months[5] = datePickerC.prototype.months[5] = '".html::escapeJS(__('June'))."'; ".
79          "datePickerB.prototype.months[6] = datePickerC.prototype.months[6] = '".html::escapeJS(__('July'))."'; ".
80          "datePickerB.prototype.months[7] = datePickerC.prototype.months[7] = '".html::escapeJS(__('August'))."'; ".
81          "datePickerB.prototype.months[8] = datePickerC.prototype.months[8] = '".html::escapeJS(__('September'))."'; ".
82          "datePickerB.prototype.months[9] = datePickerC.prototype.months[9] = '".html::escapeJS(__('October'))."'; ".
83          "datePickerB.prototype.months[10] = datePickerC.prototype.months[10] = '".html::escapeJS(__('November'))."'; ".
84          "datePickerB.prototype.months[11] = datePickerC.prototype.months[11] = '".html::escapeJS(__('December'))."'; ".
85          "datePickerB.prototype.days[0] = datePickerC.prototype.days[0] = '".html::escapeJS(__('Monday'))."'; ".
86          "datePickerB.prototype.days[1] = datePickerC.prototype.days[1] = '".html::escapeJS(__('Tuesday'))."'; ".
87          "datePickerB.prototype.days[2] = datePickerC.prototype.days[2] = '".html::escapeJS(__('Wednesday'))."'; ".
88          "datePickerB.prototype.days[3] = datePickerC.prototype.days[3] = '".html::escapeJS(__('Thursday'))."'; ".
89          "datePickerB.prototype.days[4] = datePickerC.prototype.days[4] = '".html::escapeJS(__('Friday'))."'; ".
90          "datePickerB.prototype.days[5] = datePickerC.prototype.days[5] = '".html::escapeJS(__('Saturday'))."'; ".
91          "datePickerB.prototype.days[6] = datePickerC.prototype.days[6] = '".html::escapeJS(__('Sunday'))."'; ".
92          "datePickerB.prototype.img_src = datePickerC.prototype.img_src = 'images/date-picker.png'; ".
93          "datePickerB.prototype.close_msg = datePickerC.prototype.close_msg = '".html::escapeJS(__('close'))."'; ".
94          "datePickerB.prototype.now_msg = datePickerC.prototype.now_msg = '".html::escapeJS(__('now'))."'; ".
95          "\n//]]>\n".
96          "</script>\n".
97          '<link rel="stylesheet" type="text/css" href="'.DC_ADMIN_URL.'?pf=eventdata/style.css" />';
98     }
99     # Sidebar for post.php
100     public static function adminPostFormSidebar(&$post)
101     {
102          $post_id = $post ? (integer) $post->post_id : -1;
103          # Know events
104          $event = new dcEvent($GLOBALS['core']);
105          $events = $event->getEvent('event',null,null,null,$post_id);
106          $i = 0;
107          if ($events->count()) {
108               echo
109               '<h3>'.__('Linked events:').'</h3>'.
110               '<div class="p">';
111               while ($events->fetch()) {
112                    echo 
113                    '<div class="events-list">'.
114                    '  <div class="action">'.
115                           form::checkbox('events[]',$events->event_start.','.$events->event_end,'','','',false,' title="'.__('Check to delete').'"').
116                    '  </div>'.
117                    '  <span class="green">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$events->event_start).'</span><br />'.
118                    '  <span class="red">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$events->event_end).'</span>'.
119                    '</div>';
120                    $i++;
121               }
122               echo '</div>';
123          }
124
125          # New event
126          $start = empty($_POST['event_start']) ? '' : $_POST['event_start'];
127          $end = empty($_POST['event_end']) ? '' : $_POST['event_end'];
128          echo 
129          '<h3>'.__('Add event').'</h3>'.
130          '<div class="p">'.
131          '<p><label>'.__('Event start:').
132          form::field('event_start',16,16,$start,'event-date-start',9).
133          '</label></p>'.
134          '<p><label>'.__('Event end:').
135          form::field('event_end',16,16,$end,'event-date-end',10).
136          '</label></p>'.
137          '</div>';
138     }
139     # Save or update for post.php
140     public static function adminAfterPostSave(&$cur,&$post_id)
141     {
142          $event = new dcEvent($GLOBALS['core']);
143
144          # Add event
145          if (isset($_POST['event_start']) && isset($_POST['event_end'])
146               && !empty($_POST['event_start']) && !empty($_POST['event_end'])) {
147               $post_id = (integer) $post_id;
148
149               if (FALSE === strtotime($_POST['event_start']))
150                    throw new Exception('Wrong date format');
151
152               if (FALSE === strtotime($_POST['event_end']))
153                    throw new Exception('Wrong date format');
154
155               if (strtotime($_POST['event_start']) > strtotime($_POST['event_end']))
156                    throw new Exception('Start date of event must be smaller than end date of event');
157
158               $start = date('Y-m-d H:i:00',strtotime($_POST['event_start']));
159               $end = date('Y-m-d H:i:00',strtotime($_POST['event_end']));
160
161               $event->setEvent('event',$post_id,$start,$end);
162          }
163
164          # Delete events
165          if (isset($_POST['events']) && is_array($_POST['events'])) {
166               foreach($_POST['events'] AS $v) {
167                    $v = explode(',',$v);
168                    if (isset($v[0]) && isset($v[1]))
169                         $event->delEvent('event',$post_id,$v[0],$v[1]);
170
171               }
172          }
173     }
174     # Delete for post.php
175     public static function adminBeforePostDelete(&$post_id)
176     {
177          $post_id = (integer) $post_id;
178          $event = new dcEvent($GLOBALS['core']);
179          $event->delEvent('event',$post_id);
180     }
181     # Combo action for posts.php or plugin index.php
182     public static function adminPostsActionsCombo(&$args)
183     {
184          $E = new eventdata($GLOBALS['core']);
185          if ($E->S->event_option_active && $E->checkPerm('pst')) {
186               $args[0][__('add event')] = 'event_add';
187               $args[0][__('remove events')] = 'event_remove';
188          }
189     }
190     # Save for posts_action.php
191     public static function adminPostsActions(&$core,$posts,$action,$redir)
192     {
193          $event = new dcEvent($core);
194
195          if ($action == 'event_add' && isset($_POST['event_start']) && isset($_POST['event_end'])
196               && !empty($_POST['event_start']) && !empty($_POST['event_end'])) {
197
198               try {
199                    if (FALSE === strtotime($_POST['event_start']))
200                         throw new Exception('Wrong date format');
201
202                    if (FALSE === strtotime($_POST['event_end']))
203                         throw new Exception('Wrong date format');
204
205                    if (strtotime($_POST['event_start']) > strtotime($_POST['event_end'])) {
206                         throw new Exception('Start date of event must be smaller than end date of event');
207                    }
208                    $start = date('Y-m-d H:i:00',strtotime($_POST['event_start']));
209                    $end = date('Y-m-d H:i:00',strtotime($_POST['event_end']));
210
211                    while ($posts->fetch()) {
212                         $event->setEvent('event',$posts->post_id,$start,$end);
213                    }
214                    http::redirect($redir);
215               }
216               catch (Exception $e) {
217                    $core->error->add($e->getMessage());
218               }
219          }
220          if ($action == 'event_remove') {
221               try {
222                    while ($posts->fetch()) {
223                         $event->delEvent('event',$posts->post_id);
224                    }
225                    http::redirect($redir);
226               }
227               catch (Exception $e) {
228                    $core->error->add($e->getMessage());
229               }
230          }
231     }
232     # Form for posts_actions.php
233     public static function adminPostsActionsContent($core,$action,$hidden_fields)
234     {
235          if ($action != 'event_add') return;
236
237          $start = empty($_POST['event_start']) ? '' : $_POST['event_start'];
238          $end = empty($_POST['event_end']) ? '' : $_POST['event_end'];
239
240          echo 
241          self::adminPostHeaders().
242          '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n".
243          '<div id="edit-event">'.
244          '<h3>'.__('Add event').'</h3>'.
245          '<div class="p">'.
246          '<form action="posts_actions.php" method="post">'.
247          '<p><label>'.__('Event start:').
248          form::field('event_start',16,16,$start,'event-date-start',9).
249          '</label></p>'.
250          '<p><label>'.__('Event end:').
251          form::field('event_end',16,16,$end,'event-date-end',10).
252          '</label></p>'.
253          '</div>'.
254          $hidden_fields.
255          $core->formNonce().
256          form::hidden(array('action'),'event_add').
257          '<input type="submit" value="'.__('save').'" /></p>'.
258          '</form>'.
259          '</div>';
260     }
261}
262# Import/export behaviors for Import/export plugin
263class eventdataBackup
264{
265     public static function exportSingle(&$core,&$exp,$blog_id)
266     {
267          $exp->export('event',
268               'SELECT event_start, event_end, event_type, E.post_id '.
269               'FROM '.$core->prefix.'event E, '.$core->prefix.'post P '.
270               'WHERE P.post_id = E.post_id '.
271               "AND P.blog_id = '".$blog_id."'"
272          );
273     }
274
275     public static function exportFull(&$core,&$exp)
276     {
277          $exp->exportTable('event');
278     }
279
280     public static function importInit(&$bk,&$core)
281     {
282          $bk->cur_event = $core->con->openCursor($core->prefix.'event');
283          $bk->event = new dcEvent($core);
284     }
285
286     public static function importSingle(&$line,&$bk,&$core)
287     {
288          if ($line->__name == 'event' && isset($bk->old_ids['post'][(integer) $line->post_id])) {
289               $line->post_id = $bk->old_ids['post'][(integer) $line->post_id];
290               $bk->event->setEvent($line->event_type,$line->post_id,$line->event_start,$line->event_end);
291          }
292     }
293
294     public static function importFull(&$line,&$bk,&$core)
295     {
296          if ($line->__name == 'event') {
297               $bk->cur_event->clean();
298               
299               $bk->cur_event->event_start   = (string) $line->event_start;
300               $bk->cur_event->event_end   = (string) $line->event_end;
301               $bk->cur_event->event_type = (string) $line->event_type;
302               $bk->cur_event->post_id   = (integer) $line->post_id;
303               
304               $bk->cur_event->insert();
305          }
306     }
307}
308?>
Note: See TracBrowser for help on using the repository browser.

Sites map