add('name', PLUGIN_MYCALENDAR_TITLE); $propbag->add('description', PLUGIN_MYCALENDAR_DESC); $propbag->add('requirements', array( 'serendipity' => '2.0', 'smarty' => '2.6.7', 'php' => '4.1.0' )); $propbag->add('version', '0.18.1'); $propbag->add('author', 'Garvin Hicking, Markus Gerstel, Grischa Brockhaus'); $propbag->add('stackable', false); $propbag->add('event_hooks', array( 'backend_sidebar_entries' => true, 'backend_sidebar_entries_event_display_mycalendar' => true, 'frontend_calendar' => true, 'external_plugin' => true, 'css_backend' => true ) ); $this->dependencies = array('serendipity_plugin_mycalendar' => 'remove'); $propbag->add('groups', array('FRONTEND_FEATURES')); } function setupDB() { global $serendipity; if (serendipity_db_bool($this->get_config('db_built4', false))) { return true; } if (serendipity_db_bool($this->get_config('db_built3', false))) { $sql = "UPDATE {$serendipity['dbPrefix']}mycalendar SET eventdate2 = eventdate WHERE (eventdate2 = 0) OR eventdate2 IS NULL;"; serendipity_db_schema_import($sql); $this->set_config('db_built4', 'true'); return true; } if (serendipity_db_bool($this->get_config('db_built2', false))) { $sql = "ALTER TABLE {$serendipity['dbPrefix']}mycalendar ADD eventdate2 int(10) {UNSIGNED} default null;"; serendipity_db_schema_import($sql); $this->set_config('db_built3', 'true'); return true; } if (serendipity_db_bool($this->get_config('db_built', false))) { $sql = "ALTER TABLE {$serendipity['dbPrefix']}mycalendar ADD eventurltitle varchar(255) default null;"; serendipity_db_schema_import($sql); $this->set_config('db_built2', 'true'); return true; } $sql = "CREATE TABLE {$serendipity['dbPrefix']}mycalendar ( eventid {AUTOINCREMENT} {PRIMARY}, eventname varchar(255) NOT NULL default '', eventurl varchar(255) NOT NULL default '', eventurltitle varchar(255) NOT NULL default '', eventdate int(10) {UNSIGNED} default null, eventdate2 int(10) {UNSIGNED} default null, eventcategory varchar(255) NOT NULL default '', eventtype varchar(255) NOT NULL default '' );"; serendipity_db_schema_import($sql); $this->set_config('db_built4', 'true'); } function &getevents() { global $serendipity; $this->setupDB(); $sql = "SELECT * FROM {$serendipity['dbPrefix']}mycalendar ORDER BY eventdate"; $items = serendipity_db_query($sql); if (!is_array($items)) { $empty = array(); return $empty; } else { return $items; } } function get_month_events(&$eventData, $addData) { global $serendipity; if (!isset($addData['TS']) || !isset($addData['EndTS'])) return; $this->setupDB(); $sql = "SELECT * FROM {$serendipity['dbPrefix']}mycalendar WHERE (eventdate >= '" . serendipity_db_escape_string($addData['TS']) . "') AND (eventdate < '" . serendipity_db_escape_string($addData['EndTS']) . "') ORDER BY eventdate"; $items = serendipity_db_query($sql); if (is_array($items)) { foreach($items as $event) { $day = date('j', $event['eventdate']); $day2 = date('j', $event['eventdate2']); for ($theday=$day; $theday<=$day2; $theday++) { if (!isset($eventData[$theday])) { $eventData[$theday] = array( 'Class' => 's9y_mc_event', 'Title' => $event['eventname'], 'Extended' => array( 'Link' => $event['eventurl'], 'Active' => ($event['eventurl'] != '')) ); } else { $eventData[$theday]['Title'] .= "; " . $event['eventname']; } } } } } function createevents() { global $serendipity; $this->setupDB(); $events = $this->getevents(); foreach($serendipity['POST']['event'] AS $idx => $array) { $array['eventdate'] = mktime(0, 0, 0, $array['month'], $array['day'], $array['year']); $array['eventdate2'] = mktime(0, 0, 0, $array['month2'], $array['day2'], $array['year2']); if (empty($idx)) { if (empty($array['eventurl']) && empty($array['eventname'])) { continue; } elseif (empty($array['eventname'])) { echo '
' . PLUGIN_MYCALENDAR_EVENT_MISSINGDATA . '
'; } else { $this->insertevent($array); } } elseif (is_numeric($idx)) { if (empty($array['eventurl']) && empty($array['eventname'])) { $this->deleteevent($idx, $array); } else { $this->updateevent($idx, $array); } } } } function updateevent($idx, &$array) { global $serendipity; if (!serendipity_checkFormToken()) { return false; } $q = "UPDATE {$serendipity['dbPrefix']}mycalendar SET eventname = '" . serendipity_db_escape_string($array['eventname']) . "', eventurl = '" . serendipity_db_escape_string($array['eventurl']) . "', eventurltitle = '" . serendipity_db_escape_string($array['eventurltitle']) . "', eventdate = '" . serendipity_db_escape_string($array['eventdate']) . "', eventdate2 = '" . serendipity_db_escape_string($array['eventdate2']) . "' WHERE eventid = " . (int)$idx; return serendipity_db_query($q); } function deleteevent($idx, &$array) { global $serendipity; if (!serendipity_checkFormToken()) { return false; } $q = "DELETE FROM {$serendipity['dbPrefix']}mycalendar WHERE eventid = " . (int)$idx; return serendipity_db_query($q); } function insertevent(&$array) { global $serendipity; if (!serendipity_checkFormToken()) { return false; } return serendipity_db_query("INSERT INTO {$serendipity['dbPrefix']}mycalendar (eventname, eventurl, eventurltitle, eventdate, eventdate2) VALUES ('" . serendipity_db_escape_string($array['eventname']) . "','" . serendipity_db_escape_string($array['eventurl']) . "','" . serendipity_db_escape_string($array['eventurltitle']) . "','" . serendipity_db_escape_string($array['eventdate']) . "','" . serendipity_db_escape_string($array['eventdate2']) . "')"); } function getDropdown($name, $id, $values, $selected, $useCounter = false, $onChange = '') { $html = ''; return $html; } function showevents() { global $serendipity; if (!empty($serendipity['POST']['mycalendarAction']) || !empty($serendipity['POST']['event'])) { $this->createevents(); } $events = $this->getevents(); $events[] = array( 'eventid' => 0, 'eventname' => '', 'eventurl' => '', 'eventurltitle' => '', 'eventdate' => time(), 'eventdate2' => time() ); echo '

' . PLUGIN_MYCALENDAR_TITLE . '

'; echo '

' . PLUGIN_MYCALENDAR_DESC . '. ' . PLUGIN_MYCALENDAR_EVENTLIST . '

'; echo '
'; echo serendipity_setFormToken(); echo '
'; foreach($events AS $idx => $event) { $even = ($idx % 2 ? 'even' : 'uneven'); $year = date('Y', $event['eventdate']); $month = date('m', $event['eventdate']); $day = date('d', $event['eventdate']); $year2 = date('Y', $event['eventdate2']); $month2 = date('m', $event['eventdate2']); $day2 = date('d', $event['eventdate2']); echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo " \n"; echo "\n"; echo "\n"; echo " \n"; echo " \n"; echo " \n"; echo "\n"; } echo '
# ' . PLUGIN_MYCALENDAR_EVENTNAME . ' ' . PLUGIN_MYCALENDAR_EVENTURI . ' ' . PLUGIN_MYCALENDAR_EVENTDATE . ' ' . PLUGIN_MYCALENDAR_EVENTDATE2 . '
$idx"; echo $this->getDropdown('day', $event['eventid'], range(1, 31), $day, false, 'changeDate('. $event['eventid'] .')') . "."; echo $this->getDropdown('month', $event['eventid'], range(1, 12), $month, false, 'changeDate('. $event['eventid'] .')') . "."; echo $this->getDropdown('year', $event['eventid'], range(date('Y'), date('Y')+2), $year, false, 'changeDate('. $event['eventid'] .')'); if ($event['eventdate'] < time()-86400) { echo ' ' . DELETE . ''; } echo " "; echo $this->getDropdown('day2', $event['eventid'], range(1, 31), $day2, false, 'changeDate2('. $event['eventid'] .')') . "."; echo $this->getDropdown('month2', $event['eventid'], range(1, 12), $month2, false, 'changeDate2('. $event['eventid'] .')') . "."; echo $this->getDropdown('year2', $event['eventid'], range(date('Y'), date('Y')+2), $year2, false, 'changeDate2('. $event['eventid'] .')'); echo '"; echo "
 
'; } function generate_content(&$title) { $title = PLUGIN_MYCALENDAR_TITLE; } function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; $hooks = &$bag->get('event_hooks'); if (isset($hooks[$event])) { switch($event) { case 'backend_sidebar_entries': ?>
  • showevents(); break; case 'external_plugin': if ($eventData == 'mycalendar.rss') { $plugins = serendipity_plugin_api::enum_plugins('*', false, 'serendipity_plugin_mycalendar', null); if (!is_array($plugins)) { return; } foreach ($plugins as $plugin_data) { $plugin =& serendipity_plugin_api::load_plugin($plugin_data['name'], $plugin_data['authorid'], $plugin_data['path']); } if (!is_object($plugin)) { return; } $items = $plugin->generate_content($eventData, true); header('Content-Type: text/xml; charset=UTF-8'); echo '' . "\n"; ?> <?php echo $serendipity['blogTitle'] . ' - ' . PLUGIN_MYCALENDAR_TITLE; ?> Serendipity - http://www.s9y.org/ <?php echo serendipity_utf8_encode((function_exists('serendipity_specialchars') ? serendipity_specialchars($item['title']) : htmlspecialchars($item['title'], ENT_COMPAT, LANG_CHARSET))); ?> get_month_events($eventData, $addData); break; } } return true; } } /* vim: set sts=4 ts=4 expandtab : */