Skip to content

Commit

Permalink
[jan] Add importing of IMC (iCalendar/vCard) data from a URL.
Browse files Browse the repository at this point in the history
  • Loading branch information
yunosh committed Jun 18, 2014
1 parent a8bddc6 commit 5f271d4
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 12 deletions.
7 changes: 7 additions & 0 deletions framework/Data/lib/Horde/Data.php
Expand Up @@ -70,6 +70,13 @@ class Horde_Data
*/
const IMPORT_DATA = 12;

/**
* Import URL.
*
* @since Horde_Data 2.1.0
*/
const IMPORT_URL = 13;


/**
* Export generic CSV data.
Expand Down
43 changes: 39 additions & 4 deletions framework/Data/lib/Horde/Data/Base.php
Expand Up @@ -28,6 +28,13 @@ abstract class Horde_Data_Base
*/
protected $_browser;

/**
* HTTP client object.
*
* @var Horde_Http_Client
*/
protected $_http;

/**
* Cleanup callback function.
*
Expand Down Expand Up @@ -69,22 +76,23 @@ abstract class Horde_Data_Base
* @param Horde_Data_Storage A storage object.
* @param array $params Optional parameters:
* - browser: (Horde_Browser) A browser object.
* - http: (Horde_Http_Client) A HTTP client object.
* - cleanup: (callback) A callback to call at cleanup time.
* - vars: (Horde_Variables) Form data.
*/
public function __construct(Horde_Data_Storage $storage,
array $params = array())
{
$this->storage = $storage;

if (isset($params['browser'])) {
$this->_browser = $params['browser'];
}

if (isset($params['http'])) {
$this->_http = $params['http'];
}
if (isset($params['cleanup']) && is_callable($params['cleanup'])) {
$this->_cleanupCallback = $params['cleanup'];
}

$this->_vars = isset($params['vars'])
? $params['vars']
: Horde_Variables::getDefaultVariables();
Expand All @@ -103,14 +111,41 @@ public function importData($text)
abstract public function exportData($data, $method = 'REQUEST');

/**
* Stub to import a file.
* Imports a file.
*/
public function importFile($filename, $header = false)
{
$data = file_get_contents($filename);
return $this->importData($data, $header);
}

/**
* Imports a URL.
*
* @since 2.1.0
*/
public function importUrl($url, $header = false)
{
if (!isset($this->_http)) {
throw new LogicException('Missing http parameter.');
}

try {
$response = $this->_http->get($url);
if ($response->code != 200) {
throw new Horde_Data_Exception(sprintf(
Horde_Data_Translation::t("URL %s not found"),
$url
));
}
$data = $response->getBody();
} catch (Horde_Http_Exception $e) {
throw new Horde_Data_Exception($e);
}

return $this->importData($data, $header);
}

/**
* Stub to export data to a file.
*/
Expand Down
5 changes: 5 additions & 0 deletions framework/Data/lib/Horde/Data/Imc.php
Expand Up @@ -95,6 +95,11 @@ public function nextStep($action, array $param = array())
parent::nextStep($action, $param);
$this->importFile($_FILES['import_file']['tmp_name']);
return $this->_iCal->getComponents();

case Horde_Data::IMPORT_URL:
parent::nextStep($action, $param);
$this->importUrl($this->_vars->import_url);
return $this->_iCal->getComponents();
}

return parent::nextStep($action, $param);
Expand Down
16 changes: 8 additions & 8 deletions framework/Data/package.xml
Expand Up @@ -22,18 +22,18 @@
<email>chuck@horde.org</email>
<active>yes</active>
</developer>
<date>2014-05-21</date>
<date>2014-06-18</date>
<version>
<release>2.0.6</release>
<api>2.0.0</api>
<release>2.1.0</release>
<api>2.1.0</api>
</version>
<stability>
<release>stable</release>
<api>stable</api>
</stability>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
*
* [jan] Add importing of IMC (iCalendar/vCard) data from a URL.
</notes>
<contents>
<dir baseinstalldir="/" name="/">
Expand Down Expand Up @@ -951,15 +951,15 @@ Converted to package.xml 2.0 for pear.horde.org
</release>
<release>
<version>
<release>2.0.6</release>
<api>2.0.0</api></version>
<release>2.1.0</release>
<api>2.1.0</api></version>
<stability>
<release>stable</release>
<api>stable</api></stability>
<date>2014-05-21</date>
<date>2014-06-18</date>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
*
* [jan] Add importing of IMC (iCalendar/vCard) data from a URL.
</notes>
</release>
</changelog>
Expand Down

0 comments on commit 5f271d4

Please sign in to comment.