mirror of
https://github.com/KevinMidboe/rohnenedre.git
synced 2026-01-01 15:06:31 +00:00
Initial commit. State 04.2021.
This commit is contained in:
@@ -0,0 +1,343 @@
|
||||
<?php
|
||||
|
||||
class AWeberEntry extends AWeberResponse {
|
||||
|
||||
/**
|
||||
* @var array Holds list of data keys that are not publicly accessible
|
||||
*/
|
||||
protected $_privateData = array(
|
||||
'resource_type_link',
|
||||
'http_etag',
|
||||
);
|
||||
|
||||
/**
|
||||
* @var array Stores local modifications that have not been saved
|
||||
*/
|
||||
protected $_localDiff = array();
|
||||
|
||||
/**
|
||||
* @var array Holds AWeberCollection objects already instantiated, keyed by
|
||||
* their resource name (plural)
|
||||
*/
|
||||
protected $_collections = array();
|
||||
|
||||
/**
|
||||
* attrs
|
||||
*
|
||||
* Provides a simple array of all the available data (and collections) available
|
||||
* in this entry.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function attrs() {
|
||||
$attrs = array();
|
||||
foreach ($this->data as $key => $value) {
|
||||
if (!in_array($key, $this->_privateData) && !strpos($key, 'collection_link')) {
|
||||
$attrs[$key] = $value;
|
||||
}
|
||||
}
|
||||
if (!empty(AWeberAPI::$_collectionMap[$this->type])) {
|
||||
foreach (AWeberAPI::$_collectionMap[$this->type] as $child) {
|
||||
$attrs[$child] = 'collection';
|
||||
}
|
||||
}
|
||||
return $attrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* _type
|
||||
*
|
||||
* Used to pull the name of this resource from its resource_type_link
|
||||
* @access protected
|
||||
* @return String
|
||||
*/
|
||||
protected function _type() {
|
||||
if (empty($this->type)) {
|
||||
$typeLink = $this->data['resource_type_link'];
|
||||
if (empty($typeLink)) return null;
|
||||
list($url, $type) = explode('#', $typeLink);
|
||||
$this->type = $type;
|
||||
}
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* delete
|
||||
*
|
||||
* Delete this object from the AWeber system. May not be supported
|
||||
* by all entry types.
|
||||
* @access public
|
||||
* @return boolean Returns true if it is successfully deleted, false
|
||||
* if the delete request failed.
|
||||
*/
|
||||
public function delete() {
|
||||
$this->adapter->request('DELETE', $this->url, array(), array('return' => 'status'));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* move
|
||||
*
|
||||
* Invoke the API method to MOVE an entry resource to a different List.
|
||||
*
|
||||
* Note: Not all entry resources are eligible to be moved, please
|
||||
* refer to the AWeber API Reference Documentation at
|
||||
* https://labs.aweber.com/docs/reference/1.0 for more
|
||||
* details on which entry resources may be moved and if there
|
||||
* are any requirements for moving that resource.
|
||||
*
|
||||
* @access public
|
||||
* @param AWeberEntry(List) List to move Resource (this) too.
|
||||
* @return mixed AWeberEntry(Resource) Resource created on List ($list)
|
||||
* or False if resource was not created.
|
||||
*/
|
||||
public function move($list, $last_followup_message_number_sent=NULL) {
|
||||
# Move Resource
|
||||
$params = array(
|
||||
'ws.op' => 'move',
|
||||
'list_link' => $list->self_link
|
||||
);
|
||||
if (isset($last_followup_message_number_sent)) {
|
||||
$params['last_followup_message_number_sent'] = $last_followup_message_number_sent;
|
||||
}
|
||||
|
||||
$data = $this->adapter->request('POST', $this->url, $params, array('return' => 'headers'));
|
||||
|
||||
# Return new Resource
|
||||
$url = $data['Location'];
|
||||
$resource_data = $this->adapter->request('GET', $url);
|
||||
return new AWeberEntry($resource_data, $url, $this->adapter);
|
||||
}
|
||||
|
||||
/**
|
||||
* save
|
||||
*
|
||||
* Saves the current state of this object if it has been changed.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function save() {
|
||||
if (!empty($this->_localDiff)) {
|
||||
$data = $this->adapter->request('PATCH', $this->url, $this->_localDiff, array('return' => 'status'));
|
||||
}
|
||||
$this->_localDiff = array();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* __get
|
||||
*
|
||||
* Used to look up items in data, and special properties like type and
|
||||
* child collections dynamically.
|
||||
*
|
||||
* @param String $value Attribute being accessed
|
||||
* @access public
|
||||
* @throws AWeberResourceNotImplemented
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($value) {
|
||||
if (in_array($value, $this->_privateData)) {
|
||||
return null;
|
||||
}
|
||||
if (!empty($this->data) && array_key_exists($value, $this->data)) {
|
||||
if (is_array($this->data[$value])) {
|
||||
$array = new AWeberEntryDataArray($this->data[$value], $value, $this);
|
||||
$this->data[$value] = $array;
|
||||
}
|
||||
return $this->data[$value];
|
||||
}
|
||||
if ($value == 'type') return $this->_type();
|
||||
if ($this->_isChildCollection($value)) {
|
||||
return $this->_getCollection($value);
|
||||
}
|
||||
throw new AWeberResourceNotImplemented($this, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* __set
|
||||
*
|
||||
* If the key provided is part of the data array, then update it in the
|
||||
* data array. Otherwise, use the default __set() behavior.
|
||||
*
|
||||
* @param mixed $key Key of the attr being set
|
||||
* @param mixed $value Value being set to the $key attr
|
||||
* @access public
|
||||
*/
|
||||
public function __set($key, $value) {
|
||||
if (array_key_exists($key, $this->data)) {
|
||||
$this->_localDiff[$key] = $value;
|
||||
return $this->data[$key] = $value;
|
||||
} else {
|
||||
return parent::__set($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* findSubscribers
|
||||
*
|
||||
* Looks through all lists for subscribers
|
||||
* that match the given filter
|
||||
* @access public
|
||||
* @return AWeberCollection
|
||||
*/
|
||||
public function findSubscribers($search_data) {
|
||||
$this->_methodFor(array('account'));
|
||||
$params = array_merge($search_data, array('ws.op' => 'findSubscribers'));
|
||||
$data = $this->adapter->request('GET', $this->url, $params);
|
||||
|
||||
$ts_params = array_merge($params, array('ws.show' => 'total_size'));
|
||||
$total_size = $this->adapter->request('GET', $this->url, $ts_params, array('return' => 'integer'));
|
||||
|
||||
# return collection
|
||||
$data['total_size'] = $total_size;
|
||||
$url = $this->url . '?'. http_build_query($params);
|
||||
return new AWeberCollection($data, $url, $this->adapter);
|
||||
}
|
||||
|
||||
/**
|
||||
* getActivity
|
||||
*
|
||||
* Returns analytics activity for a given subscriber
|
||||
* @access public
|
||||
* @return AWeberCollection
|
||||
*/
|
||||
public function getActivity() {
|
||||
$this->_methodFor(array('subscriber'));
|
||||
$params = array('ws.op' => 'getActivity');
|
||||
$data = $this->adapter->request('GET', $this->url, $params);
|
||||
|
||||
$ts_params = array_merge($params, array('ws.show' => 'total_size'));
|
||||
$total_size = $this->adapter->request('GET', $this->url, $ts_params, array('return' => 'integer'));
|
||||
|
||||
# return collection
|
||||
$data['total_size'] = $total_size;
|
||||
$url = $this->url . '?'. http_build_query($params);
|
||||
return new AWeberCollection($data, $url, $this->adapter);
|
||||
}
|
||||
|
||||
/** getParentEntry
|
||||
*
|
||||
* Gets an entry's parent entry
|
||||
* Returns NULL if no parent entry
|
||||
*/
|
||||
public function getParentEntry(){
|
||||
$url_parts = explode('/', $this->url);
|
||||
$size = count($url_parts);
|
||||
|
||||
#Remove entry id and slash from end of url
|
||||
$url = substr($this->url, 0, -strlen($url_parts[$size-1])-1);
|
||||
|
||||
#Remove collection name and slash from end of url
|
||||
$url = substr($url, 0, -strlen($url_parts[$size-2])-1);
|
||||
|
||||
try {
|
||||
$data = $this->adapter->request('GET', $url);
|
||||
return new AWeberEntry($data, $url, $this->adapter);
|
||||
} catch (Exception $e) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getWebForms
|
||||
*
|
||||
* Gets all web_forms for this account
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getWebForms() {
|
||||
$this->_methodFor(array('account'));
|
||||
$data = $this->adapter->request('GET', $this->url.'?ws.op=getWebForms', array(),
|
||||
array('allow_empty' => true));
|
||||
return $this->_parseNamedOperation($data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* getWebFormSplitTests
|
||||
*
|
||||
* Gets all web_form split tests for this account
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getWebFormSplitTests() {
|
||||
$this->_methodFor(array('account'));
|
||||
$data = $this->adapter->request('GET', $this->url.'?ws.op=getWebFormSplitTests', array(),
|
||||
array('allow_empty' => true));
|
||||
return $this->_parseNamedOperation($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* _parseNamedOperation
|
||||
*
|
||||
* Turns a dumb array of json into an array of Entries. This is NOT
|
||||
* a collection, but simply an array of entries, as returned from a
|
||||
* named operation.
|
||||
*
|
||||
* @param array $data
|
||||
* @access protected
|
||||
* @return array
|
||||
*/
|
||||
protected function _parseNamedOperation($data) {
|
||||
$results = array();
|
||||
foreach($data as $entryData) {
|
||||
$results[] = new AWeberEntry($entryData, str_replace($this->adapter->app->getBaseUri(), '',
|
||||
$entryData['self_link']), $this->adapter);
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* _methodFor
|
||||
*
|
||||
* Raises exception if $this->type is not in array entryTypes.
|
||||
* Used to restrict methods to specific entry type(s).
|
||||
* @param mixed $entryTypes Array of entry types as strings, ie array('account')
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
protected function _methodFor($entryTypes) {
|
||||
if (in_array($this->type, $entryTypes)) return true;
|
||||
throw new AWeberMethodNotImplemented($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* _getCollection
|
||||
*
|
||||
* Returns the AWeberCollection object representing the given
|
||||
* collection name, relative to this entry.
|
||||
*
|
||||
* @param String $value The name of the sub-collection
|
||||
* @access protected
|
||||
* @return AWeberCollection
|
||||
*/
|
||||
protected function _getCollection($value) {
|
||||
if (empty($this->_collections[$value])) {
|
||||
$url = "{$this->url}/{$value}";
|
||||
$data = $this->adapter->request('GET', $url);
|
||||
$this->_collections[$value] = new AWeberCollection($data, $url, $this->adapter);
|
||||
}
|
||||
return $this->_collections[$value];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* _isChildCollection
|
||||
*
|
||||
* Is the given name of a collection a child collection of this entry?
|
||||
*
|
||||
* @param String $value The name of the collection we are looking for
|
||||
* @access protected
|
||||
* @return boolean
|
||||
* @throws AWeberResourceNotImplemented
|
||||
*/
|
||||
protected function _isChildCollection($value) {
|
||||
$this->_type();
|
||||
if (!empty(AWeberAPI::$_collectionMap[$this->type]) &&
|
||||
in_array($value, AWeberAPI::$_collectionMap[$this->type])) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user