/** * Create an event * @return void */ private function createEvent() { // if post data is set, we are creating an event if (isset($_POST) && count($_POST) > 0) { require_once FRAMEWORK_PATH . 'models/event.php'; $event = new Event($this->registry, 0); $event->setName($this->registry->getObject('db')->sanitizeData($_POST['name'])); $event->setDescription($this->registry->getObject('db')->sanitizeData($_POST['description'])); $event->setDate($this->registry->getObject('db')->sanitizeData($_POST['date']), false); $event->setStartTime($this->registry->getObject('db')->sanitizeData($_POST['start_time'])); $event->setEndTime($this->registry->getObject('db')->sanitizeData($_POST['end_time'])); $event->setCreator($this->registry->getObject('authenticate')->getUser()->getID()); $event->setType($this->registry->getObject('db')->sanitizeData($_POST['type'])); if (isset($_POST['invitees']) && is_array($_POST['invitees']) && count($_POST['invitees']) > 0) { // assumes invitees are added to a table using javascript, with a hidden field with name invitees[] for the ID of invitee $is = array(); foreach ($_POST['invitees'] as $i) { $is[] = intval($i); } $event->setInvitees($is); } $event->save(); $this->registry->redirectUser($this->registry->buildURL(array('event', 'view', $event->getID()), '', false), 'Event created', 'Thanks, the event has been created', false); } else { $this->registry->getObject('template')->buildFromTemplates('header.tpl.php', 'events/create.tpl.php', 'footer.tpl.php'); } }
function parse($syncId, &$nbEvents = 0, $enableCache = true, $forceFeed = false) { $nbEvents = 0; assert('is_int($syncId) && $syncId>0'); if (empty($this->id) || 0 == $this->id) { /* Le flux ne dispose pas pas d'id !. Ça arrive si on appelle parse() sans avoir appelé save() pour un nouveau flux. @TODO: un create() pour un nouveau flux ? */ $msg = 'Empty or null id for a feed! ' . 'See ' . __FILE__ . ' on line ' . __LINE__; error_log($msg, E_USER_ERROR); die($msg); // Arrêt, sinon création événements sans flux associé. } $feed = new SimplePie(); $feed->enable_cache($enableCache); $feed->force_feed($forceFeed); $feed->set_feed_url($this->url); $feed->set_useragent('Mozilla/4.0 Leed (LightFeed Aggregator) ' . VERSION_NAME . ' by idleman http://projet.idleman.fr/leed'); if (!$feed->init()) { $this->error = $feed->error; $this->lastupdate = $_SERVER['REQUEST_TIME']; $this->save(); return false; } $feed->handle_content_type(); // UTF-8 par défaut pour SimplePie if ($this->name == '') { $this->name = $feed->get_title(); } if ($this->name == '') { $this->name = $this->url; } $this->website = $feed->get_link(); $this->description = $feed->get_description(); $items = $feed->get_items(); $eventManager = new Event(); $events = array(); $iEvents = 0; foreach ($items as $item) { // Ne retient que les 100 premiers éléments de flux. if ($iEvents++ >= 100) { break; } // Si le guid existe déjà, on évite de le reparcourir. $alreadyParsed = $eventManager->load(array('guid' => $item->get_id(), 'feed' => $this->id)); if (isset($alreadyParsed) && $alreadyParsed != false) { $events[] = $alreadyParsed->getId(); continue; } // Initialisation des informations de l'événement (élt. de flux) $event = new Event(); $event->setSyncId($syncId); $event->setGuid($item->get_id()); $event->setTitle($item->get_title()); $event->setPubdate($item->get_date()); $event->setCreator('' == $item->get_author() ? '' : $item->get_author()->name); $event->setLink($item->get_permalink()); $event->setFeed($this->id); $event->setUnread(1); // inexistant, donc non-lu //Gestion de la balise enclosure pour les podcasts et autre cochonneries :) $enclosure = $item->get_enclosure(); if ($enclosure != null && $enclosure->link != '') { $enclosureName = substr($enclosure->link, strrpos($enclosure->link, '/') + 1, strlen($enclosure->link)); $enclosureArgs = strpos($enclosureName, '?'); if ($enclosureArgs !== false) { $enclosureName = substr($enclosureName, 0, $enclosureArgs); } $enclosureFormat = isset($enclosure->handler) ? $enclosure->handler : substr($enclosureName, strrpos($enclosureName, '.') + 1); $enclosure = '<div class="enclosure"><h1>Fichier média :</h1><a href="' . $enclosure->link . '"> ' . $enclosureName . '</a> <span>(Format ' . strtoupper($enclosureFormat) . ', ' . Functions::convertFileSize($enclosure->length) . ')</span></div>'; } else { $enclosure = ''; } $event->setContent($item->get_content() . $enclosure); $event->setDescription($item->get_description() . $enclosure); if (trim($event->getDescription()) == '') { $event->setDescription(substr($event->getContent(), 0, 300) . '…<br><a href="' . $event->getLink() . '">Lire la suite de l\'article</a>'); } if (trim($event->getContent()) == '') { $event->setContent($event->getDescription()); } $event->setCategory($item->get_category()); $event->save(); $nbEvents++; } $listid = ""; foreach ($events as $item) { $listid .= ',' . $item; } $query = 'UPDATE `' . MYSQL_PREFIX . 'event` SET syncId=' . $syncId . ' WHERE id in (0' . $listid . ');'; $myQuery = $this->customQuery($query); $this->lastupdate = $_SERVER['REQUEST_TIME']; $this->save(); return true; }