Dotclear

source: plugins/eventdata/_admin.php @ 1005

Revision 1005, 12.5 KB checked in by JcDenis, 14 years ago (diff)

eventdata: fix conflict with icsFeed plugin

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->eventdata_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->eventdata_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('getEventdata',array('eventdataRest','getEventdata'));
50$core->rest->addFunction('delEventdata',array('eventdataRest','delEventdata'));
51$core->rest->addFunction('setEventdata',array('eventdataRest','setEventdata'));
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          $eventdata = new dcEventdata($GLOBALS['core']);
105          $eventdatas = $eventdata->getEventdata('eventdata',null,null,null,$post_id);
106          $i = 0;
107          if ($eventdatas->count()) {
108               echo
109               '<h3>'.__('Linked events:').'</h3>'.
110               '<div class="p">';
111               while ($eventdatas->fetch()) {
112                    echo 
113                    '<div class="eventdatas-list">'.
114                    '  <div class="action">'.
115                           form::checkbox('eventdatas[]',$eventdatas->eventdata_start.','.$eventdatas->eventdata_end,'','','',false,' title="'.__('Check to delete').'"').
116                    '  </div>'.
117                    '  <span class="green">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$eventdatas->eventdata_start).'</span><br />'.
118                    '  <span class="red">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$eventdatas->eventdata_end).'</span>'.
119                    '</div>';
120                    $i++;
121               }
122               echo '</div>';
123          }
124
125          # New event
126          $start = empty($_POST['eventdata_start']) ? '' : $_POST['eventdata_start'];
127          $end = empty($_POST['eventdata_end']) ? '' : $_POST['eventdata_end'];
128          echo 
129          '<h3>'.__('Add event').'</h3>'.
130          '<div class="p">'.
131          '<p><label>'.__('Event start:').
132          form::field('eventdata_start',16,16,$start,'eventdata-date-start',9).
133          '</label></p>'.
134          '<p><label>'.__('Event end:').
135          form::field('eventdata_end',16,16,$end,'eventdata-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          $eventdata = new dcEventdata($GLOBALS['core']);
143
144          # Add event
145          if (isset($_POST['eventdata_start']) && isset($_POST['eventdata_end'])
146               && !empty($_POST['eventdata_start']) && !empty($_POST['eventdata_end'])) {
147               $post_id = (integer) $post_id;
148
149               if (FALSE === strtotime($_POST['eventdata_start']))
150                    throw new Exception('Wrong date format');
151
152               if (FALSE === strtotime($_POST['eventdata_end']))
153                    throw new Exception('Wrong date format');
154
155               if (strtotime($_POST['eventdata_start']) > strtotime($_POST['eventdata_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['eventdata_start']));
159               $end = date('Y-m-d H:i:00',strtotime($_POST['eventdata_end']));
160
161               $eventdata->setEventdata('eventdata',$post_id,$start,$end);
162          }
163
164          # Delete events
165          if (isset($_POST['eventdatas']) && is_array($_POST['eventdatas'])) {
166               foreach($_POST['eventdatas'] AS $v) {
167                    $v = explode(',',$v);
168                    if (isset($v[0]) && isset($v[1]))
169                         $eventdata->delEventdata('eventdata',$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          $eventdata = new dcEventdata($GLOBALS['core']);
179          $eventdata->delEventdata('eventdata',$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->eventdata_option_active && $E->checkPerm('pst')) {
186               $args[0][__('add event')] = 'eventdata_add';
187               $args[0][__('remove events')] = 'eventdata_remove';
188          }
189     }
190     # Save for posts_action.php
191     public static function adminPostsActions(&$core,$posts,$action,$redir)
192     {
193          $eventdata = new dcEventdata($core);
194
195          if ($action == 'eventdata_add' && isset($_POST['eventdata_start']) && isset($_POST['eventdata_end'])
196               && !empty($_POST['eventdata_start']) && !empty($_POST['eventdata_end'])) {
197
198               try {
199                    if (FALSE === strtotime($_POST['eventdata_start']))
200                         throw new Exception('Wrong date format');
201
202                    if (FALSE === strtotime($_POST['eventdata_end']))
203                         throw new Exception('Wrong date format');
204
205                    if (strtotime($_POST['eventdata_start']) > strtotime($_POST['eventdata_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['eventdata_start']));
209                    $end = date('Y-m-d H:i:00',strtotime($_POST['eventdata_end']));
210
211                    while ($posts->fetch()) {
212                         $eventdata->setEventdata('eventdata',$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 == 'eventdata_remove') {
221               try {
222                    while ($posts->fetch()) {
223                         $eventdata->delEventdata('eventdata',$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 != 'eventdata_add') return;
236
237          $start = empty($_POST['eventdata_start']) ? '' : $_POST['eventdata_start'];
238          $end = empty($_POST['eventdata_end']) ? '' : $_POST['eventdata_end'];
239
240          echo 
241          self::adminPostHeaders().
242          '<link rel="stylesheet" type="text/css" href="style/date-picker.css" />'."\n".
243          '<div id="edit-eventdata">'.
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('eventdata_start',16,16,$start,'eventdata-date-start',9).
249          '</label></p>'.
250          '<p><label>'.__('Event end:').
251          form::field('eventdata_end',16,16,$end,'eventdata-date-end',10).
252          '</label></p>'.
253          '</div>'.
254          $hidden_fields.
255          $core->formNonce().
256          form::hidden(array('action'),'eventdata_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('eventdata',
268               'SELECT eventdata_start, eventdata_end, eventdata_type, E.post_id '.
269               'FROM '.$core->prefix.'eventdata 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('eventdata');
278     }
279
280     public static function importInit(&$bk,&$core)
281     {
282          $bk->cur_eventdata = $core->con->openCursor($core->prefix.'eventdata');
283          $bk->eventdata = new dcEventdata($core);
284     }
285
286     public static function importSingle(&$line,&$bk,&$core)
287     {
288          if ($line->__name == 'eventdata' && isset($bk->old_ids['post'][(integer) $line->post_id])) {
289               $line->post_id = $bk->old_ids['post'][(integer) $line->post_id];
290               $bk->eventdata->setEventdata($line->eventdata_type,$line->post_id,$line->eventdata_start,$line->eventdata_end);
291          }
292     }
293
294     public static function importFull(&$line,&$bk,&$core)
295     {
296          if ($line->__name == 'eventdata') {
297               $bk->cur_eventdata->clean();
298               
299               $bk->cur_eventdata->eventdata_start   = (string) $line->eventdata_start;
300               $bk->cur_eventdata->eventdata_end   = (string) $line->eventdata_end;
301               $bk->cur_eventdata->eventdata_type = (string) $line->eventdata_type;
302               $bk->cur_eventdata->post_id   = (integer) $line->post_id;
303               
304               $bk->cur_eventdata->insert();
305          }
306     }
307}
308?>
Note: See TracBrowser for help on using the repository browser.

Sites map