aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorDave Tosh <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-03-23 17:30:14 +0000
committerDave Tosh <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-03-23 17:30:14 +0000
commita161b38e65fa698133402f4fb23548242f494018 (patch)
treee75300111195f40f14c2389abddac65db9068da8 /models
downloadelgg-a161b38e65fa698133402f4fb23548242f494018.tar.gz
elgg-a161b38e65fa698133402f4fb23548242f494018.tar.bz2
This videolist plugin shows real promise so we shall work on it for v1.8 then release it back to the community.
Diffstat (limited to 'models')
-rw-r--r--models/lib/class.vimeo.php3583
1 files changed, 3583 insertions, 0 deletions
diff --git a/models/lib/class.vimeo.php b/models/lib/class.vimeo.php
new file mode 100644
index 000000000..03508d148
--- /dev/null
+++ b/models/lib/class.vimeo.php
@@ -0,0 +1,3583 @@
+<?php
+/**
+* SimpleVimeo
+*
+* API Framework for vimeo.com
+* @package SimpleVimeo
+* @author Adrian Rudnik <adrian@periocode.de>
+* @link http://code.google.com/p/php5-simplevimeo/
+*/
+
+/**
+* Enable debug to output raw request and response information
+*/
+
+define('VIMEO_DEBUG_REQUEST', true);
+define('VIMEO_DEBUG_RESPONSE', true);
+
+/**
+* Vimeo base class
+*
+* Provides vital functions to API (access, permission and object handling)
+*
+* @package SimpleVimeo
+* @subpackage Base
+*/
+
+class VimeoBase {
+
+ const PROJECT_NAME = 'php5-simplevimeo';
+
+ /**
+ * Currently logged in user object
+ * @var VimeoUserEntity
+ */
+ private static $oUser = false;
+
+ /**
+ * Currently logged in user permission
+ * @var string
+ */
+ private static $ePermission = false;
+
+ /**
+ * Currently logged in user token
+ * @var string
+ */
+ private static $sToken = false;
+
+ /**
+ * Vimeo Application API key
+ * @var string
+ */
+ private static $sApiKey = '7a223534b3c1d0979a954f93cb746173 ';
+
+ /**
+ * Vimeo Application API secret key
+ * @var string
+ */
+ private static $sApiSecret = 'b11e83370';
+
+ const VIMEO_REST_URL = 'http://vimeo.com/api/rest/';
+ const VIMEO_AUTH_URL = 'http://vimeo.com/services/auth/';
+ const VIMEO_UPLOAD_URL = 'http://vimeo.com/services/upload/';
+ const VIMEO_LOGIN_URL = 'http://vimeo.com/log_in';
+
+ /**
+ * You can choose between the following engines:
+ * executeRemoteCall_FSOCK = PHP5 file_get_content and stream_contexts (bad error handling)
+ * executeRemoteCall_CURL = CURL is used for file transfer (better error handling)
+ */
+ const REQUEST_ENGINE_CURL = 'executeRemoteCall_CURL';
+ const VIDEOPOST_ENGINE_FSOCK = 'executeVideopostCall_CURL';
+
+ const PERMISSION_NONE = false;
+ const PERMISSION_READ = 'read';
+ const PERMISSION_WRITE = 'write';
+ const PERMISSION_DELETE = 'delete';
+
+ const COOKIE_FILE = '/tmp/simplevimeo.cookies';
+
+ const DEBUG_ENABLE = false;
+ const DEBUG_LOGFILE = '/tmp/simplevimeo.debug';
+
+ /**
+ * Debug output function
+ */
+ public static function debug($sTitle, $sContent) {
+ if(self::DEBUG_ENABLE) {
+ $sMessage = 'DEBUG ' . date('Y-m-d H:i:s', time()) . "\n";
+ $sMessage .= 'CONTENT: ' . $sContent . "\n";
+ $sMesasge .= $sContent . "\n\n";
+
+ $fhLog = fopen(self::DEBUG_LOGFILE, 'a+');
+
+ if(!$fhLog) {
+ throw new VimeoBaseException('Debug Logfile "' . self::DEBUG_LOGFILE . '" could not be found or written');
+ } else {
+ fputs($fhLog, $sMessage);
+ fclose($fhLog);
+ }
+ }
+ }
+
+ /**
+ * Update Authentication
+ *
+ * Initializes user and permission information if a token is present.
+ * You can alter this method or skip it if you store user information
+ * and permission in an external database. Then i would recommend a
+ * VimeoAuthRequest::checkLoogin for confirmation.
+ *
+ * @access private
+ * @return void
+ */
+ private function updateAuthentication() {
+ if(self::$sToken && (!self::$ePermission || !self::$oUser)) {
+ $oResponse = VimeoAuthRequest::checkToken(self::$sToken);
+
+ // Parse user
+ self::$oUser = $oResponse->getUser();
+
+ // Parse permission
+ self::$ePermission = $oResponse->getPermission();
+ }
+ }
+
+ /**
+ * Check permission
+ *
+ * Checks the current user permission with the given one. This will be
+ * heavily used by the executeRemoteCall method to ensure the user
+ * will not run into trouble.
+ *
+ * @access public
+ * @param string Needed Permission
+ * @return boolean TRUE if access can be granted, FALSE if permission denied
+ */
+ public function checkPermission($ePermissionNeeded) {
+ // Update authentication data before permission check
+ self::updateAuthentication();
+
+ // Permission DELETE check
+ if($ePermissionNeeded == self::PERMISSION_DELETE && self::$ePermission == self::PERMISSION_DELETE) {
+ return true;
+ }
+
+ // Permission WRITE check
+ if($ePermissionNeeded == self::PERMISSION_WRITE && (self::$ePermission == self::PERMISSION_DELETE || self::$ePermission == self::PERMISSION_WRITE)) {
+ return true;
+ }
+
+ // Permission READ check
+ if($ePermissionNeeded == self::PERMISSION_READ && (self::$ePermission == self::PERMISSION_DELETE || self::$ePermission == self::PERMISSION_WRITE || self::$ePermission == self::PERMISSION_READ)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Proxy for API queries
+ *
+ * Will check permission for the requested API method as well as type
+ * of the object result response or exception. Will call the given
+ * API query handler method (default: executeRemoteCall_CURL) for
+ * the raw connection stuff
+ *
+ * @access public
+ * @param string API method name
+ * @param array Additional arguments that need to be passed to the API
+ * @return VimeoResponse Response object of API corresponding query (for vimeo.test.login you will get VimeoTestLoginResponse object)
+ */
+ public function executeRemoteCall($sMethod, $aArgs = array()) {
+ // Get exception handler
+ $sExceptionClass = VimeoMethod::getExceptionObjectForMethod($sMethod);
+
+ // Check for errors in parameters
+ $sTargetClass = VimeoMethod::getTargetObjectForMethod($sMethod);
+
+ // Get the permission needed to run this method
+ $ePermissionNeeded = VimeoMethod::getPermissionRequirementForMethod($sMethod);
+
+ // If permission requirement is not met refuse to even call the API, safes bandwith for both ends
+ if($ePermissionNeeded != VimeoBase::PERMISSION_NONE && !self::checkPermission($ePermissionNeeded)) {
+ throw new $sExceptionClass('Permission error: "' . VimeoMethod::getPermissionRequirementForMethod($sMethod) . '" needed, "' . self::$ePermission . '" given');
+ }
+
+ // Append method to request arguments
+ $aArgs['method'] = $sMethod;
+
+ // Check that the API query handler method exists and can be called
+ if(!method_exists(__CLASS__, self::REQUEST_ENGINE_CURL)) {
+ throw new VimeoBaseException('Internal error: Request engine handler method not found', 2);
+ }
+
+ // Build up the needed API arguments
+
+ // Set API key
+ $aArgs['api_key'] = self::$sApiKey;
+
+ // Set request format
+ $aArgs['format'] = 'php';
+
+ // Set token
+ if(self::$sToken) $aArgs['auth_token'] = self::$sToken;
+
+ // Generate signature
+ $aArgs['api_sig'] = self::buildSignature($aArgs);
+
+ // Do the request
+ $aResponse = call_user_func(array(__CLASS__, self::REQUEST_ENGINE_CURL), $aArgs);
+
+ // Debug request
+ if(defined('VIMEO_DEBUG_REQUEST') && VIMEO_DEBUG_REQUEST) {
+ self::debug('API request', print_r($aArgs, true));
+ }
+
+ // Debug response
+ if(defined('VIMEO_DEBUG_RESPONSE') && VIMEO_DEBUG_RESPONSE) {
+ self::debug('API response', print_r($aResponse, true));
+ }
+
+ // Transform the result into a result class
+ $oResult = new $sTargetClass($aResponse);
+
+ // Check if request was successfull
+ if(!$oResult->getStatus()) {
+ // If not, create an given exception class for the given method and pass through error code and message
+ throw new $sExceptionClass($oResult->getError()->getMessage(), $oResult->getError()->getCode());
+ }
+
+ // Return the base class object instance for the corresponding API query
+ return $oResult;
+ }
+
+ /**
+ * Execute raw API query with CURL
+ *
+ * Implements CURL API queries in php format response
+ *
+ * @author Ted Roden
+ * @access private
+ * @param array Additional arguments for the API query
+ * @return stdClass Simple PHP object enclosing the API result
+ */
+ private function executeRemoteCall_CURL($aArgs) {
+ $ch = curl_init(self::VIMEO_REST_URL);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs);
+ curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME);
+
+ $data = curl_exec($ch);
+ if(curl_errno($ch))
+ throw new VimeoRequestException('executeRemoteCall_CURL error: ' . curl_error($ch), curl_errno($ch));
+ else {
+ curl_close($ch);
+
+ if(!$data || strlen(trim($data)) < 2) {
+ throw new VimeoRequestException('API request error: No result returned.', 1);
+ }
+ return unserialize($data);
+ }
+ }
+
+ /**
+ * Execute raw API query with FSOCK
+ *
+ * Implements FSOCK API queries in php format response
+ *
+ * @access private
+ * @param array Additional arguemnts for the API query
+ * @return stdClass Simple PHP object enclosing the API result
+ */
+ private function executeRemoteCall_FSOCK($aArgs) {
+ $sResponse = file_get_contents(self::VIMEO_REST_URL, NULL, stream_context_create(array('http' => array('method' => 'POST', 'header'=> 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($aArgs)))));
+ if(!$sResponse || strlen(trim($sResponse)) < 2) {
+ throw new VimeoRequestException('API request error: No result returned.', 1);
+ } else {
+ return unserialize($sResponse);
+ }
+ }
+
+ /**
+ * Proxy for video uploads
+ *
+ * Will call the given video upload handler method (default: executeVideopostCall_FSOCK)
+ * for the raw connection and send stuff
+ *
+ * @access public
+ * @param string Local filename to be transfered
+ * @param string Ticket
+ * @return string VimeoVideosCheckUploadStatusResponse
+ */
+ public function executeVideopostCall($sFilename, $sTicket = false) {
+ // Check that the upload query handler method exists and can be called
+ if(!method_exists(__CLASS__, self::VIDEOPOST_ENGINE_FSOCK)) {
+ throw new VimeoUploadException('Upload error: Videopost engine handler method not found', 1);
+ }
+
+ // If permission requirement is not met refuse to even call the API, safes bandwith for both ends
+ if(!self::checkPermission(VimeoBase::PERMISSION_WRITE)) {
+ throw new VimeoUploadException('Upload error: Missing "write" permission for current user', 2);
+ }
+
+ // Check that the file exists
+ if(!file_exists($sFilename)) {
+ throw new VimeoUploadException('Upload error: Local file does not exists', 3);
+ }
+
+ // Check that the file is readable
+ if(!is_readable($sFilename)) {
+ throw new VimeoUploadException('Upload error: Local file is not readable', 4);
+ }
+
+ // Check that the file size is not larger then the allowed size you can upload
+ $oResponse = VimeoPeopleRequest::getUploadStatus();
+ if(filesize($sFilename) > $oResponse->getRemainingBytes()) {
+ throw new VimeoUploadException('Upload error: Videosize exceeds remaining bytes', 5);
+ }
+
+ // Try to get a upload ticket
+ if(!$sTicket) {
+ $oResponse = VimeoVideosRequest::getUploadTicket();
+ $sTicket = $oResponse->getTicket();
+ }
+
+ // Build up the needed API arguments
+
+ // Set API key
+ $aArgs['api_key'] = self::$sApiKey;
+
+ // Set request format
+ $aArgs['format'] = 'php';
+
+ // Set token
+ if(self::$sToken) $aArgs['auth_token'] = self::$sToken;
+
+ // Set ticket
+ $aArgs['ticket_id'] = $sTicket;
+
+ // Generate signature
+ $aArgs['api_sig'] = self::buildSignature($aArgs);
+
+ // Set file
+ $aArgs['file'] = "@$sFilename";
+
+ // Do the upload
+ $sResponse = call_user_func(array(__CLASS__, self::VIDEOPOST_ENGINE_FSOCK), $aArgs);
+
+ // Call vimeo.videos.checkUploadStatus to prevent abandoned status
+ return VimeoVideosRequest::checkUploadStatus($sTicket);
+ }
+
+ private function executeVideopostCall_CURL($aArgs) {
+ // Disable time limit
+ set_time_limit(0);
+
+ $ch = curl_init(self::VIMEO_UPLOAD_URL);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs);
+ curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME);
+
+ $data = curl_exec($ch);
+ if(curl_errno($ch))
+ throw new VimeoRequestException('executeRemoteCall_CURL error: ' . curl_error($ch), curl_errno($ch));
+ else {
+ curl_close($ch);
+ return unserialize($data);
+ }
+ }
+
+ /**
+ * Build API query signature
+ *
+ * Composes the signature needed to verify its really us doing the query
+ *
+ * @author Ted Roden
+ * @access private
+ * @param array Additional arguments for the API query
+ * @return string MD5 signature
+ */
+ private static function buildSignature($aArgs) {
+ $s = '';
+
+ // sort by name
+ ksort($aArgs);
+
+ foreach($aArgs as $k => $v)
+ $s .= $k . $v;
+
+ return(md5(self::$sApiSecret . $s));
+ }
+
+ /**
+ * Build authentication URL
+ *
+ * Easy way to build a correct authentication url. You can use this
+ * to link the user directly to the correct vimeo authentication page.
+ *
+ * @access public
+ * @param string Permission level you need the user to give you (i.e. VimeoBase::PERMISSION_READ)
+ * @return string URL you can use to directly link the user to the vimeo authentication page
+ */
+ public static function buildAuthenticationUrl($ePermission) {
+
+ $aArgs = array(
+ 'api_key' => self::$sApiKey,
+ 'perms' => $ePermission
+ );
+
+ return self::VIMEO_AUTH_URL . '?api_key=' . self::$sApiKey . '&perms=' . $ePermission . '&api_sig=' . self::buildSignature($aArgs);
+ }
+
+ /**
+ * Get current logged in user token
+ *
+ * @access public
+ * @return string Token or FALSE if not logged in
+ */
+ public static function getToken() {
+ return self::$sToken;
+ }
+
+ /**
+ * Set current logged in user token
+ *
+ * @access public
+ * @param string Authentication token
+ * @return void
+ */
+ public static function setToken($sToken) {
+ self::$sToken = $sToken;
+ }
+
+ /**
+ * Clear current logged in user token
+ *
+ * Removes the current logged in user from the cache. Next API query
+ * will be made as clean, not logged in, request.
+ *
+ * @access public
+ * @return void
+ */
+ public static function clearToken() {
+ self::$sToken = false;
+ }
+
+ /**
+ * Execute a permit request
+ *
+ * ONLY USED IN SITE-MODE, see howto.autologin.php
+ * Permits the current CURL cached user with your vimeo API application
+ *
+ * @access public
+ * @param string Permission
+ * @return string Vimeo Token
+ */
+ public function permit($ePermission) {
+ // Disable time limit
+ set_time_limit(0);
+
+ // Construct login data
+ $aArgs = array(
+ 'api_key' => VimeoBase::$sApiKey,
+ 'perms' => $ePermission,
+ 'accept' => 'yes'
+ );
+ $ch = curl_init(VimeoBase::buildAuthenticationUrl($ePermission));
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs);
+ curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($ch, CURLOPT_COOKIEFILE, VimeoBase::COOKIE_FILE);
+ curl_setopt($ch, CURLOPT_COOKIEJAR, VimeoBase::COOKIE_FILE);
+
+ $sPageContent = curl_exec($ch);
+ if(curl_errno($ch)) {
+ throw new VimeoRequestException('Error: Tried to login failed ' . curl_error($ch), curl_errno($ch));
+ return false;
+ } else {
+ $sResponseUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
+
+ }
+ return $sPageContent;
+ }
+
+ /**
+ * Ensures that the user is logged in
+ *
+ * ONLY USED IN SITE-MODE, see howto.autologin.php
+ * Ensures the site-account is logged in
+ *
+ * @access public
+ * @param string Username
+ * @param string Password
+ * @return boolean TRUE if user could be logged in, FALSE if an error occured (try manually to see error)
+ */
+ public function login($sUsername, $sPassword) {
+ // Disable time limit
+ set_time_limit(0);
+
+ // Construct login data
+ $aArgs = array(
+ 'sign_in[email]' => $sUsername,
+ 'sign_in[password]' => $sPassword,
+ 'redirect' => ''
+ );
+
+ $ch = curl_init(VimeoBase::VIMEO_LOGIN_URL);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs);
+ curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME);
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($ch, CURLOPT_COOKIEFILE, VimeoBase::COOKIE_FILE);
+ curl_setopt($ch, CURLOPT_COOKIEJAR, VimeoBase::COOKIE_FILE);
+
+ $sPageContent = curl_exec($ch);
+
+ if(curl_errno($ch)) {
+ throw new VimeoRequestException('Error: Tried to login failed ' . curl_error($ch), curl_errno($ch));
+ return false;
+ } else {
+ $sResponseUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
+ curl_close($ch);
+ }
+
+ if(stristr($sResponseUrl, 'log_in') !== false) {
+ // Login failed
+ return false;
+ } else {
+ return true;
+ }
+ }
+}
+
+/**
+* Vimeo base exception class
+*
+* Every exception caused by VimeoBase class will be of this type
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoBaseException extends VimeoException {}
+
+/**
+* Vimeo request exception class
+*
+* Exception thrown when requesting the API failed
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoRequestException extends VimeoException {}
+
+/**
+* Vimeo upload exception class
+*
+* Exception thrown when uploading a video failed
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoUploadException extends VimeoException {}
+
+/**
+* Vimeo API method handler class
+*
+* This class will ensure that only functions can be called if the method is implemented
+* and the permission is right (p). It also states what the source (s), result (t) and
+* exception (e) object will be.
+*
+* @package SimpleVimeo
+* @subpackage Base
+*/
+
+class VimeoMethod {
+
+ private static $aMethods = array(
+ // Vimeo Test methods
+ 'vimeo.test.login' => array( 's' => 'VimeoTestRequest',
+ 't' => 'VimeoTestLoginResponse',
+ 'e' => 'VimeoTestLoginException',
+ 'p' => VimeoBase::PERMISSION_READ),
+
+ 'vimeo.test.echo' => array( 's' => 'VimeoTestRequest',
+ 't' => 'VimeoTestEchoResponse',
+ 'e' => 'VimeoTestEchoException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.test.null' => array( 's' => 'VimeoTestRequest',
+ 't' => 'VimeoTestNullResponse',
+ 'e' => 'VimeoTestNullException',
+ 'p' => VimeoBase::PERMISSION_READ),
+
+ // Vimeo Auth methods
+ 'vimeo.auth.getToken' => array( 's' => 'VimeoAuthRequest',
+ 't' => 'VimeoAuthGetTokenResponse',
+ 'e' => 'VimeoAuthGetTokenException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.auth.getFrob' => array( 's' => 'VimeoAuthRequest',
+ 't' => 'VimeoAuthGetFrobResponse',
+ 'e' => 'VimeoAuthGetFrobException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.auth.checkToken' => array( 's' => 'VimeoAuthRequest',
+ 't' => 'VimeoAuthCheckTokenResponse',
+ 'e' => 'VimeoAuthCheckTokenException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ // Vimeo Videos methods
+ 'vimeo.videos.getList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetListResponse',
+ 'e' => 'VimeoVideosGetListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getUploadedList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetUploadedListResponse',
+ 'e' => 'VimeoVideosGetUploadedListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getAppearsInList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetAppearsInListResponse',
+ 'e' => 'VimeoVideosGetAppearsInListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getSubscriptionsList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetSubscriptionsListResponse',
+ 'e' => 'VimeoVideosGetSubscriptionsListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getListByTag' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetListByTagResponse',
+ 'e' => 'VimeoVideosGetListByTagException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getLikeList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetLikeListResponse',
+ 'e' => 'VimeoVideosGetLikeListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getContactsList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetContactsListResponse',
+ 'e' => 'VimeoVideosGetContactsListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getContactsLikeList' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetContactsLikeListResponse',
+ 'e' => 'VimeoVideosGetContactsLikeListException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.search' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosSearchResponse',
+ 'e' => 'VimeoVideosSearchException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getInfo' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetInfoResponse',
+ 'e' => 'VimeoVideosGetInfoException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.videos.getUploadTicket' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosGetUploadTicketResponse',
+ 'e' => 'VimeoVideosGetUploadTicketException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.checkUploadStatus' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosCheckUploadStatusResponse',
+ 'e' => 'VimeoVideosCheckUploadStatusException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.delete' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosDeleteResponse',
+ 'e' => 'VimeoVideosDeleteException',
+ 'p' => VimeoBase::PERMISSION_DELETE),
+
+ 'vimeo.videos.setTitle' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosSetTitleResponse',
+ 'e' => 'VimeoVideosSetTitleException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.setCaption' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosSetCaptionResponse',
+ 'e' => 'VimeoVideosSetCaptionException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.setFavorite' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosSetFavoriteResponse',
+ 'e' => 'VimeoVideosSetFavoriteException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.addTags' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosAddTagsResponse',
+ 'e' => 'VimeoVideosAddTagsException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.removeTag' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosRemoveTagResponse',
+ 'e' => 'VimeoVideosRemoveTagException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.clearTags' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosClearTagsResponse',
+ 'e' => 'VimeoVideosClearTagsException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.videos.setPrivacy' => array( 's' => 'VimeoVideosRequest',
+ 't' => 'VimeoVideosSetPrivacyResponse',
+ 'e' => 'VimeoVideosSetPrivacyException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ // Vimeo People methods
+ 'vimeo.people.findByUserName' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleFindByUsernameResponse',
+ 'e' => 'VimeoPeopleFindByUsernameException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.people.findByEmail' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleFindByEmailResponse',
+ 'e' => 'VimeoPeopleFindByEmailException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.people.getInfo' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleGetInfoResponse',
+ 'e' => 'VimeoPeopleGetInfoException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.people.getPortraitUrl' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleGetPortraitUrlResponse',
+ 'e' => 'VimeoPeopleGetPortraitUrlException',
+ 'p' => VimeoBase::PERMISSION_NONE),
+
+ 'vimeo.people.addContact' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleAddContactResponse',
+ 'e' => 'VimeoPeopleAddContactException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.people.removeContact' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleRemoveContactResponse',
+ 'e' => 'VimeoPeopleRemoveContactException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.people.getUploadStatus' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleGetUploadStatusResponse',
+ 'e' => 'VimeoPeopleGetUploadStatusException',
+ 'p' => VimeoBase::PERMISSION_READ),
+
+ 'vimeo.people.addSubscription' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleAddSubscriptionResponse',
+ 'e' => 'VimeoPeopleAddSubscriptionException',
+ 'p' => VimeoBase::PERMISSION_WRITE),
+
+ 'vimeo.people.removeSubscription' => array( 's' => 'VimeoPeopleRequest',
+ 't' => 'VimeoPeopleRemoveSubscriptionResponse',
+ 'e' => 'VimeoPeopleRemoveSubscriptionException',
+ 'p' => VimeoBase::PERMISSION_WRITE)
+ );
+
+ public static function getSourceObjectForMethod($sMethod) {
+ // Check if the method can be handled
+ self::checkMethod($sMethod);
+
+ return self::$aMethods[$sMethod]['s'];
+ }
+
+ public static function getTargetObjectForMethod($sMethod) {
+ // Check if the method can be handled
+ self::checkMethod($sMethod);
+
+ return self::$aMethods[$sMethod]['t'];
+ }
+
+ public static function getExceptionObjectForMethod($sMethod) {
+ // Check if the method can be handled
+ self::checkMethod($sMethod);
+
+ return self::$aMethods[$sMethod]['e'];
+ }
+
+ public static function getPermissionRequirementForMethod($sMethod) {
+ // Check if the method can be handled
+ self::checkMethod($sMethod);
+
+ return self::$aMethods[$sMethod]['p'];
+ }
+
+ public static function checkMethod($sMethod) {
+ // Check if the method can be handled
+ if(!isset(self::$aMethods[$sMethod])) {
+ throw new VimeoMethodException('Unhandled vimeo method "' . $sMethod . '" given', 2);
+ }
+ }
+}
+
+/**
+* Vimeo method exception class
+*
+* Every exception caused by VimeoMethod class will be of this type
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoMethodException extends Exception {}
+
+/*
+* Abstract class constructs that the whole api stuff will be based on
+*/
+
+/**
+* Vimeo exception class
+*
+* Every exception the whole SimpleVimeo throws will be extended of this base
+* class. You can extend this one to alter all exceptions.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+* @abstract
+*/
+
+abstract class VimeoException extends Exception {}
+
+/**
+* Vimeo array of object handler class
+*
+* This class is for array of object handling. i.e.: An array of video objects.
+* It ensures that you can work with foreach and count without getting into a hassle.
+*
+* @package SimpleVimeo
+* @subpackage Base
+* @abstract
+*/
+
+abstract class VimeoObjectList implements Iterator, Countable {
+ /**
+ * Array for instanced objects
+ * @var array
+ */
+ private $aInstances = array();
+
+ /**
+ * Integer how many results
+ * @var integer
+ */
+ private $iCount = 0;
+
+ /**
+ * Class name
+ * @var string
+ */
+ private $sClassName;
+
+ private $aIDs = array();
+
+ /**
+ * Constructor
+ *
+ * @access public
+ * @return void
+ */
+ public function __construct() {
+ // Parse class name
+ $this->sClassName = str_replace('List', '', get_class($this));
+ }
+
+ /**
+ * Add object to array
+ *
+ * @access public
+ * @param object Object to be added to array
+ * @param integer Array index to be used for the given object
+ * @return void
+ */
+ public function add($oObject, $iID = false) {
+ if($iID !== false) {
+ $this->aInstances[$iID] = $oObject;
+ } else {
+ $this->aInstances[] = $oObject;
+ }
+
+ $this->aIDs[] = $iID;
+
+ $this->iCount++;
+ }
+
+ /**
+ * Returns all array indexes for further parsing
+ *
+ * @access public
+ * @return array Array with object array indexes
+ */
+ public function getAllUniqueIDs() {
+ return $this->getIDs();
+ }
+
+ /**
+ * @ignore
+ */
+ public function rewind() {
+ reset($this->aInstances);
+ }
+
+ /**
+ * @ignore
+ */
+ public function current() {
+ return current($this->aInstances);
+ }
+
+ /**
+ * @ignore
+ */
+ public function key() {
+ return key($this->aInstances);
+ }
+
+ /**
+ * @ignore
+ */
+ public function next() {
+ return next($this->aInstances);
+ }
+
+ /**
+ * @ignore
+ */
+ public function valid() {
+ return $this->current() !== FALSE;
+ }
+
+ /**
+ * @ignore
+ */
+ public function count() {
+ return $this->iCount;
+ }
+}
+
+/**
+* Vimeo request class
+*
+* Every API query collection class will be based on this.
+*
+* @package SimpleVimeo
+* @subpackage ApiRequest
+* @abstract
+*/
+
+abstract class VimeoRequest {}
+
+/**
+* Vimeo response class
+*
+* Every API response class will be based on this. It also handles
+* everytime response variables like if the query was successfull and
+* the generation time.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+* @abstract
+*/
+
+abstract class VimeoResponse {
+ private $bStatus = false;
+ private $fPerformance = false;
+ private $iErrorCode = false;
+ private $oError = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ * You dont need to pass a response if you need to give a hint your coding tool for code completion
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ if($aResponse) {
+ // Parse status
+ $this->setStatus($aResponse->stat);
+
+ // Parse performance
+ $this->fPerformance = (float) $aResponse->generated_in;
+
+ // Parse error information
+ if(!$this->bStatus) {
+ $this->oError = new VimeoErrorEntity($aResponse->err->code, $aResponse->err->msg);
+ }
+ }
+ }
+
+ private function setStatus($sStatus) {
+ if($sStatus === 'ok') {
+ $this->bStatus = true;
+ }
+ }
+
+ public function getStatus() {
+ return $this->bStatus;
+ }
+
+ public function getPerformance() {
+ return $this->fPerformance;
+ }
+
+ public function getError() {
+ return $this->oError;
+ }
+}
+
+/*
+* Entity classes for default instances of users etc. they are always the same
+* and their array of object handlers
+*/
+
+/**
+* Vimeo API error entity class
+*
+* Implements API delivered error entities into an PHP 5 object with given result parameters.
+*
+* @package SimpleVimeo
+* @subpackage Entities
+*/
+
+class VimeoErrorEntity {
+ private $iErrorCode = false;
+ private $sErrorMessage = false;
+
+ public function __construct($iErrorCode, $sErrorMessage) {
+ $this->iErrorCode = $iErrorCode;
+ $this->sErrorMessage = $sErrorMessage;
+ }
+
+ public function getCode() {
+ return $this->iErrorCode;
+ }
+
+ public function getMessage() {
+ return $this->sErrorMessage;
+ }
+}
+
+/**
+* Vimeo API user entity class
+*
+* Implements API delivered user entities into an PHP 5 object with given result parameters.
+*
+* @package SimpleVimeo
+* @subpackage Entities
+*/
+
+class VimeoUserEntity {
+ private $iUserNsId = false;
+ private $iUserId = false;
+ private $sUsername = false;
+ private $sFullname = false;
+
+ // Optional information when vimeo.person.getInfo is called
+ private $sLocation = false;
+ private $sUrl = false;
+ private $iNumberOfContacts = false;
+ private $iNumberOfUploads = false;
+ private $iNumberOfLikes = false;
+ private $iNumberOfVideos = false;
+ private $iNumberOfVideosAppearsIn = false;
+ private $sProfileUrl = false;
+ private $sVideosUrl = false;
+
+ public function __construct($aResponseSnippet) {
+ if(isset($aResponseSnippet->id)) {
+ $this->iUserId = $aResponseSnippet->id;
+ }
+
+ if(isset($aResponseSnippet->nsid)) {
+ $this->iUserNsId = $aResponseSnippet->nsid;
+ }
+
+ if(isset($aResponseSnippet->username)) {
+ $this->sUsername = $aResponseSnippet->username;
+ }
+
+ if(isset($aResponseSnippet->fullname)) {
+ $this->sFullname = $aResponseSnippet->fullname;
+ }
+
+ if(isset($aResponseSnippet->display_name)) {
+ $this->sFullname = $aResponseSnippet->display_name;
+ }
+
+ // Optional stuff
+ if(isset($aResponseSnippet->location)) {
+ $this->sLocation = $aResponseSnippet->location;
+ }
+
+ if(isset($aResponseSnippet->url)) {
+ $this->sUrl = $aResponseSnippet->url;
+ }
+
+ if(isset($aResponseSnippet->number_of_contacts)) {
+ $this->iNumberOfContacts = $aResponseSnippet->number_of_contacts;
+ }
+
+ if(isset($aResponseSnippet->number_of_uploads)) {
+ $this->iNumberOfUploads = $aResponseSnippet->number_of_uploads;
+ }
+
+ if(isset($aResponseSnippet->number_of_likes)) {
+ $this->iNumberOfLikes = $aResponseSnippet->number_of_likes;
+ }
+
+ if(isset($aResponseSnippet->number_of_videos)) {
+ $this->iNumberOfVideos = $aResponseSnippet->number_of_videos;
+ }
+
+ if(isset($aResponseSnippet->number_of_videos_appears_in)) {
+ $this->iNumberOfVideosAppearsIn = $aResponseSnippet->number_of_videos_appears_in;
+ }
+
+ if(isset($aResponseSnippet->profileurl)) {
+ $this->sProfileUrl = $aResponseSnippet->profileurl;
+ }
+
+ if(isset($aResponseSnippet->videosurl)) {
+ $this->sVideosUrl = $aResponseSnippet->videosurl;
+ }
+ }
+
+ public function getNsID() {
+ return $this->iUserNsId;
+ }
+
+ public function getID() {
+ return $this->iUserId;
+ }
+
+ public function getUsername() {
+ return $this->sUsername;
+ }
+
+ public function getFullname() {
+ return $this->sFullname;
+ }
+
+ public function getLocation() {
+ return $this->sLocation;
+ }
+
+ public function getUrl() {
+ return $this->sUrl;
+ }
+
+ public function getNumberOfContacts() {
+ return $this->iNumberOfContacts;
+ }
+
+ public function getNumberOfUploads() {
+ return $this->iNumberOfUploads;
+ }
+
+ public function getNumberOfLikes() {
+ return $this->iNumberOfLikes;
+ }
+
+ public function getNumberOfVideos() {
+ return $this->iNumberOfVideos;
+ }
+
+ public function getNumberOfVideosAppearsIn() {
+ return $this->iNumberOfVideosAppearsIn;
+ }
+
+ public function getProfileUrl() {
+ return $this->sProfileUrl;
+ }
+
+ public function getVideosUrl() {
+ return $this->sVideosUrl;
+ }
+}
+
+/**
+* Vimeo API video entity class
+*
+* Implements API delivered video into an PHP 5 object with given result parameters.
+*
+* @package SimpleVimeo
+* @subpackage Entities
+*/
+
+class VimeoVideoEntity {
+ private $iID = false;
+ private $ePrivacy = false;
+ private $bIsUploading = false;
+ private $bIsTranscoding = false;
+ private $bIsHD = false;
+
+ private $sTitle = false;
+ private $sCaption = false;
+ private $iUploadTime = false;
+ private $iNumberOfLikes = false;
+ private $iNumberOfPlays = false;
+ private $iNumberOfComments = false;
+
+ private $sUrl = false;
+
+ private $iWidth = false;
+ private $iHeight = false;
+ private $oOwner = false;
+
+ private $oTagList = false;
+
+ private $oThumbnailList = false;
+
+ public function __construct($aResponseSnippet = false) {
+ if($aResponseSnippet) {
+ // Set basic information
+ $this->iID = $aResponseSnippet->id;
+ $this->ePrivacy = $aResponseSnippet->privacy;
+ $this->bIsUploading = $aResponseSnippet->is_uploading;
+ $this->bIsTranscoding = $aResponseSnippet->is_transcoding;
+ $this->bIsHD = $aResponseSnippet->is_hd;
+
+ $this->sTitle = $aResponseSnippet->title;
+ $this->sCaption = $aResponseSnippet->caption;
+ $this->iUploadTime = strtotime($aResponseSnippet->upload_date);
+ $this->iNumberOfLikes = (int) $aResponseSnippet->number_of_likes;
+ $this->iNumberOfPlays = (int) $aResponseSnippet->number_of_plays;
+ $this->iNumberOfComments = (int) $aResponseSnippet->number_of_comments;
+
+ $this->sUrl = $aResponseSnippet->urls->url->_content;
+
+ $this->iWidth = (int) $aResponseSnippet->width;
+ $this->iHeight = (int) $aResponseSnippet->height;
+
+ $this->oOwner = new VimeoUserEntity($aResponseSnippet->owner);
+
+ // Parse Tags
+ $this->oTagList = new VimeoTagList();
+ if(isset($aResponseSnippet->tags->tag)) {
+ foreach($aResponseSnippet->tags->tag as $aTagInformation) {
+ $oTag = new VimeoTagEntity($aTagInformation);
+ $this->oTagList->add($oTag, $oTag->getID());
+ }
+ }
+
+ // Parse Thumbnails
+ $this->oThumbnailList = new VimeoThumbnailList();
+ if(isset($aResponseSnippet->thumbnails->thumbnail)) {
+ foreach($aResponseSnippet->thumbnails->thumbnail as $aThumbnailInformation) {
+ $oThumbnail = new VimeoThumbnailEntity($aThumbnailInformation);
+ $this->oThumbnailList->add($oThumbnail, ($oThumbnail->getWidth() * $oThumbnail->getHeight()));
+ }
+ }
+ }
+ }
+
+ public function getID() {
+ return $this->iID;
+ }
+
+ public function getPrivacy() {
+ return $this->ePrivacy;
+ }
+
+ public function isUploading() {
+ return $this->bIsUploading;
+ }
+
+ public function isTranscoding() {
+ return $this->bIsTranscoding;
+ }
+
+ public function isHD() {
+ return $this->bIsHD;
+ }
+
+ public function getTitle() {
+ return $this->sTitle;
+ }
+
+ public function getCaption() {
+ return $this->sCaption;
+ }
+
+ public function getUploadTimestamp() {
+ return $this->iUploadTime;
+ }
+
+ public function getNumberOfLikes() {
+ return (int) $this->iNumberOfLikes;
+ }
+
+ public function getNumberOfPlays() {
+ return (int) $this->iNumberOfPlays;
+ }
+
+ public function getNumberOfComments() {
+ return (int) $this->iNumberOfComments;
+ }
+
+ public function getWidth() {
+ return (int) $this->iWidth;
+ }
+
+ public function getHeight() {
+ return (int) $this->iHeight;
+ }
+
+ public function getOwner() {
+ return $this->oOwner;
+ }
+
+ public function getTags() {
+ return $this->oTagList;
+ }
+
+ public function getUrl() {
+ return $this->sUrl;
+ }
+
+ public function getThumbnails() {
+ return $this->oThumbnailList;
+ }
+}
+
+/**
+* Vimeo API video list class
+*
+* Implements API delivered video list entities into an PHP 5 array of objects.
+*
+* @package SimpleVimeo
+* @subpackage Lists
+*/
+
+class VimeoVideoList extends VimeoObjectList {}
+
+/**
+* Vimeo API tag entity class
+*
+* Implements API delivered tag entities into an PHP 5 object with given result parameters.
+*
+* @package SimpleVimeo
+* @subpackage Entities
+*/
+
+class VimeoTagEntity {
+ private $iID = false;
+ private $sContent = false;
+
+ public function __construct($aResponseSnippet = false) {
+ if($aResponseSnippet) {
+ $this->iID = $aResponseSnippet->id;
+ $this->sContent = $aResponseSnippet->_content;
+ }
+ }
+
+ public function getID() {
+ return $this->iID;
+ }
+
+ public function getTag() {
+ return $this->sContent;
+ }
+}
+
+/**
+* Vimeo API tag list class
+*
+* Implements API delivered tag list entities into an PHP 5 array of objects.
+*
+* @package SimpleVimeo
+* @subpackage Lists
+*/
+
+class VimeoTagList extends VimeoObjectList {}
+
+/**
+* Vimeo API thumbnail entity class
+*
+* Implements API delivered thumbnail entities into an PHP 5 object with given result parameters.
+*
+* @package SimpleVimeo
+* @subpackage Entities
+*/
+
+class VimeoThumbnailEntity {
+ private $iWidth = false;
+ private $iHeight = false;
+ private $sContent = false;
+
+ public function __construct($aResponseSnippet = false) {
+ if($aResponseSnippet) {
+ $this->iWidth = (int) $aResponseSnippet->width;
+ $this->iHeight = (int) $aResponseSnippet->height;
+ $this->sContent = $aResponseSnippet->_content;
+ }
+ }
+
+ public function getWidth() {
+ return (int) $this->iWidth;
+ }
+
+ public function getHeight() {
+ return (int) $this->iHeight;
+ }
+
+ public function getImageContent() {
+ return $this->sContent;
+ }
+}
+
+/**
+* Vimeo API thumbnail list class
+*
+* Implements API delivered thumbnail list entities into an PHP 5 array of objects.
+*
+* @package SimpleVimeo
+* @subpackage Lists
+*/
+
+class VimeoThumbnailList extends VimeoObjectList {
+ public function getByWidth($iWidth, $bAlsoLower = false) {
+ /**
+ * @todo
+ */
+ }
+
+ public function getByHeight($iHeight, $bAlsoLower = false) {
+ /**
+ * @todo
+ */
+ }
+
+ public function getByWidthAndHeight($iWidth, $iHeight, $bAlsoLower = false) {
+ /**
+ * @todo
+ */
+ }
+}
+
+
+/*
+* vimeo.test.* methods
+*/
+
+/**
+* Vimeo Test request handler class
+*
+* Implements all API queries in the vimeo.test.* category
+*
+* @package SimpleVimeo
+* @subpackage ApiRequest
+*/
+
+class VimeoTestRequest extends VimeoRequest {
+
+ /**
+ * Is the user logged in?
+ *
+ * @access public
+ * @return VimeoTestLoginResponse
+ */
+
+ public function login() {
+ return VimeoBase::executeRemoteCall('vimeo.test.login');
+ }
+
+ /**
+ * This will just repeat back any parameters that you send.
+ *
+ * @access public
+ * @param array Additional arguments that need to be passed to the API
+ * @return VimeoTestEchoResponse
+ */
+
+ public function echoback($aArgs) {
+ return VimeoBase::executeRemoteCall('vimeo.test.echo', $aArgs);
+ }
+
+ /**
+ * This is just a simple null/ping test...
+ *
+ * @access public
+ * @return VimeoTestNullResponse
+ */
+
+ public function ping() {
+ return VimeoBase::executeRemoteCall('vimeo.test.null');
+ }
+}
+
+/**
+* Vimeo Test Login response handler class
+*
+* Handles the API response for vimeo.test.login queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoTestLoginResponse extends VimeoResponse {}
+
+/**
+* Vimeo Test Login exception handler class
+*
+* Handles exceptions caused by API response for vimeo.test.login queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoTestLoginException extends VimeoException {}
+
+/**
+* Vimeo Test Echo response handler class
+*
+* Handles the API response for vimeo.test.echo queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoTestEchoResponse extends VimeoResponse {
+ private $aArgs = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->aArgs = get_object_vars($aResponse);
+
+ // Unset default response stuff
+ if(isset($this->aArgs['stat'])) unset($this->aArgs['stat']);
+ if(isset($this->aArgs['generated_in'])) unset($this->aArgs['generated_in']);
+ }
+
+ /**
+ * Returns an array of variables the request bounced back
+ *
+ * @access public
+ * @return array Echoed variables
+ */
+ public function getResponseArray() {
+ return $this->aArgs;
+ }
+}
+
+/**
+* Vimeo Test Echo exception handler class
+*
+* Handles exceptions caused by API response for vimeo.test.echo queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoTestEchoException extends VimeoException {}
+
+/**
+* Vimeo Test Null response handler class
+*
+* Handles the API response for vimeo.test.null queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoTestNullResponse extends VimeoResponse {}
+
+/**
+* Vimeo Test Null exception handler class
+*
+* Handles exceptions caused by API response for vimeo.test.null queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoTestNullException extends VimeoException {}
+
+/*
+* vimeo.auth.* methods
+*/
+
+/**
+* Vimeo Auth request handler class
+*
+* Implements all API queries in the vimeo.auth.* category
+*
+* @package SimpleVimeo
+* @subpackage ApiRequest
+*/
+
+class VimeoAuthRequest extends VimeoRequest {
+
+ /**
+ * Get Token
+ *
+ * @access public
+ * @param string Frob taken from the vimeo authentication
+ * @return VimeoAuthGetTokenResponse
+ */
+ public function getToken($sFrob) {
+ $aArgs = array(
+ 'frob' => $sFrob
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.auth.getToken', $aArgs);
+ }
+
+ /**
+ * Check Token
+ *
+ * Checks the validity of the token. Returns the user associated with it.
+ * Returns the same as vimeo.auth.getToken
+ *
+ * @access public
+ * @param string Authentication token
+ * @return VimeoAuthCheckTokenResponse
+ */
+ public function checkToken($sToken = false) {
+ if(!$sToken) $sToken = VimeoBase::getToken();
+
+ $aArgs = array(
+ 'auth_token' => $sToken
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.auth.checkToken', $aArgs);
+ }
+
+ /**
+ * Get Frob
+ *
+ * This is generally used by desktop applications. If the user doesn't already have
+ * a token, you'll need to get the frob, send it to us at /services/auth. Then,
+ * after the user, clicks continue on your app, you call vimeo.auth.getToken($frob)
+ * and we give you the actual token.
+ *
+ * @access public
+ * @return VimeoAuthGetFrobResponse
+ */
+ public function getFrob() {
+ return VimeoBase::executeRemoteCall('vimeo.auth.getFrob');
+ }
+}
+
+/**
+* Vimeo Auth GetToken response handler class
+*
+* Handles the API response for vimeo.auth.getToken queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoAuthGetTokenResponse extends VimeoResponse {
+
+ private $sToken = false;
+ private $ePermission = false;
+ private $oUser = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse) {
+ parent::__construct($aResponse);
+
+ $this->sToken = $aResponse->auth->token;
+ $this->ePermission = $aResponse->auth->perms;
+
+ $this->oUser = new VimeoUserEntity($aResponse->auth->user);
+ }
+
+ /**
+ * Get token value
+ *
+ * @access public
+ * @return token
+ */
+ public function getToken() {
+ return $this->sToken;
+ }
+
+ /**
+ * Get permission value
+ *
+ * @access public
+ * @return permission
+ */
+
+ public function getPermission() {
+ return $this->ePermission;
+ }
+
+ /**
+ * Get user information object
+ *
+ * @access public
+ * @return VimeoUserEntity
+ */
+ public function getUser() {
+ return $this->oUser;
+ }
+}
+
+/**
+* Vimeo Auth GetToken exception handler class
+*
+* Handles exceptions caused by API response for vimeo.auth.getToken queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoAuthGetTokenException extends Exception {}
+
+/**
+* Vimeo Auth CheckToken response handler class
+*
+* Handles the API response for vimeo.auth.checkToken queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoAuthCheckTokenResponse extends VimeoAuthGetTokenResponse {}
+
+/**
+* Vimeo Auth CheckToken exception handler class
+*
+* Handles exceptions caused by API response for vimeo.auth.checkToken queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoAuthCheckTokenException extends VimeoAuthGetTokenException {}
+
+/**
+* Vimeo Auth GetFrob response handler class
+*
+* Handles the API response for vimeo.auth.getFrob queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoAuthGetFrobResponse extends VimeoResponse {
+ private $sFrob = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse) {
+ parent::__construct($aResponse);
+
+ $this->sFrob = $aResponse->frob;
+ }
+
+ /**
+ * Get Frob value
+ *
+ * @access public
+ * @return frob
+ */
+ public function getFrob() {
+ return $this->sFrob;
+ }
+}
+
+/**
+* Vimeo Auth GetFrob exception handler class
+*
+* Handles exceptions caused by API response for vimeo.auth.getFrob queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoAuthGetFrobException extends VimeoException {}
+
+/**
+* vimeo.videos.* methods
+*/
+
+/**
+* Vimeo Videos request handler class
+*
+* Implements all API queries in the vimeo.videos.* category
+*
+* @package SimpleVimeo
+* @subpackage ApiRequest
+*/
+
+class VimeoVideosRequest extends VimeoRequest {
+
+ const PRIVACY_ANYBODY = 'anybody';
+ const PRIVACY_CONTACTS = 'contacts';
+ const PRIVACY_NOBODY = 'nobody';
+ const PRIVACY_USERS = 'users';
+
+ /**
+ * Search videos!
+ *
+ * If the calling user is logged in, this will return information that calling user
+ * has access to (including private videos). If the calling user is not authenticated,
+ * this will only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param string Search query
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param boolean If TRUE, we'll only search the users contacts. If this is set, you must specifiy a User ID. Otherwise it will be ignored without error.
+ * @param integer ow many results per page?
+ * @return VimeoVideosSearchResponse
+ */
+ public function search($sQuery, $iUserID = false, $bContactsOnly = false, $iItemsPerPage = false) {
+
+ // Pass query (required)
+ $aArgs = array(
+ 'query' => $sQuery
+ );
+
+ // Pass user
+ if($iUserID) {
+ $aArgs['user_id'] = $iUserID;
+ }
+
+ // Pass contacts
+ if($bContactsOnly) {
+ $aArgs['contacts_only'] = $bContactsOnly;
+ }
+
+ // Pass items
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.search', $aArgs);
+ }
+
+ /**
+ * This gets a list of videos for the specified user.
+ *
+ * This is the functionality of "My Videos" or "Ted's Videos." At the moment, this is the same list
+ * as vimeo.videos.getAppearsInList. If you need uploaded or appears in, those are available too.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetListResponse
+ */
+ public function getList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getList', $aArgs);
+ }
+
+ /**
+ * This gets a list of videos uploaded by the specified user.
+ *
+ * If the calling user is logged in, this will return information that calling user has access to
+ * (including private videos). If the calling user is not authenticated, this will only return
+ * public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetUploadedListResponse
+ */
+ public function getUploadedList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getUploadedList', $aArgs);
+ }
+
+ /**
+ * This gets a list of videos that the specified user appears in.
+ *
+ * If the calling user is logged in, this will return information that calling user has access
+ * to (including private videos). If the calling user is not authenticated, this will only return
+ * public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetAppearsInListResponse
+ */
+ public function getAppearsInList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getAppearsInList', $aArgs);
+ }
+
+ /**
+ * This gets a list of subscribed videos for a particular user.
+ *
+ * If the calling user is logged in, this will return information that calling user
+ * has access to (including private videos). If the calling user is not authenticated,
+ * this will only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetSubscriptionsListResponse
+ */
+ public function getSubscriptionsList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getSubscriptionsList', $aArgs);
+ }
+
+ /**
+ * This gets a list of videos by tag
+ *
+ * If you specify a user_id, we'll only get video uploaded by that user with the specified tag.
+ * If the calling user is logged in, this will return information that calling user has access
+ * to (including private videos). If the calling user is not authenticated, this will only
+ * return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param string A single tag: "cat" "new york" "cheese"
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetListByTagResponse
+ */
+ public function getListByTag($sTag, $iUserID = false, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'tag' => $sTag
+ );
+
+ if($iUserID) {
+ $aArgs['user_id'] = $iUserID;
+ }
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getListByTag', $aArgs);
+ }
+
+ /**
+ * Get a list of videos that the specified user likes.
+ *
+ * If the calling user is logged in, this will return information that calling user has
+ * access to (including private videos). If the calling user is not authenticated, this will
+ * only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetLikeListResponse
+ */
+ public function getLikeList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getLikeList', $aArgs);
+ }
+
+ /**
+ * Get a list of videos made by the contacts of a specific user.
+ *
+ * If the calling user is logged in, this will return information that calling user has
+ * access to (including private videos). If the calling user is not authenticated, this will
+ * only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetContactsListResponse
+ */
+ public function getContactsList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getContactsList', $aArgs);
+ }
+
+ /**
+ * Get a list of videos that the specified users contacts like.
+ *
+ * If the calling user is logged in, this will return information that calling user has
+ * access to (including private videos). If the calling user is not authenticated, this will
+ * only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer User ID, this can be the ID number (151542) or the username (ted)
+ * @param integer Which page to show.
+ * @param integer How many results per page?
+ * @return VimeoVideosGetContactsLikeListResponse
+ */
+ public function getContactsLikeList($iUserID, $iPage = false, $iItemsPerPage = false) {
+ // Extend query
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ if($iPage) {
+ $aArgs['page'] = $iPage;
+ }
+
+ if($iItemsPerPage) {
+ $aArgs['per_page'] = $iItemsPerPage;
+ }
+
+ // Please deliver full response so we can handle videos with unified classes
+ $aArgs['fullResponse'] = 1;
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getContactsLikeList', $aArgs);
+ }
+
+ /**
+ * Get all kinds of information about a photo.
+ *
+ * If the calling user is logged in, this will return information that calling user has
+ * access to (including private videos). If the calling user is not authenticated, this will
+ * only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer Video ID
+ * @return VimeoVideosGetInfoResponse
+ */
+ public function getInfo($iVideoID) {
+ // Extend query
+ $aArgs = array(
+ 'video_id' => $iVideoID
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.getInfo', $aArgs);
+ }
+
+ /**
+ * Generate a new upload Ticket.
+ *
+ * You'll need to pass this to the uploader. It's only good for one upload, only good for one user.
+ *
+ * @access public
+ * @return VimeoVideosGetUploadTicketResponse
+ */
+ public function getUploadTicket() {
+ return VimeoBase::executeRemoteCall('vimeo.videos.getUploadTicket');
+ }
+
+ /**
+ * Check the status of an upload started via the API
+ *
+ * This is how you get the video_id of a clip uploaded from the API
+ * If you never call this to check in, we assume it was abandoned and don't process it
+ *
+ * @access public
+ * @param string The ticket number of the upload
+ * @return VimeoVideosCheckUploadStatusResponse
+ */
+ public function checkUploadStatus($sTicket) {
+ $aArgs = array(
+ 'ticket_id' => $sTicket
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.checkUploadStatus', $aArgs);
+ }
+
+ /**
+ * Simple video upload
+ *
+ * @access public
+ * @param string Absolute path to file
+ * @param string Existing ticket or false to generate a new one
+ * @return VimeoVideosCheckUploadStatusResponse
+ */
+ public function doUpload($sFilename, $sTicket = false) {
+ return VimeoBase::executeVideopostCall($sFilename, $sTicket);
+ }
+
+ /**
+ * Delete a video
+ *
+ * The authenticated user must own the video and have granted delete permission
+ *
+ * @access public
+ * @param integer Video ID
+ * @return VimeoVideosDeleteResponse
+ */
+ public function delete($iVideoID) {
+ $aArgs = array(
+ 'video_id' => $iVideoID
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.delete', $aArgs);
+ }
+
+ /**
+ * Set the title of a video (overwrites previous title)
+ *
+ * @access public
+ * @param integer Video ID
+ * @param string Title
+ * @return VimeoVideosSetTitleResponse
+ */
+ public function setTitle($iVideoID, $sVideoTitle) {
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'title' => $sVideoTitle
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.setTitle', $aArgs);
+ }
+
+ /**
+ * Set a new caption for a video (overwrites previous caption)
+ *
+ * @access public
+ * @param integer Video ID
+ * @param string Caption
+ * @return VimeoVideosSetCaptionResponse
+ */
+ public function setCaption($iVideoID, $sVideoCaption) {
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'caption' => $sVideoCaption
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.setCaption', $aArgs);
+ }
+
+ /**
+ * Set a video as a favorite.
+ *
+ * @access public
+ * @param integer Video ID
+ * @param boolean TRUE to favorite, FALSE to return to normal
+ * @return VimeoVideosSetFavoriteResponse
+ */
+ public function setFavorite($iVideoID, $bFavorite = true) {
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'favorite' => (int) $bFavorite
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.setFavorite', $aArgs);
+ }
+
+ /**
+ * Add specified tags to the video, this does not replace any tags.
+ *
+ * Tags should be comma separated lists.
+ *
+ * If the calling user is logged in, this will return information that calling
+ * user has access to (including private videos). If the calling user is not authenticated,
+ * this will only return public information, or a permission denied error if none is available.
+ *
+ * @access public
+ * @param integer Video ID
+ * @param mixed Array with tags or Comma separated list of tags ("lions, tigers, bears")
+ * @return VimeoVideosAddTagsResponse
+ */
+ public function addTags($iVideoID, $mTags) {
+ // Catch array of tags
+ if(is_array($mTags)) {
+ $mTags = implode(',', $mTags);
+ }
+
+ // Prepare arguments
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'tags' => $mTags
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.addTags', $aArgs);
+ }
+
+ /**
+ * Remove specified tag from the video.
+ *
+ * @access public
+ * @param integer Video ID
+ * @param integer Tag ID, this should be a tag id returned by vimeo.videos.getInfo
+ * @return VimeoVideosRemoveTagResponse
+ */
+ public function removeTag($iVideoID, $iTagID) {
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'tag_id' => $iTagID
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.removeTag', $aArgs);
+ }
+
+ /**
+ * Remove ALL of the tags from the video
+ *
+ * @access public
+ * @param integer Video ID
+ * @return VimeoVideosClearTags
+ */
+ public function clearTags($iVideoID) {
+ $aArgs = array(
+ 'video_id' => $iVideoID
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.clearTags', $aArgs);
+ }
+
+ /**
+ * Set the privacy of the video
+ *
+ * @access public
+ * @param integer Video ID
+ * @param integer Privacy enum see VimeoVideosRequest::PRIVACY_*
+ * @param mixed Array or comma separated list of users who can view the video. PRIVACY_USERS must be set.
+ */
+ public function setPrivacy($iVideoID, $ePrivacy, $mUsers = array()) {
+ // Catch array of users
+ if(is_array($mUsers)) {
+ $mUsers = implode(', ', $mUsers);
+ }
+
+ $aArgs = array(
+ 'video_id' => $iVideoID,
+ 'privacy' => $ePrivacy,
+ 'users' => $mUsers
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.videos.setPrivacy', $aArgs);
+ }
+}
+
+/**
+* Vimeo Videos Search response handler class
+*
+* Handles the API response for vimeo.videos.search queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosSearchResponse extends VimeoResponse {
+ private $iPage = false;
+ private $iItemsPerPage = false;
+ private $iOnThisPage = false;
+
+ private $aoVideos = array();
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse) {
+ parent::__construct($aResponse);
+
+ // Parse information
+ if($aResponse && isset($aResponse->videos) && $this->getStatus()) {
+ // Create an video list instance
+ $this->aoVideos = new VimeoVideoList();
+
+ // Page information
+ $this->iPage = $aResponse->videos->page;
+ $this->iItemsPerPage = $aResponse->videos->perpage;
+ $this->iOnThisPage = $aResponse->videos->on_this_page;
+
+ // Parse videos
+ if(isset($aResponse->videos->video)) {
+ // We should check if the subelement is an object (single hit) or an result array (multiple hits)
+ if(is_array($aResponse->videos->video)) {
+ // We got a couple of results
+ $aParseableData = $aResponse->videos->video;
+ } else {
+ // We only got one result
+ $aParseableData = array(
+ 0 => $aResponse->videos->video
+ );
+ }
+
+ // Parse the results
+ foreach($aParseableData as $aVideoInformation) {
+ $oVideo = new VimeoVideoEntity($aVideoInformation);
+
+ $this->aoVideos->add($oVideo, $oVideo->getID());
+ }
+ }
+ }
+ }
+
+ /**
+ * Current page
+ *
+ * @access public
+ * @return integer Page number
+ */
+ public function getPage() {
+ return $this->iPage;
+ }
+
+ /**
+ * Items per page
+ *
+ * @access public
+ * @return integer Items per page
+ */
+
+ public function getItemsPerPage() {
+ return $this->iItemsPerPage;
+ }
+
+ /**
+ * Items on the current page
+ *
+ * @access public
+ * @return integer Items on the current page
+ */
+
+ public function getOnThisPage() {
+ return $this->iOnThisPage;
+ }
+
+ /**
+ * Get array of video objects
+ *
+ * @access public
+ * @return array Video objects
+ */
+
+ public function getVideos() {
+ return $this->aoVideos;
+ }
+}
+
+/**
+* Vimeo Videos Search exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.search queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosSearchException extends VimeoException {}
+
+/**
+* Vimeo Videos GetList response handler class
+*
+* Handles the API response for vimeo.videos.getList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos Search exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.search queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetUploadedList response handler class
+*
+* Handles the API response for vimeo.videos.getUploadedList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetUploadedListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetUploadedList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getUploadedList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetUploadedListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetAppearsInList response handler class
+*
+* Handles the API response for vimeo.videos.getAppearsInList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetAppearsInListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetAppearsInList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getAppearsInList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetAppearsInListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetSubscriptionsList response handler class
+*
+* Handles the API response for vimeo.videos.getSubscriptionsList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetSubscriptionsListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetSubscriptionsList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getSubscriptionsList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetSubscriptionsListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetListByTag response handler class
+*
+* Handles the API response for vimeo.videos.getListByTag queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetListByTagResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetListByTag exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getListByTag queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetListByTagException extends VimeoException {}
+
+/**
+* Vimeo Videos GetLikeList response handler class
+*
+* Handles the API response for vimeo.videos.getLikeList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetLikeListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetLikeList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getLikeList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetLikeListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetContactsList response handler class
+*
+* Handles the API response for vimeo.videos.getContactsList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetContactsListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos GetContactsList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getContactsList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetContactsListException extends VimeoException {}
+
+/**
+* Vimeo Videos getContactsLikeList response handler class
+*
+* Handles the API response for vimeo.videos.getContactsLikeList queries.
+* Currently the response is exact the same as vimeo.videos.search
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosgetContactsLikeListResponse extends VimeoVideosSearchResponse {}
+
+/**
+* Vimeo Videos getContactsLikeList exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getContactsLikeList queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetContactsLikeListException extends VimeoException {}
+
+/**
+* Vimeo Videos GetInfo response handler class
+*
+* Handles the API response for vimeo.videos.getInfo queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetInfoResponse extends VimeoResponse {
+ private $oVideo = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse) {
+ parent::__construct($aResponse);
+
+ $this->oVideo = new VimeoVideoEntity($aResponse->video);
+ }
+
+ /**
+ * Get video information as object
+ *
+ * @access public
+ * @return VimeoVideoEntity
+ */
+ public function getVideo() {
+ return $this->oVideo;
+ }
+}
+
+/**
+* Vimeo Videos GetInfo exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getInfo queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetInfoException extends VimeoException {}
+
+/**
+* Vimeo Videos getUploadTicket response handler class
+*
+* Handles the API response for vimeo.videos.getUploadTicket queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosGetUploadTicketResponse extends VimeoResponse {
+ private $sTicket = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->sTicket = $aResponse->ticket->id;
+ }
+
+ /**
+ * Get generated upload ticket
+ *
+ * @access public
+ * @return string The ticket number of the upload
+ */
+ public function getTicket() {
+ return $this->sTicket;
+ }
+}
+
+/**
+* Vimeo Videos getUploadTicket exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.getUploadTicket queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosGetUploadTicketException extends VimeoException {}
+
+/**
+* Vimeo Videos checkUploadStatus response handler class
+*
+* Handles the API response for vimeo.videos.checkUploadStatus queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosCheckUploadStatusResponse extends VimeoResponse {
+ private $sTicket = false;
+ private $iVideoID = false;
+ private $bIsUploading = false;
+ private $bIsTranscoding = false;
+ private $iTranscodingProgress = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->sTicket = $aResponse->ticket->id;
+ $this->iVideoID = $aResponse->ticket->video_id;
+ $this->bIsUploading = (bool) $aResponse->ticket->is_uploading;
+ $this->bIsTranscoding = (bool) $aResponse->ticket->is_transcoding;
+ $this->iTranscodingProgress = $aResponse->ticket->transcoding_progress;
+ }
+
+ /**
+ * Get Ticket
+ *
+ * @access public
+ * @return string Ticket
+ */
+ public function getTicket() {
+ return $this->sTicket;
+ }
+
+ /**
+ * Get Video ID
+ *
+ * @access public
+ * @return integer Video ID
+ */
+ public function getVideoID() {
+ return $this->iVideoID;
+ }
+
+ /**
+ * Is the video uploading?
+ *
+ * @access public
+ * @return boolean TRUE if uploading, FALSE if not
+ */
+ public function isUploading() {
+ return $this->bIsUploading;
+ }
+
+ /**
+ * Is the video transcoding?
+ *
+ * Also check getTranscodingProgress() for percentage in transcoding
+ *
+ * @access public
+ * @return boolean TRUE if uploading, FALSE if not
+ */
+ public function isTranscoding() {
+ return $this->bIsTranscoding;
+ }
+
+ /**
+ * Get the transcoding progress
+ *
+ * Should only be called if isTranscoding() returns true
+ *
+ * @access public
+ * @return integer Percentage
+ */
+ public function getTranscodingProgress() {
+ return $this->iTranscodingProgress;
+ }
+}
+
+/**
+* Vimeo Videos checkUploadStatus exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.checkUploadStatus queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosCheckUploadStatusException extends VimeoException {}
+
+/**
+* Vimeo Videos delete response handler class
+*
+* Handles the API response for vimeo.videos.delete queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosDeleteResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos delete exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.delete queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosDeleteException extends VimeoException {}
+
+/**
+* Vimeo Videos setTitle response handler class
+*
+* Handles the API response for vimeo.videos.setTitle queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosSetTitleResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos setTitle exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.setTitle queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosSetTitleException extends VimeoException {}
+
+/**
+* Vimeo Videos setCaption response handler class
+*
+* Handles the API response for vimeo.videos.setCaption queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosSetCaptionResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos setCaption exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.setCaption queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosSetCaptionException extends VimeoException {}
+
+/**
+* Vimeo Videos setFavorite response handler class
+*
+* Handles the API response for vimeo.videos.setFavorite queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosSetFavoriteResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos setFavorite exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.setFavorite queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosSetFavoriteException extends VimeoException {}
+
+/**
+* Vimeo Videos addTags response handler class
+*
+* Handles the API response for vimeo.videos.addTags queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosAddTagsResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos addTags exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.addTags queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosAddTagsException extends VimeoException {}
+
+/**
+* Vimeo Videos removeTag response handler class
+*
+* Handles the API response for vimeo.videos.removeTag queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosRemoveTagResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos removeTag exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.removeTag queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosRemoveTagException extends VimeoException {}
+
+/**
+* Vimeo Videos clearTags response handler class
+*
+* Handles the API response for vimeo.videos.clearTags queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosClearTagsResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos clearTags exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.clearTags queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosClearTagsException extends VimeoException {}
+
+/**
+* Vimeo Videos setPrivacy response handler class
+*
+* Handles the API response for vimeo.videos.setPrivacy queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoVideosSetPrivacyResponse extends VimeoResponse {}
+
+/**
+* Vimeo Videos setPrivacy exception handler class
+*
+* Handles exceptions caused by API response for vimeo.videos.setPrivacy queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoVideosSetPrivacyException extends VimeoException {}
+
+/**
+* vimeo.people.* methods
+*/
+
+/**
+* Vimeo People request handler class
+*
+* Implements all API queries in the vimeo.people.* category
+*
+* @package SimpleVimeo
+* @subpackage ApiRequest
+*/
+
+class VimeoPeopleRequest extends VimeoRequest {
+ const TYPE_LIKES = 'likes';
+ const TYPE_APPEARS = 'appears';
+ const TYPE_BOTH = 'likes,appears';
+
+ /**
+ * Get a user id and full/display name with a username.
+ *
+ * You shouldn't need this to get the User ID, we allow you to use the
+ * username instead of User ID everywhere, it's much nicer that way.
+ *
+ * @access public
+ * @param string The username to lookup
+ * @return VimeoPeopleFindByUsernameResponse
+ */
+ public function findByUsername($sUsername) {
+ $aArgs = array(
+ 'username' => $sUsername
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.findByUserName', $aArgs);
+ }
+
+ /**
+ * Get tons of info about a user.
+ *
+ * @access public
+ * @param integer The id of the user we want.
+ * @return VimeoPeopleGetInfoResponse
+ */
+ public function getInfo($iUserID) {
+ $aArgs = array(
+ 'user_id' => $iUserID
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.getInfo', $aArgs);
+ }
+
+ /**
+ * Get a user id and full/display name via an Email Address.
+ *
+ * You shouldn't need to use this to get the User ID, we allow you
+ * to use the username instead of User ID everywhere, it's much nicer that way.
+ *
+ * @access public
+ * @param string Email
+ * @return VimeoPeopleFindByEmailResponse
+ */
+ public function findByEmail($sEmail) {
+ $aArgs = array(
+ 'find_email' => $sEmail
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.findByEmail', $aArgs);
+ }
+
+ /**
+ * Get a portrait URL for a given user/size
+ *
+ * Portraits are square, so you only need to pass one size parameter.
+ * Possible sizes are 20, 24, 28, 30, 40, 50, 60, 75, 100, 140, 278 and 300
+ *
+ * @access public
+ * @param string The username to lookup
+ * @param integer The size of the portrait you you want. (defaults to 75)
+ * @return VimeoPeopleGetPortraitUrlResponse
+ *
+ * @todo Check functionality. Did not work, god knows why
+ */
+ public function getPortraitUrl($sUser, $iSize = false) {
+ $aArgs = array(
+ 'user' => $sUser
+ );
+
+ if($iSize) {
+ $aArgs['size'] = $iSize;
+ }
+
+ return VimeoBase::executeRemoteCall('vimeo.people.getPortraitUrl', $aArgs);
+ }
+
+ /**
+ * Add a user as a contact for the authenticated user.
+ *
+ * If Jim is authenticated, and the $user is sally. Sally will be Jim's contact.
+ * It won't work the other way around. Depending on Sally's settings, this may
+ * send her an email notifying her that Jim Added her as a contact.
+ *
+ * @access public
+ * @param string The user to add. User ID, this can be the ID number (151542) or the username (ted)
+ * @return VimeoPeopleAddContactResponse
+ */
+ public function addContact($sUser) {
+ $aArgs = array(
+ 'user' => $sUser
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.addContact', $aArgs);
+ }
+
+ /**
+ * Remove a user as a contact for the authenticated user.
+ *
+ * @access public
+ * @param string The user to remove. User ID, this can be the ID number (151542) or the username (ted)
+ * @return VimeoPeopleRemoveContactResponse
+ */
+ public function removeContact($sUser) {
+ $aArgs = array(
+ 'user' => $sUser
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.removeContact', $aArgs);
+ }
+
+ /**
+ * This tells you how much space the user has remaining for uploads.
+ *
+ * We provide info in bytes and kilobytes. It probably makes sense for you to use kilobytes.
+ *
+ * @access public
+ * @return VimeoPeopleGetUploadStatusResponse
+ */
+ public function getUploadStatus() {
+ return VimeoBase::executeRemoteCall('vimeo.people.getUploadStatus');
+ }
+
+ /**
+ * Subscribe to a user's videos.
+ *
+ * Just like on the site, you can subscribe to videos a user "appears" in or "likes." Or both!
+ * This will not remove any subscriptions. So if the user is subscribed to a user for both "likes"
+ * and "appears," this will not change anything if you only specify one of them. If you want to
+ * remove one, you must call vimeo.people.removeSubscription().
+ *
+ * @access public
+ * @param string User ID, this can be the ID number (151542) or the username (ted)
+ * @param string with self::TYPE_LIKES or self::TYPE_APPEARS or self::TYPE_BOTH
+ * @return VimeoPeopleAddSubscriptionResponse
+ */
+ public function addSubscription($sUser, $eType = self::TYPE_BOTH) {
+ $aArgs = array(
+ 'user' => $sUser,
+ 'type' => $eType
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.addSubscription', $aArgs);
+ }
+
+ /**
+ * Unsubscribe to a user's videos.
+ *
+ * @access public
+ * @param string User ID, this can be the ID number (151542) or the username (ted)
+ * @param string with self::TYPE_LIKES or self::TYPE_APPEARS or self::TYPE_BOTH
+ * @return VimeoPeopleRemoveSubscriptionResponse
+ */
+ public function removeSubscription($sUser, $eType = self::TYPE_BOTH) {
+ $aArgs = array(
+ 'user' => $sUser,
+ 'type' => $eType
+ );
+
+ return VimeoBase::executeRemoteCall('vimeo.people.removeSubscription', $aArgs);
+ }
+}
+
+/**
+* Vimeo People FindByUserName response handler class
+*
+* Handles the API response for vimeo.people.findByUserName queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleFindByUserNameResponse extends VimeoResponse {
+ private $oUser = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->oUser = new VimeoUserEntity($aResponse->user);
+ }
+
+ /**
+ * Get user entity object
+ *
+ * @access public
+ * @return VimeoUserEntity
+ */
+ public function getUser() {
+ return $this->oUser;
+ }
+}
+
+/**
+* Vimeo People FindByUserName exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.findByUserName queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleFindByUserNameException extends VimeoException {}
+
+/**
+* Vimeo People FindByEmail response handler class
+*
+* Handles the API response for vimeo.people.findByEmail queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleFindByEmailResponse extends VimeoResponse {
+ private $oUser = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->oUser = new VimeoUserEntity($aResponse->user);
+ }
+
+ /**
+ * Get user entity object
+ *
+ * @access public
+ * @return VimeoUserEntity
+ */
+ public function getUser() {
+ return $this->oUser;
+ }
+}
+
+/**
+* Vimeo People FindByEmail exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.findByEmail queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleFindByEmailException extends VimeoException {}
+
+/**
+* Vimeo People GetInfo response handler class
+*
+* Handles the API response for vimeo.people.getInfo queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleGetInfoResponse extends VimeoResponse {
+ private $oUser = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->oUser = new VimeoUserEntity($aResponse->person);
+ }
+
+ /**
+ * Get user entity object
+ *
+ * @access public
+ * @return VimeoUserEntity
+ */
+ public function getUser() {
+ return $this->oUser;
+ }
+}
+
+/**
+* Vimeo People GetInfo exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.getInfo queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleGetInfoException extends VimeoException {}
+
+/**
+* Vimeo People getPortraitUrl response handler class
+*
+* Handles the API response for vimeo.people.getPortraitUrl queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleGetPortraitUrlResponse extends VimeoResponse {}
+
+/**
+* Vimeo People getPortraitUrl exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.getPortraitUrl queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleGetPortraitUrlException extends VimeoException {}
+
+/**
+* Vimeo People addContact response handler class
+*
+* Handles the API response for vimeo.people.addContact queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleAddContactResponse extends VimeoResponse {}
+
+/**
+* Vimeo People addContact exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.addContact queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleAddContactException extends VimeoException {}
+
+/**
+* Vimeo People removeContact response handler class
+*
+* Handles the API response for vimeo.people.removeContact queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleRemoveContactResponse extends VimeoResponse {}
+
+/**
+* Vimeo People removeContact exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.removeContact queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleRemoveContactException extends VimeoException {}
+
+/**
+* Vimeo People getUploadStatus response handler class
+*
+* Handles the API response for vimeo.people.getUploadStatus queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleGetUploadStatusResponse extends VimeoResponse {
+ private $iMaxBytes = false;
+ private $iMaxKBytes = false;
+
+ private $iUsedBytes = false;
+ private $iUsedKBytes = false;
+
+ private $iRemainingBytes = false;
+ private $iRemainingKBytes = false;
+
+ /**
+ * Constructor
+ *
+ * Parses the API response
+ *
+ * @access public
+ * @param stdClass API response
+ * @return void
+ */
+ public function __construct($aResponse = false) {
+ parent::__construct($aResponse);
+
+ $this->iMaxBytes = $aResponse->user->bandwidth->maxbytes;
+ $this->iMaxKBytes = $aResponse->user->bandwidth->maxkb;
+
+ $this->iUsedBytes = $aResponse->user->bandwidth->usedbytes;
+ $this->iUsedKBytes = $aResponse->user->bandwidth->usedkb;
+
+ $this->iRemainingBytes = $aResponse->user->bandwidth->remainingbytes;
+ $this->iRemainingKBytes = $aResponse->user->bandwidth->remainingkb;
+ }
+
+ /**
+ * Get maximum upload for this week in BYTES
+ *
+ * @access public
+ * @return integer Maximum bytes this week
+ */
+ public function getMaxBytes() {
+ return $this->iMaxBytes;
+ }
+
+ /**
+ * Get maximum upload for this week in KILOBYTES
+ *
+ * @access public
+ * @return integer Maximum kbytes this week
+ */
+ public function getMaxKiloBytes() {
+ return $this->iMaxKBytes;
+ }
+
+ /**
+ * Get used upload for this week in BYTES
+ *
+ * @access public
+ * @return integer Used bytes this week
+ */
+ public function getUsedBytes() {
+ return $this->iUsedBytes;
+ }
+
+ /**
+ * Get used upload for this week in KILOBYTES
+ *
+ * @access public
+ * @return integer Used kbytes this week
+ */
+ public function getUsedKiloBytes() {
+ return $this->iUsedKBytes;
+ }
+
+ /**
+ * Get remaining upload for this week in BYTES
+ *
+ * @access public
+ * @return integer Remaining bytes this week
+ */
+ public function getRemainingBytes() {
+ return $this->iRemainingBytes;
+ }
+
+ /**
+ * Get remaining upload for this week in KILOBYTES
+ *
+ * @access public
+ * @return integer Remaining kbytes this week
+ */
+ public function getRemainingKiloBytes() {
+ return $this->iRemainingKBytes;
+ }
+}
+
+/**
+* Vimeo People getUploadStatus exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.getUploadStatus queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleGetUploadStatusException extends VimeoException {}
+
+/**
+* Vimeo People addSubscription response handler class
+*
+* Handles the API response for vimeo.people.addSubscription queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleAddSubscriptionResponse extends VimeoResponse {}
+
+/**
+* Vimeo People addSubscription exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.addSubscription queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleAddSubscriptionException extends VimeoException {}
+
+/**
+* Vimeo People removeSubscription response handler class
+*
+* Handles the API response for vimeo.people.removeSubscription queries.
+*
+* @package SimpleVimeo
+* @subpackage ApiResponse
+*/
+
+class VimeoPeopleRemoveSubscriptionResponse extends VimeoResponse {}
+
+/**
+* Vimeo People removeSubscription exception handler class
+*
+* Handles exceptions caused by API response for vimeo.people.removeSubscription queries.
+*
+* @package SimpleVimeo
+* @subpackage Exceptions
+*/
+
+class VimeoPeopleRemoveSubscriptionException extends VimeoException {}
+
+?>