/**
	* Processes a feed 
	*
	* @param   $feed       URL string    Feed 
	* @return  The number of posts added
	*/
	private function processFeed(&$feed)  {
		@set_time_limit(0);
		trigger_error('<span class="coderr b">'.sprintf(__('Processing feed %1s.', WPeMatico :: TEXTDOMAIN ),$feed).'</span>' , E_USER_NOTICE);   // Log
		
		$items = array();
		$count = 0;
		$prime = true;

		// Access the feed
		$simplepie =  WPeMatico :: fetchFeed($feed, false, $this->campaign['campaign_max']);
		foreach($simplepie->get_items() as $item) {
			if($prime){
				//Siempre guardo el PRIMERO leido por feed  (es el ultimo item, mas nuevo)
				$this->lasthash[$feed] = md5($item->get_permalink()); 
				$prime=false;
			}

			$this->currenthash[$feed] = md5($item->get_permalink()); // el hash del item actual del feed feed 
			if( !$this->cfg['allowduplicates'] || !$this->cfg['allowduptitle'] || !$this->cfg['allowduphash'] ){
				if( !$this->cfg['allowduphash'] ){
					// chequeo a la primer coincidencia sale del foreach
					$dupi = ( @$this->campaign[$feed]['lasthash'] == $this->currenthash[$feed] ); 
					if ($dupi) {
						trigger_error(sprintf(__('Found duplicated hash \'%1s\'', WPeMatico :: TEXTDOMAIN ),$item->get_permalink()).': '.$this->currenthash[$feed] ,E_USER_NOTICE);
						trigger_error(__('Filtering duplicated posts.', WPeMatico :: TEXTDOMAIN ),E_USER_NOTICE);
						break;   
					}
				}
				if( !$this->cfg['allowduptitle'] ){
					if($this->isDuplicate($this->campaign, $feed, $item)) {
						trigger_error(__('Filtering duplicated posts.', WPeMatico :: TEXTDOMAIN ),E_USER_NOTICE);
						break;
					}
				}
			}
			$count++;
			array_unshift($items, $item); // add at Post stack in correct order by date 		  
			if($count == $this->campaign['campaign_max']) {
				trigger_error(sprintf(__('Campaign fetch limit reached at %1s.', WPeMatico :: TEXTDOMAIN ),$this->campaign['campaign_max']),E_USER_NOTICE);
				break;
			}
		}
		
		// Processes post stack
		$realcount = 0;
		foreach($items as $item) {					
			$realcount++;
			$suma=$this->processItem($simplepie, $item, $feed);
			if (isset($suma) && is_int($suma)) {
				$realcount = $realcount + $suma;
				$suma="";
			}
		}
		
		if($realcount) {
			trigger_error(sprintf(__('%s posts added', WPeMatico :: TEXTDOMAIN ),$realcount),E_USER_NOTICE);
		}
		
		return $realcount;
	}
Beispiel #2
0
 public static function CheckFields()
 {
     // check required fields values before save post
     $cfg = get_option(WPeMatico::OPTION_KEY);
     $err_message = "";
     if (isset($_POST['campaign_wrd2cat'])) {
         $wrd2cat = array();
         parse_str($_POST['campaign_wrd2cat'], $wrd2cat);
         $campaign_wrd2cat = @$wrd2cat['campaign_wrd2cat'];
         for ($id = 0; $id < count($campaign_wrd2cat); $id++) {
             $word = $campaign_wrd2cat[$id];
             $regex = $_POST['campaign_wrd2cat_regex'][$id] == 1 ? true : false;
             if (!empty($word)) {
                 if ($regex) {
                     if (false === @preg_match($word, '')) {
                         $err_message = $err_message != "" ? $err_message . "<br />" : "";
                         $err_message .= sprintf(__('There\'s an error with the supplied RegEx expression in word: %s', WPeMatico::TEXTDOMAIN), '<span class="coderr">' . $word . '</span>');
                     }
                 }
             }
         }
     }
     if (isset($_POST['campaign_word_origin'])) {
         $rewrites = array();
         parse_str($_POST['campaign_word_origin'], $rewrites);
         $campaign_word_origin = @$rewrites['campaign_word_origin'];
         for ($id = 0; $id < count($campaign_word_origin); $id++) {
             $origin = $campaign_word_origin[$id];
             $regex = $_POST['campaign_word_option_regex'][$id] == 1 ? true : false;
             if (!empty($origin)) {
                 if ($regex) {
                     if (false === @preg_match($origin, '')) {
                         $err_message = $err_message != "" ? $err_message . "<br />" : "";
                         $err_message .= sprintf(__('There\'s an error with the supplied RegEx expression in ReWrite: %s', WPeMatico::TEXTDOMAIN), '<span class="coderr">' . $origin . '</span>');
                     }
                 }
             }
         }
     }
     if (!isset($cfg['disablecheckfeeds']) || !$cfg['disablecheckfeeds']) {
         // Si no esta desactivado en settings
         // Si no hay ningun feed devuelve mensaje de error
         // Proceso los feeds sacando los que estan en blanco
         if (isset($_POST['campaign_feeds'])) {
             $feeds = array();
             parse_str($_POST['campaign_feeds'], $feeds);
             $all_feeds = $feeds['campaign_feeds'];
             for ($id = 0; $id < count($all_feeds); $id++) {
                 $feedname = $all_feeds[$id];
                 if (!empty($feedname)) {
                     if (!isset($campaign_feeds)) {
                         $campaign_feeds = array();
                     }
                     $campaign_feeds[] = $feedname;
                 }
             }
         }
         if (empty($campaign_feeds) || !isset($campaign_feeds)) {
             $err_message = $err_message != "" ? $err_message . "<br />" : "";
             $err_message .= __('At least one feed URL must be filled.', WPeMatico::TEXTDOMAIN);
         } else {
             foreach ($campaign_feeds as $feed) {
                 $pos = strpos($feed, ' ');
                 // el feed no puede tener espacios en el medio
                 if ($pos === false) {
                     $simplepie = WPeMatico::fetchFeed($feed, true);
                     if ($simplepie->error()) {
                         $err_message = $err_message != "" ? $err_message . "<br />" : "";
                         $err_message .= sprintf(__('Feed %s could not be parsed. (SimplePie said: %s)', WPeMatico::TEXTDOMAIN), '<strong class="coderr">' . $feed . '</strong>', $simplepie->error());
                     }
                 } else {
                     $err_message = $err_message != "" ? $err_message . "<br />" : "";
                     $err_message .= sprintf(__('Feed %s could not be parsed because has an space in url.', WPeMatico::TEXTDOMAIN), '<strong class="coderr">' . $feed . '</strong>');
                 }
             }
         }
     }
     if ($cfg['nonstatic']) {
         $err_message .= NoNStatic::Checkp($_POST, $err_message);
     }
     if ($err_message == "") {
         $err_message = "1";
     }
     //NO ERROR
     die($err_message);
     // Return 1 si OK, else -> error string
 }