/**
  * Tests that, given a channel configured to use the Test parser,
  * the SiSPS can return a list of content items
  */
 public function testFetchContentFromChannelWithTestParser()
 {
     $channel = new \Swiftriver\Core\ObjectModel\Channel();
     $channel->SetType("Test");
     $service = new \Swiftriver\Core\Modules\SiSPS\SwiftriverSourceParsingService();
     $contentItems = $service->FetchContentFromChannel($channel);
     $this->assertEquals(true, is_array($contentItems));
     $this->assertEquals(1, count($contentItems));
     $this->assertEquals("testId", $contentItems[0]->GetId());
 }
 /**
  * This method will take the information prvided in the
  * instance of a Swiftriver\Core\ObjectModel\Channel object
  * and will make a call to the channel to fetch and content
  * that can be fetched and then parse the content into an array
  * of Swiftriver\Core\ObjectModel\Content items
  *
  * @param Swiftriver\Core\ObjectModel\Channel $channel
  * @return Swiftriver\Core\ObjectModel\Content[] $contentItems
  */
 public function FetchContentFromChannel($channel)
 {
     //get the type of the channel
     $channelType = $channel->GetType();
     //Get a Parser from the ParserFactory based on the channel type
     $factory = ParserFactory::GetParser($channelType);
     //Extract the parameters from the channel object
     $parameters = $channel->GetParameters();
     //Get and parse all avaliable content items from the parser
     $contentItems = $factory->GetAndParse($parameters);
     //Return the content items
     return $contentItems;
 }
 /**
  * Parses the json in to a channel object
  *
  * @param string $json
  * @return \Swiftriver\Core\ObjectModel\Channel
  */
 public function ParseJSONToChannel($json)
 {
     $logger = \Swiftriver\Core\Setup::GetLogger();
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Method invoked]", \PEAR_LOG_INFO);
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Calling json_decode]", \PEAR_LOG_DEBUG);
     $data = json_decode($json);
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Extracting data from the JSON objects]", \PEAR_LOG_DEBUG);
     if (!isset($data) || !$data) {
         $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [ERROR: No objects present at data[0], returning null]", \PEAR_LOG_DEBUG);
         return null;
     }
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Extracting values from the data]", \PEAR_LOG_DEBUG);
     $type = $data->type;
     $updatePeriod = $data->updatePeriod;
     $active = $data->active;
     $parameters = $data->parameters;
     if (!isset($type) || !isset($updatePeriod) || !isset($parameters) || !is_array($parameters)) {
         $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [ERROR: either the 'type', 'updatePeriod' or 'parameters array' could not be found, returning null]", \PEAR_LOG_DEBUG);
         return null;
     }
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Constructing Channel object]", \PEAR_LOG_DEBUG);
     $formattedParams = array();
     foreach ($parameters as $params) {
         $formattedParams[$params->key] = $params->value;
     }
     $channel = new \Swiftriver\Core\ObjectModel\Channel();
     $channel->SetType($type);
     $channel->SetUpdatePeriod($updatePeriod);
     $channel->SetActive($active);
     $channel->SetParameters($formattedParams);
     $logger->log("Core::ServiceAPI::ChannelProcessingJobClasses::ChannelProcessingJobBase::ParseJSONToChannel [Method finished]", \PEAR_LOG_INFO);
     return $channel;
 }
 /**
  * Lists all the current Channel Processing Jobs in the core
  * @return \Swiftriver\Core\ObjectModel\Channel[]
  */
 public static function ListAllChannelProcessingJobs()
 {
     $query = "SELECT * FROM channelprocessingjobs ORDER BY nextrun;";
     $result = self::RunQuery($query);
     if (!$result) {
         return null;
     }
     $channels = array();
     while ($row = mysql_fetch_array($result, \MYSQL_ASSOC)) {
         $type = $row["type"];
         $parameters = $row["parameters"];
         $updatePeriod = $row["updateperiod"];
         $nextrun = strtotime($row["nextrun"]);
         $lastrun = strtotime($row["lastrun"]);
         $lastsucess = strtotime($row["lastsucess"]);
         $timesrun = $row["timesrun"];
         $active = $row["active"];
         $channel = new \Swiftriver\Core\ObjectModel\Channel();
         $channel->SetType($type);
         $channel->SetUpdatePeriod($updatePeriod);
         $channel->SetActive(!isset($active) || $active != 0);
         $params = array();
         foreach (explode("|", $parameters) as $parameter) {
             $pair = explode(",", $parameter);
             $key = urldecode($pair[0]);
             $value = urldecode($pair[1]);
             $params[$key] = $value;
         }
         $channel->SetParameters($params);
         $channels[] = $channel;
     }
     return $channels;
 }