| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Contains the FeedsFetcher and related classes.
 
-  */
 
- /**
 
-  * Base class for all fetcher results.
 
-  */
 
- class FeedsFetcherResult extends FeedsResult {
 
-   protected $raw;
 
-   protected $file_path;
 
-   /**
 
-    * Constructor.
 
-    */
 
-   public function __construct($raw) {
 
-     $this->raw = $raw;
 
-   }
 
-   /**
 
-    * @return
 
-    *   The raw content from the source as a string.
 
-    *
 
-    * @throws Exception
 
-    *   Extending classes MAY throw an exception if a problem occurred.
 
-    */
 
-   public function getRaw() {
 
-     return $this->sanitizeRaw($this->raw);
 
-   }
 
-   /**
 
-    * Get a path to a temporary file containing the resource provided by the
 
-    * fetcher.
 
-    *
 
-    * File will be deleted after DRUPAL_MAXIMUM_TEMP_FILE_AGE.
 
-    *
 
-    * @return
 
-    *   A path to a file containing the raw content as a source.
 
-    *
 
-    * @throws Exception
 
-    *   If an unexpected problem occurred.
 
-    */
 
-   public function getFilePath() {
 
-     if (!isset($this->file_path)) {
 
-       $destination = 'public://feeds';
 
-       if (!file_prepare_directory($destination, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
 
-         throw new Exception(t('Feeds directory either cannot be created or is not writable.'));
 
-       }
 
-       $this->file_path = FALSE;
 
-       if ($file = file_save_data($this->getRaw(), $destination . '/' . get_class($this) . REQUEST_TIME)) {
 
-         $file->status = 0;
 
-         file_save($file);
 
-         $this->file_path = $file->uri;
 
-       }
 
-       else {
 
-         throw new Exception(t('Cannot write content to %dest', array('%dest' => $destination)));
 
-       }
 
-     }
 
-     return $this->sanitizeFile($this->file_path);
 
-   }
 
-   /**
 
-    * Sanitize the raw content string. Currently supported sanitizations:
 
-    *
 
-    * - Remove BOM header from UTF-8 files.
 
-    *
 
-    * @param string $raw
 
-    *   The raw content string to be sanitized.
 
-    * @return
 
-    *   The sanitized content as a string.
 
-    */
 
-   public function sanitizeRaw($raw) {
 
-     if (substr($raw, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
 
-       $raw = substr($raw, 3);
 
-     }
 
-     return $raw;
 
-   }
 
-   /**
 
-    * Sanitize the file in place. Currently supported sanitizations:
 
-    *
 
-    * - Remove BOM header from UTF-8 files.
 
-    *
 
-    * @param string $filepath
 
-    *   The file path of the file to be sanitized.
 
-    * @return
 
-    *   The file path of the sanitized file.
 
-    */
 
-   public function sanitizeFile($filepath) {
 
-     $handle = fopen($filepath, 'r');
 
-     $line = fgets($handle);
 
-     fclose($handle);
 
-     // If BOM header is present, read entire contents of file and overwrite
 
-     // the file with corrected contents.
 
-     if (substr($line, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) {
 
-       $contents = file_get_contents($filepath);
 
-       $contents = substr($contents, 3);
 
-       $status = file_put_contents($filepath, $contents);
 
-       if ($status === FALSE) {
 
-         throw new Exception(t('File @filepath is not writeable.', array('@filepath' => $filepath)));
 
-       }
 
-     }
 
-     return $filepath;
 
-   }
 
- }
 
- /**
 
-  * Abstract class, defines shared functionality between fetchers.
 
-  *
 
-  * Implements FeedsSourceInfoInterface to expose source forms to Feeds.
 
-  */
 
- abstract class FeedsFetcher extends FeedsPlugin {
 
-   /**
 
-    * Implements FeedsPlugin::pluginType().
 
-    */
 
-   public function pluginType() {
 
-     return 'fetcher';
 
-   }
 
-   /**
 
-    * Fetch content from a source and return it.
 
-    *
 
-    * Every class that extends FeedsFetcher must implement this method.
 
-    *
 
-    * @param $source
 
-    *   Source value as entered by user through sourceForm().
 
-    *
 
-    * @return
 
-    *   A FeedsFetcherResult object.
 
-    */
 
-   public abstract function fetch(FeedsSource $source);
 
-   /**
 
-    * Clear all caches for results for given source.
 
-    *
 
-    * @param FeedsSource $source
 
-    *   Source information for this expiry. Implementers can choose to only clear
 
-    *   caches pertaining to this source.
 
-    */
 
-   public function clear(FeedsSource $source) {}
 
-   /**
 
-    * Request handler invoked if callback URL is requested. Locked down by
 
-    * default. For a example usage see FeedsHTTPFetcher.
 
-    *
 
-    * Note: this method may exit the script.
 
-    *
 
-    * @return
 
-    *   A string to be returned to the client.
 
-    */
 
-   public function request($feed_nid = 0) {
 
-     drupal_access_denied();
 
-   }
 
-   /**
 
-    * Construct a path for a concrete fetcher/source combination. The result of
 
-    * this method matches up with the general path definition in
 
-    * FeedsFetcher::menuItem(). For example usage look at FeedsHTTPFetcher.
 
-    *
 
-    * @return
 
-    *   Path for this fetcher/source combination.
 
-    */
 
-   public function path($feed_nid = 0) {
 
-     $id = urlencode($this->id);
 
-     if ($feed_nid && is_numeric($feed_nid)) {
 
-       return "feeds/importer/$id/$feed_nid";
 
-     }
 
-     return "feeds/importer/$id";
 
-   }
 
-   /**
 
-    * Menu item definition for fetchers of this class. Note how the path
 
-    * component in the item definition matches the return value of
 
-    * FeedsFetcher::path();
 
-    *
 
-    * Requests to this menu item will be routed to FeedsFetcher::request().
 
-    *
 
-    * @return
 
-    *   An array where the key is the Drupal menu item path and the value is
 
-    *   a valid Drupal menu item definition.
 
-    */
 
-   public function menuItem() {
 
-     return array(
 
-       'feeds/importer/%feeds_importer' => array(
 
-         'page callback' => 'feeds_fetcher_callback',
 
-         'page arguments' => array(2, 3),
 
-         'access callback' => TRUE,
 
-         'file' => 'feeds.pages.inc',
 
-         'type' => MENU_CALLBACK,
 
-         ),
 
-       );
 
-   }
 
-   /**
 
-    * Subscribe to a source. Only implement if fetcher requires subscription.
 
-    *
 
-    * @param FeedsSource $source
 
-    *   Source information for this subscription.
 
-    */
 
-   public function subscribe(FeedsSource $source) {}
 
-   /**
 
-    * Unsubscribe from a source. Only implement if fetcher requires subscription.
 
-    *
 
-    * @param FeedsSource $source
 
-    *   Source information for unsubscribing.
 
-    */
 
-   public function unsubscribe(FeedsSource $source) {}
 
-   /**
 
-    * Override import period settings. This can be used to force a certain import
 
-    * interval.
 
-    *
 
-    * @param $source
 
-    *   A FeedsSource object.
 
-    *
 
-    * @return
 
-    *   A time span in seconds if periodic import should be overridden for given
 
-    *   $source, NULL otherwise.
 
-    */
 
-   public function importPeriod(FeedsSource $source) {}
 
- }
 
 
  |