/** * This method is copied 2015-11-24 from theplumpss/twitter module (https://github.com/plumpss/twitter/blob/master/code/PlumpTwitterFeed.php) * Also some other parts of this module has used theplumpss/twitter as an example, but tweet_to_array() is the * only direct copy - although it has some modifications too, regarding to format of the return value. * @param $tweet * @return mixed */ private static function tweet_to_array($tweet) { $date = new SS_Datetime(); $date->setValue(strtotime($tweet->created_at)); $html = $tweet->text; if ($tweet->entities) { //url links if ($tweet->entities->urls) { foreach ($tweet->entities->urls as $url) { $html = str_replace($url->url, '<a href="' . $url->url . '" target="_blank">' . $url->url . '</a>', $html); } } //hashtag links if ($tweet->entities->hashtags) { foreach ($tweet->entities->hashtags as $hashtag) { $html = str_replace('#' . $hashtag->text, '<a target="_blank" href="https://twitter.com/search?q=%23' . $hashtag->text . '">#' . $hashtag->text . '</a>', $html); } } //user links if ($tweet->entities->user_mentions) { foreach ($tweet->entities->user_mentions as $mention) { $html = str_replace('@' . $mention->screen_name, '<a target="_blank" href="https://twitter.com/' . $mention->screen_name . '">@' . $mention->screen_name . '</a>', $html); } } } $title = new Text(); $title->setValue($tweet->text); return array('LastEdited' => (string) $date, 'Created' => (string) $date, 'Fetched' => SS_Datetime::now(), 'SoMeAuthor' => $tweet->user->screen_name, 'SoMeUsername' => self::config()->username, 'Avatar' => $tweet->user->profile_image_url, 'Content' => $html, 'Title' => preg_replace('/\\.$/', '', $title->Summary(self::config()->title_length)), 'TwitterID' => $tweet->id, 'Locale' => $tweet->lang, 'Source' => 'Twitter'); }
public function parameterFields() { $fields = new FieldList(); // Check if any order exist if (Order::get()->exists()) { $first_order = Order::get()->sort('Created ASC')->first(); $months = array('All'); $statuses = Order::config()->statuses; array_unshift($statuses, 'All'); for ($i = 1; $i <= 12; $i++) { $months[] = date("F", mktime(0, 0, 0, $i + 1, 0, 0)); } // Get the first order, then count down from current year to that $firstyear = new SS_Datetime('FirstDate'); $firstyear->setValue($first_order->Created); $years = array(); for ($i = date('Y'); $i >= $firstyear->Year(); $i--) { $years[$i] = $i; } //Result Limit $result_limit_options = array(0 => 'All', 50 => 50, 100 => 100, 200 => 200, 500 => 500); $fields->push(DropdownField::create('Filter_Month', 'Filter by month', $months)); $fields->push(DropdownField::create('Filter_Year', 'Filter by year', $years)); $fields->push(DropdownField::create('Filter_Status', 'Filter By Status', $statuses)); $fields->push(DropdownField::create("ResultsLimit", "Limit results to", $result_limit_options)); } return $fields; }
private static function create_tweet($tweet) { $date = new SS_Datetime(); $date->setValue(strtotime($tweet->created_at)); $html = $tweet->text; if ($tweet->entities) { //url links if ($tweet->entities->urls) { foreach ($tweet->entities->urls as $url) { $html = str_replace($url->url, '<a href="' . $url->url . '" target="_blank">' . $url->url . '</a>', $html); } } //hashtag links if ($tweet->entities->hashtags) { foreach ($tweet->entities->hashtags as $hashtag) { $html = str_replace('#' . $hashtag->text, '<a target="_blank" href="https://twitter.com/search?q=%23' . $hashtag->text . '">#' . $hashtag->text . '</a>', $html); } } //user links if ($tweet->entities->user_mentions) { foreach ($tweet->entities->user_mentions as $mention) { $html = str_replace('@' . $mention->screen_name, '<a target="_blank" href="https://twitter.com/' . $mention->screen_name . '">@' . $mention->screen_name . '</a>', $html); } } } return new ArrayData(array('Date' => $date, 'Username' => $tweet->user->screen_name, 'Avatar' => $tweet->user->profile_image_url, 'Text' => $tweet->text, 'Html' => $html)); }
public function LastUpdated() { $elements = new DataList($this->dataClass); $lastUpdated = new SS_Datetime('LastUpdated'); $lastUpdated->setValue($elements->max('LastEdited')); return $lastUpdated; }
/** * @return SS_Datetime */ public function Created() { $created = $this->tag->getCommit()->getCommitterDate(); // gitonomy sets the time to UTC, so now we set the timezone to // whatever PHP is set to (date.timezone). This will change in the future if each // deploynaut user has their own timezone $created->setTimezone(new DateTimeZone(date_default_timezone_get())); $d = new SS_Datetime(); $d->setValue($created->format('Y-m-d H:i:s')); return $d; }
/** * @param mixed $data * @param string $field * @param array $options * @return string * @throws \ValidationException */ public static function validate_datetime($data, $field, $options = []) { $options = array_merge(['required' => true], $options); $required = $options['required']; if (isset($data[$field]) && is_string($data[$field])) { $date = $data[$field]; $dateTime = new \SS_Datetime(); $dateTime->setValue($date); if (!$dateTime->getValue()) { throw new \ValidationException("No valid datetime given."); } return $dateTime->Format('Y-m-d H:i:s'); } else { if ($required) { throw new \ValidationException("No {$field} given, but {$field} is required"); } } }
/** * @param int $limit * @return DataList */ function getNewsItemsFromSource($limit = 20) { $rss_news = null; $return_array = new ArrayList(); $outsourced_limit = 10; $rss_news = $this->getRssItems($outsourced_limit)->toArray(); foreach ($rss_news as $item) { $pubDate = DateTime::createFromFormat("D, j M Y H:i:s O", $item->pubDate)->setTimezone(new DateTimeZone("UTC")); $ss_pubDate = new SS_Datetime(); $ss_pubDate->setValue($pubDate->format("Y-m-d H:i:s")); $rss_news = new RssNews(); $rss_news->Date = $ss_pubDate; $rss_news->Headline = $item->title; $rss_news->Link = $item->link; $rss_news->Category = 'Planet'; $return_array->push($rss_news); } $blog_news = $this->getBlogItems($outsourced_limit)->toArray(); foreach ($blog_news as $item) { $pubDate = DateTime::createFromFormat("D, j M Y H:i:s O", $item->pubDate)->setTimezone(new DateTimeZone("UTC")); $ss_pubDate = new SS_Datetime(); $ss_pubDate->setValue($pubDate->format("Y-m-d H:i:s")); $rss_news = new RssNews(); $rss_news->Date = $ss_pubDate; $rss_news->Headline = $item->title; $rss_news->Link = $item->link; $rss_news->Category = 'Blog'; $return_array->push($rss_news); } $superuser_news = $this->getSuperUserItems($outsourced_limit)->toArray(); foreach ($superuser_news as $item) { $pubDate = DateTime::createFromFormat("Y-m-j\\TH:i:sO", $item->pubDate)->setTimezone(new DateTimeZone("UTC")); $ss_pubDate = new SS_Datetime(); $ss_pubDate->setValue($pubDate->format("Y-m-d H:i:s")); $rss_news = new RssNews(); $rss_news->Date = $ss_pubDate; $rss_news->Headline = $item->title; $rss_news->Link = $item->link; $rss_news->Category = 'Superuser'; $return_array->push($rss_news); } return $return_array->sort('Date', 'DESC')->limit($limit, 0); }
/** * Pull down latest tweets using the twitter API * * @return ArrayList */ public function LatestTweets($limit = 3) { $config = SiteConfig::current_site_config(); $output = new ArrayList(); if ($config->TwitterConsumerKey) { $tmhOAuth = new tmhOAuth(array('consumer_key' => $config->TwitterConsumerKey, 'consumer_secret' => $config->TwitterConsumerSecret, 'user_token' => $config->TwitterAccessToken, 'user_secret' => $config->TwitterAccessTokenSecret, 'curl_ssl_verifypeer' => false)); $code = $tmhOAuth->request('GET', $tmhOAuth->url('1.1/statuses/user_timeline'), array('screen_name' => $config->TwitterUsername, 'count' => $limit)); $response = $tmhOAuth->response['response']; $tweets = json_decode($response, true); if (!$tweets) { return false; } if ($this->errorCheck($tweets)) { return false; } foreach ($tweets as &$tweet) { $date = new SS_Datetime(); $date->setValue($tweet['created_at']); $output->push(new ArrayData(array('ID' => $tweet['id'], 'Date' => $date, 'Content' => $this->tweetConvert($tweet['text']), 'User' => new ArrayData(array('ID' => $tweet['user']['id'], 'Name' => $tweet['user']['name'], 'ProfileImg' => $tweet['user']['profile_image_url'], 'ScreenName' => $tweet['user']['screen_name']))))); } } return $output; }
public function check() { $OdeonCinemaID = (int) $this->request->param("ID"); if ($OdeonCinemaID) { if ($this->OdeonCinema = OdeonCinema::get_by_id("OdeonCinema", $OdeonCinemaID)) { $this->OdeonCinema->getCurrentFilms(); $OdeonFilmID = (int) $this->request->param("OtherID"); if ($OdeonFilmID) { if ($this->OdeonFilm = OdeonFilm::get_by_id("OdeonFilm", $OdeonFilmID)) { $maxdays = 15; $baseURL = "https://www.odeon.co.uk/"; $date = new Date(); $RestfulService = new RestfulService($baseURL); $i = 0; do { $date->setValue("+{$i} day"); if (!OdeonScreening::get("OdeonScreening", implode(" AND ", array("DATE_FORMAT(ScreeningTime,'%d%m%y') = '{$date->Format("dmy")}'", "FilmID='{$OdeonFilmID}'", "CinemaID='{$OdeonCinemaID}'")))->Count()) { $query = array('date' => $date->Format("Y-m-d"), 'siteId' => $OdeonCinemaID, 'filmMasterId' => $OdeonFilmID, 'type' => 'DAY'); $RestfulService->setQueryString($query); $Response = $RestfulService->request("showtimes/day"); if (!$Response->isError()) { $html = HtmlDomParser::str_get_html($Response->getBody()); foreach ($html->find('ul') as $ul) { foreach ($ul->find('li') as $li) { $ScreeningTime = new SS_Datetime(); $ScreeningTime->setValue("{$date->Format("Y-m-d")} {$li->find('a', 0)->innertext}:00"); $checkAgainstAPI = true; if ($OdeonScreening = OdeonScreening::get_one("OdeonScreening", implode(" AND ", array("CinemaID='{$OdeonCinemaID}'", "FilmID='{$OdeonFilmID}'", "ScreeningTime='{$ScreeningTime->Rfc2822()}'")))) { $checkAgainstAPI = $OdeonScreening->checkAgainstAPI(); } else { $OdeonScreening = new OdeonScreening(); $OdeonScreening->CinemaID = $OdeonCinemaID; $OdeonScreening->FilmID = $OdeonFilmID; $OdeonScreening->ScreeningTime = $ScreeningTime->Rfc2822(); } if ($checkAgainstAPI) { $URLSegment = str_replace($baseURL, "", $li->find('a', 0)->href); $Response_init = $RestfulService->request($URLSegment, "GET", null, null, array(CURLOPT_COOKIESESSION => TRUE)); if (!$Response_init->isError()) { $dom = new DOMDocument(); $dom->strictErrorChecking = FALSE; libxml_use_internal_errors(true); $dom->loadHTML($Response_init->getBody()); libxml_clear_errors(); $nodes = $dom->getElementsByTagName('form'); $submit_url = false; $hidden_inputs = array(); foreach ($nodes as $node) { if (!$submit_url && $node->hasAttributes()) { foreach ($node->attributes as $attribute) { if (!$submit_url && $attribute->nodeName == 'action') { $submit_url = $attribute->nodeValue; } } } } unset($node); $SubmitURL = ltrim($submit_url, '/'); $Cookies = $Response_init->getHeader("Set-Cookie"); if (is_array($Cookies)) { $Cookies = implode(';', $Cookies); } $Response_availability = $RestfulService->request($SubmitURL, "GET", null, null, array(CURLOPT_COOKIE => $Cookies)); if (!$Response_availability->isError()) { $html_availability = HtmlDomParser::str_get_html($Response_availability->getBody()); $ticketsTable = $html_availability->find('#tickets-table', 0); if ($ticketsTable) { $ticketsForm = $html_availability->find('#tickets', 0); $data = array("submit" => null); foreach ($ticketsTable->find('select') as $select) { $data[$select->attr["name"]] = "0"; } foreach ($ticketsTable->find('tr') as $tr) { foreach ($tr->find('td') as $td) { switch ($td->getAttribute("class")) { case "ticket-col": $OdeonScreening->Title = trim($td->innertext); break; case "price-col": $OdeonScreening->Cost = ltrim(explode(" ", trim($td->plaintext))[0], '£'); break; case "quantity-col": $Availability = 1; foreach ($td->find('select') as $select) { foreach ($select->find('option') as $option) { $Availability = $option->attr["value"]; } $data[$select->attr["name"]] = $Availability; } $Response_seats = $RestfulService->request(ltrim(html_entity_decode($ticketsForm->attr['action']), "/"), "POST", $data, null, array(CURLOPT_COOKIE => $Cookies)); if (!$Response_seats->isError()) { $html_seats = HtmlDomParser::str_get_html($Response_seats->getBody()); if (trim($html_seats->find('.step-headline', 0)->innertext) == "Choose your seats") { $OdeonScreening->Availability = $Availability; $OdeonScreening->SessionURL = $URLSegment; $OdeonScreening->duplicate(); } } break; } } } } } } } } } } else { Debug::show($query); Debug::show($Response); } } $i++; } while ($i < $maxdays); } else { echo "Not a valid film ID"; } } } else { echo "Not a valid cinema ID"; } } return $this; }
public function addVersionViewer(FieldList $fields) { if ($this->owner->hasExtension('Versioned') || $this->owner->hasExtension('VersionedDataObject')) { // Get the object where this function was called for reference purposes $object = $this->owner; // Get all tabs in the current model admin and prepart to put within a tabset called "Current" $current_tabs = $fields->find('Name', 'Root')->Tabs(); $fields = FieldList::create(TabSet::create("Root", $currenttab = TabSet::create("Current"), $historytab = TabSet::create("History")->addExtraClass("vertical-tabs"))); // Add all existing tabs to "Current" tabset $first = true; foreach ($current_tabs as $tab) { // If we have the getVersionedState function, // add a notice regarding the versioned state to the first tab // TODO incorporate VersionedDataObjectState extension into this module if ($first && $object->hasMethod('getVersionedState')) { $fields->addFieldToTab("Root.Current." . $tab->title, LiteralField::create('VersionedState', '<div class="message notice"><p>' . $object->getVersionedState() . '</p></div>')); $first = false; } $fields->addFieldsToTab("Root.Current." . $tab->title, $tab->Fields()); } // Remove any fields that have VersionViewerVisibility turned off foreach ($current_tabs as &$tab) { foreach ($tab->Fields() as $field) { // echo '<pre>'.$field->Name.' Viewable? '; print_r($field->versionViewerVisibility); if (!$field->versionViewerVisibility && $tab->fieldByName($field->Name)) { $tab->removeByName($field->Name); } } } // die(); // Also, as of now, Versioned does not track has_many or many_many relationships // So find fields relating to those relationships, remove them, // and add a message regarding this $untracked_msg = ""; foreach ($current_tabs as &$tab) { foreach ($tab->Fields() as $field) { $rel_class = $object->getRelationClass($field->Name); if ($rel_class) { if (in_array($rel_class, $object->has_many()) || in_array($rel_class, $object->many_many())) { if ($tab->fieldByName($field->Name)) { $tab->removeByName($field->Name); if (!$untracked_msg) { // $untracked_msg = '<div class="message notice"><p>Note: the following relationships are not tracked by versioning because they involve multiple records:<br />'; $untracked_msg = '<p>' . $field->Title(); } else { $untracked_msg .= "<br />" . $field->Title(); } } } } } } if ($untracked_msg) { $untracked_msg .= '</p>'; } // Get all past versions of this data object and put the relevant data in a set of tabs // within a tabset called "History" $versions = $object->allVersions(); foreach ($versions as $version) { // Get a record of this version of the object $record = Versioned::get_version($object->ClassName, $object->ID, $version->Version); // Make a set of read-only fields for use in assembling the History tabs $read_fields = $current_tabs->makeReadonly(); // Make a form using the relevant fields and load it with data from this record $form = new Form($object, "old_version", $read_fields, $object->getCMSActions()); $form->loadDataFrom($record); // Add the version number to each field name so we don't have duplicate field names if ($form->fields->dataFields()) { foreach ($form->fields->dataFields() as $field) { $field->Name = $field->Name . "version" . $version->Version; } } // Generate some heading strings describing this version $was_published = $version->WasPublished ? "P" : "D"; $was_published_full = $version->WasPublished ? "Published" : "Saved as draft"; $publishedby = Member::get()->byId($version->PublisherID); $authoredby = Member::get()->byId($version->AuthorID); $publisher_heading = ""; $author_heading = ""; if ($publishedby) { $publisher_heading = " by " . $publishedby->getName(); } if ($authoredby) { $author_heading = " (Authored by " . $authoredby->getName() . ")"; } $up_date = new SS_Datetime('update'); $up_date->setValue($version->LastEdited); $nice_date = $up_date->FormatFromSettings(); $tab_title = $version->Version . " - " . $nice_date . " (" . $was_published . ")"; $latest_version_notice = ""; if ($version->isLatestVersion()) { $latest_version_notice = " (latest version)"; } $tab_heading = "<div class='message notice'><p><strong>Viewing version " . $version->Version . $latest_version_notice . ".</strong><br>" . $was_published_full . $publisher_heading . " on " . $nice_date . $author_heading . "</p></div>"; // Add fields to a tab headed with a description of this version $fields->addFieldsToTab('Root.History.' . $tab_title, LiteralField::create('versionHeader' . $version->Version, $tab_heading)); $fields->addFieldsToTab('Root.History.' . $tab_title, $form->fields); // Add notice regarding untracked relationships if ($untracked_msg) { $fields->addFieldsToTab('Root.History.' . $tab_title, HeaderField::create('untrackedMessageHeader' . $version->Version, 'Note: the relationships listed below are not tracked by versioning because they involve multiple records', 4)); $fields->addFieldsToTab('Root.History.' . $tab_title, LiteralField::create('untrackedMessage' . $version->Version, $untracked_msg)); // $fields->addFieldsToTab('Root.History.' . $tab_title, LiteralField::create('untrackedMessage'.$version->Version, $untracked_msg)); } } } return $fields; }
public function parameterFields() { $fields = new FieldList(); if (class_exists("Subsite")) { $first_order = Subsite::get_from_all_subsites("Order")->sort('Created', 'ASC')->first(); } else { $first_order = Order::get()->sort('Created', 'ASC')->first(); } // Check if any order exist if ($first_order) { // List all months $months = array('All'); for ($i = 1; $i <= 12; $i++) { $months[] = date("F", mktime(0, 0, 0, $i + 1, 0, 0)); } // Get the first order, then count down from current year to that $firstyear = new SS_Datetime('FirstDate'); $firstyear->setValue($first_order->Created); $years = array(); for ($i = date('Y'); $i >= $firstyear->Year(); $i--) { $years[$i] = $i; } // Order Status $statuses = Order::config()->statuses; array_unshift($statuses, 'All'); $fields->push(TextField::create('Filter_FirstName', 'Customer First Name')); $fields->push(TextField::create('Filter_Surname', 'Customer Surname')); $fields->push(TextField::create('Filter_StockID', 'Stock ID')); $fields->push(TextField::create('Filter_ProductName', 'Product Name')); $fields->push(DropdownField::create('Filter_Month', 'Month', $months)); $fields->push(DropdownField::create('Filter_Year', 'Year', $years)); $fields->push(DropdownField::create('Filter_Status', 'Order Status', $statuses)); } return $fields; }
/** * Determines if a fetched date is outdated. * * @param mixed $fetched Date to evaluate. * @return boolean */ public static function isOutdated($fetched) { if ($fetched) { // Check if $fetched is an object if (!is_object($fetched)) { $dateime = new SS_Datetime(); $dateime->setValue($fetched); $fetched = $dateime; } if ($fetched->TimeDiff() > HailApi::getRefreshRate()) { return true; } return false; } return true; }
/** * * @return string */ public function getExpireHTML() { if (!$this->owner->Secured) { return; } if ($this->owner instanceof Folder) { $ret = "N/A"; } else { switch ($this->owner->ExpiryType) { case 'AtAFixedDate': if ($expireDate = $this->owner->ExpireAtDate) { $datetime = new SS_Datetime(); $datetime->setValue($expireDate); $now = $today = date('Y-m-d H:i:s'); if ($expireDate > $now) { $expire = _t("FileSecured.EmbargoedNotExpired", "Not expired, will expire "); } else { $expire = _t("FileSecured.EmbargoedExpired", "Expired "); } $time = Time::create(); $time->setValue($datetime->Time()); $date = Date::create(); $date->setValue($datetime->Date()); $ret = $expire . " at " . $time->Nice() . ", " . $date->Long(); } else { $ret = _t("FileSecured.EmbargoedNoDateSetNotExpired", "No embargoing date/time is set, so treated as not expired"); } break; default: //case 'None': $ret = "Not expired"; } } return $ret; }
/** * @return SS_Datetime */ public function LastUpdated() { if ($this->_lastUpdatedCache) { return $this->_lastUpdatedCache; } try { $created = $this->branch->getCommit()->getCommitterDate(); } catch (Exception $e) { //occasionally parsing will fail this is a fallback to make it still work return new SS_Datetime(); } // gitonomy sets the time to UTC, so now we set the timezone to // whatever PHP is set to (date.timezone). This will change in the future if each // deploynaut user has their own timezone $created->setTimezone(new DateTimeZone(date_default_timezone_get())); $date = new SS_Datetime(); $date->setValue($created->format('Y-m-d H:i:s')); $this->_lastUpdatedCache = $date; return $date; }
private function syncToDB($events) { $events = $events->Items; // Archive all the events that we have but not Arlo $eventsInDb = ArloEvent::get(); if ($eventsInDb) { foreach ($eventsInDb as $eventdb) { if (!$this->checkEventInAPI($events, $eventdb->EventID)) { $eventdb->Archive = true; $eventdb->write(); } } } foreach ($events as $event) { //identify the event by its ID which is to be unique $arloevent = ArloEvent::get()->filter(array('EventID' => $event->EventID))->First(); // if it doesnt exist in DB make a new one! if (!$arloevent) { $arloevent = new ArloEvent(); } $name = isset($event->Name) ? $event->Name : ''; $summary = isset($event->Summary) ? $event->Summary : ''; $description = isset($event->Description->Text) ? $event->Description->Text : ''; $link = isset($event->ViewUri) ? $event->ViewUri : ''; $location = isset($event->Location) ? $event->Location->Name : ''; $start = isset($event->StartDateTime) ? $event->StartDateTime : ''; $end = isset($event->EndDateTime) ? $event->EndDateTime : ''; $code = isset($event->Code) ? $event->Code : ''; $templatecode = isset($event->TemplateCode) ? $event->TemplateCode : ''; $provider = isset($event->Provider) ? $event->Provider : ''; $private = isset($event->IsPrivate) ? $event->IsPrivate : false; $private = $private == 'false' ? false : true; $startdatetime = new SS_Datetime(); $startdatetime->setValue($event->StartDateTime); $enddatetime = new SS_Datetime(); $enddatetime->setValue($event->EndDateTime); $arloevent->EventID = $event->EventID; $arloevent->Name = $name; $arloevent->ViewUri = $link; $arloevent->Code = $code; $arloevent->Summary = $summary; $arloevent->Description = $description; $arloevent->StartDateTime = $startdatetime; $arloevent->EndDateTime = $enddatetime; $arloevent->Location = $location; $arloevent->TemplateCode = $templatecode; $arloevent->Provider = $provider; $arloevent->IsPrivate = $private; $arloevent->write(); } }
/** * Load feed xml and return items * * @param boolean $refresh * @return ArrayList or boolean false */ function Items($refresh = false) { if (!$this->FeedURL) { return false; } if (!($xml = $this->loadXml())) { return false; } $result = new ArrayList(); $counter = (int) $this->Results; if (!$counter) { $counter = -1; } // Return all posts foreach ($xml->channel->item as $item) { // Date $date = new SS_Datetime('Date'); $date->setValue((string) $item->pubDate); // Title $itemTitle = (string) $item->title; $itemTitle = html_entity_decode($itemTitle); $title = new Text('Title'); $title->setValue($itemTitle); // Description $itemDescription = (string) $item->description; $itemDescription = html_entity_decode($itemDescription); $description = new Text('Description'); if ($this->Striptags) { $itemDescription = strip_tags($itemDescription); } $description->setValue($itemDescription); // Link $link = (string) $item->link; // Summary $summary = $itemDescription; $summary = strip_tags($summary); $summary = trim($summary); // Get first paragraph $summary = explode("\n", $summary); $summary = array_shift($summary); // Truncate summary if necessary $maxLength = (int) $this->SummaryMaxLength; if ($maxLength && strlen($summary) > $maxLength) { $summary = substr($summary, 0, $maxLength) . '...'; } // Add to result list $result->push(new ArrayData(array('Title' => $title, 'Date' => $date, 'Link' => $link, 'Description' => $description, 'Summary' => $summary))); if ($counter) { $counter--; if (!$counter) { break; } } } // Apply custom modifier function to each entry if (count($result) && !empty($this->Modifier) && $this->ClassName != __CLASS__ && method_exists($this->ClassName, $this->Modifier)) { try { $m = $this->Modifier; foreach ($result as $item) { $this->{$m}($item); } } catch (Exception $e) { // Ignore } } // Return items return $result; }
/** * Extracts and populates an array structure with the video information returned from Vimeo for a single video object. * @param Object * @return array */ private function _extractVideoInfo($data) { $video = array(); $video['ID'] = intval($data->id); $video['Title'] = new Text(null); $video['Title']->setValue(trim($data->title)); /* * need to clean up the text returned from Vimeo and paragraph format it so we can use * all the nifty SilverStripe text functionality. :) */ $desc = nl2br(trim($data->description)); $desc = str_replace("<br />\n<br />", '<br />', $desc); $desc = '<p>' . str_replace('<br />', '</p><p>', $desc) . '</p>'; $video['Description'] = new HTMLText(); $video['Description']->setValue($desc); // video url info foreach ($data->urls->url as $url) { switch ($url->type) { case 'video': $video['Url'] = new Text(); $video['Url']->setValue(trim($url->_content)); break; case 'mobile': $video['MobileUrl'] = new Text(); $video['MobileUrl']->setValue(trim($url->_content)); break; default: // do nothing. break; } } // video date info $upload_date = trim($data->upload_date); // create a SS_Datetime object so we can use familiar functionality. $ud = new SS_Datetime(); $ud->setValue($upload_date); $video['UploadDate'] = $ud; $modified_date = trim($data->modified_date); // create a SS_Datetime object so we can use familiar functionality. $md = new SS_Datetime(); $md->setValue($modified_date); $video['ModifiedDate'] = $md; // video thumbnail info foreach ($data->thumbnails->thumbnail as $tn) { if (strpos($tn->_content, '_100.jpg') !== false) { $video['ThumbSmall'] = new Text(); $video['ThumbSmall']->setValue(trim($tn->_content)); } elseif (strpos($tn->_content, '_200.jpg') !== false) { $video['ThumbMedium'] = new Text(); $video['ThumbMedium']->setValue(trim($tn->_content)); } elseif (strpos($tn->_content, '_640.jpg') !== false) { $video['ThumbLarge'] = new Text(); $video['ThumbLarge']->setValue(trim($tn->_content)); } } // User information $video['UserName'] = new Varchar(null, 255); $video['UserName']->setValue(trim($data->owner->username)); $video['UserDisplayName'] = new Varchar(null, 255); $video['UserDisplayName']->setValue(trim($data->owner->display_name)); $video['UserRealName'] = new Varchar(null, 255); $video['UserRealName']->setValue(trim($data->owner->realname)); $video['UserID'] = (int) trim($data->owner->id); $video['UserUrl'] = new Text(); $video['UserUrl']->setValue(trim($data->owner->profileurl)); // User photos for ($i = 0; $i < count($data->owner->portraits->portrait); $i++) { $tn = $data->owner->portraits->portrait[$i]; switch ($i) { case 0: $video['UserPortraitSmall'] = new Text(); $video['UserPortraitSmall']->setValue(trim($tn->_content)); break; case 1: $video['UserPortraitMedium'] = new Text(); $video['UserPortraitMedium']->setValue(trim($tn->_content)); break; case 2: $video['UserPortraitLarge'] = new Text(); $video['UserPortraitLarge']->setValue(trim($tn->_content)); break; case 3: $video['UserPortraitXLarge'] = new Text(); $video['UserPortraitXLarge']->setValue(trim($tn->_content)); break; default: // do nothing. break; } } $video['NumberLikes'] = intval(trim($data->number_of_likes)); $video['NumberPlays'] = intval(trim($data->number_of_plays)); $video['NumberComments'] = intval(trim($data->number_of_comments)); $video['Duration'] = intval(trim($data->duration)); $video['Width'] = intval(trim($data->width)); $video['Height'] = intval(trim($data->height)); $video['IsHD'] = new Boolean(null); $video['IsHD']->setValue(intval($data->is_hd)); $video['EmbedPrivacy'] = new Text(); $video['EmbedPrivacy']->setValue(trim($data->embed_privacy)); return $video; }
/** * retries latest tweets from Twitter * * @param String $username (e.g. mytwitterhandle) * @param Int $count - number of tweets to retrieve at any one time * @return DataObjectSet | Null */ public function TwitterFeed($username, $count = 5) { if (!$username) { user_error("No username provided"); } Config::inst()->update("MyTwitterData", "username", $username); //check settings are available $requiredSettings = array("twitter_consumer_key", "twitter_consumer_secret", "titter_oauth_token", "titter_oauth_token"); foreach ($requiredSettings as $setting) { if (!Config::inst()->get("MyTwitter", $setting)) { user_error(" you must set MyTwitter::{$setting}", E_USER_NOTICE); return null; } } require_once Director::baseFolder() . '/' . SS_SHARETHIS_DIR . '/third_party/twitter_oauth/TwitterOAuthConsumer.php'; $connection = new TwitterOAuth(Config::inst()->get("MyTwitter", "twitter_consumer_key"), Config::inst()->get("MyTwitter", "twitter_consumer_secret"), Config::inst()->get("MyTwitter", "titter_oauth_token"), Config::inst()->get("MyTwitter", "titter_oauth_token_secret")); $config = Config::inst()->get("MyTwitter", "twitter_config"); $config['screen_name'] = $username; $tweets = $connection->get('statuses/user_timeline', $config); $tweetList = new ArrayList(); if (count($tweets) > 0 && !isset($tweets->error)) { $i = 0; foreach ($tweets as $tweet) { if (Config::inst()->get("MyTwitter", "favourites_only") && $tweet->favorite_count == 0) { break; } if (Config::inst()->get("MyTwitter", "non_replies_only") && $tweet->in_reply_to_status_id) { break; } if (Config::inst()->get("MyTwitter", "debug")) { print_r($tweet); } if (++$i > $count) { break; } $date = new SS_Datetime(); $date->setValue(strtotime($tweet->created_at)); $text = htmlentities($tweet->text, ENT_NOQUOTES, $encoding = "UTF-8", $doubleEncode = false); if (!empty($tweet->entities) && !empty($tweet->entities->urls)) { foreach ($tweet->entities->urls as $url) { if (!empty($url->url) && !empty($url->display_url)) { $text = str_replace($url->url, '<a href="' . $url->url . '" class="external">' . $url->display_url . '</a>', $text); } } } $tweetList->push(new ArrayData(array('ID' => $tweet->id_str, 'Title' => $text, 'Date' => $date))); } } return $tweetList; }
/** * Parse URL parameters and set the filters * * @param boolean $produceErrorMessages Set to false to omit session messages. * @return array */ public function parseParams($produceErrorMessages = true) { $tag = $this->request->getVar('tag'); $from = $this->request->getVar('from'); $to = $this->request->getVar('to'); $year = $this->request->getVar('year'); $month = $this->request->getVar('month'); if ($tag == '') { $tag = null; } if ($from == '') { $from = null; } if ($to == '') { $to = null; } if ($year == '') { $year = null; } if ($month == '') { $month = null; } if (isset($tag)) { $tag = (int) $tag; } if (isset($from)) { $from = urldecode($from); $parser = new SS_Datetime(); $parser->setValue($from); $from = $parser->Format('Y-m-d'); } if (isset($to)) { $to = urldecode($to); $parser = new SS_Datetime(); $parser->setValue($to); $to = $parser->Format('Y-m-d'); } if (isset($year)) { $year = (int) $year; } if (isset($month)) { $month = (int) $month; } // If only "To" has been provided filter by single date. Normalise by swapping with "From". if (isset($to) && !isset($from)) { list($to, $from) = array($from, $to); } // Flip the dates if the order is wrong. if (isset($to) && isset($from) && strtotime($from) > strtotime($to)) { list($to, $from) = array($from, $to); if ($produceErrorMessages) { Session::setFormMessage('Form_DateRangeForm', _t('DateUpdateHolder.FilterAppliedMessage', 'Filter has been applied with the dates reversed.'), 'warning'); } } // Notify the user that filtering by single date is taking place. if (isset($from) && !isset($to)) { if ($produceErrorMessages) { Session::setFormMessage('Form_DateRangeForm', _t('DateUpdateHolder.DateRangeFilterMessage', 'Filtered by a single date.'), 'warning'); } } return array('tag' => $tag, 'from' => $from, 'to' => $to, 'year' => $year, 'month' => $month); }
/** * Get an SSDatetime object representing the converted * time. Used to access the helper methods that SSDatetime * provides */ function SSDatetime() { $datetime = new SS_Datetime($this->name); $datetime->setValue($this->value); return $datetime; }
/** * Helper method to convert weather data in JSON format to a SilverStripe DataObject * It appears several times in the API * @param [type] $weather [description] * @return [type] [description] */ private function json_weather_to_data_object($weather) { $do = new DataObject(); //$do->Latitude = $weather->coord->lat; //$do->Longitude = $weather->coord->lat; //$do->Name = $weather->name; //$do->Country = $weather->sys->country; //$do->Sunrise = $weather->sys->sunrise; //$do->Sunset = $weather->sys->sunset; $do->WeatherDescription = $weather->weather[0]->description; $do->WeatherMain = $weather->weather[0]->main; $do->WeatherIconURL = 'http://openweathermap.org/img/w/' . $weather->weather[0]->icon . '.png'; if (isset($weather->wind)) { $do->WindSpeed = $weather->wind->speed; $do->WindDirection = $weather->wind->deg; } // 5 day forecast if (isset($weather->main)) { $do->TemperatureCurrent = $weather->main->temp; $do->TemperatureMin = $weather->main->temp_min; $do->TemperatureMax = $weather->main->temp_max; $do->Pressure = $weather->main->pressure; $do->PressureSeaLevel = $weather->main->sea_level; $do->PressureGroundLevel = $weather->main->grnd_level; $do->Humidity = $weather->main->humidity; } else { // 10 day forecast is a different format $do->TemperatureMin = $weather->temp->min; $do->TemperatureMax = $weather->temp->max; $do->Pressure = $weather->pressure; $do->Humidity = $weather->humidity; $do->WindSpeed = $weather->speed; $do->WindDirection = $weather->deg; } $ssdt = new SS_Datetime(); $ssdt->setValue($weather->dt); $do->DateTime = $ssdt; if (isset($weather->clouds)) { // variation in data output here :( if (isset($weather->clouds->all)) { $do->CloudCoverPercentage = $weather->clouds->all; } else { $do->CloudCoverPercentage = $weather->clouds; } } return $do; }