/system/plugins/viddlersilo/viddlersilo.plugin.php
PHP | 1045 lines | 563 code | 125 blank | 357 comment | 89 complexity | 923ae6ecc9da3e459d152a83bf0c5c3d MD5 | raw file
Possible License(s): Apache-2.0
- <?php
- /*
- #######################################################
- # Viddler API / PHP Wrapper
- # By: Colin Devroe | cdevroe@viddler.com
- #
- # Docs: http://wiki.developers.viddler.com/index.php/Phpviddler
- #
- # License(s): Licensed under:
- # MIT (MIT-LICENSE.txt)
- #
- # Third-party code:
- # XML Library by Keith Devens
- # xmlparser.php
- #
- # Version 0.3
- ########################################################
- */
- class Phpviddler {
- var $apiKey = '01172c643b9743485249534a4441564953151';
- var $viddlerREST = 'http://api.viddler.com/rest/v1/'; // REST URL Version 1.0
- var $xml; // Raw XML returned by API
- var $response; // Array of results
- var $parser = false; // Use the included XML parser? Default: true.
- // Optional
- var $uploaddir = false; // Used for temporary upload directory.
- /*########## User functions ########### */
- /* viddler.users.auth
- / accepts: $userInfo = array
- / returns: array - sessionid (if not asking for record_token)
- / returns: array - sessionid and recordtoken (if asking for record token)
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.users.auth
- */
- function user_authenticate($userInfo) {
- $args = '';
- $args = $this->buildArguments($userInfo); // Arguments as string
- //var_dump( $args ); exit;
- $xml = $this->sendRequest('viddler.users.auth',$args); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- // Return record token too? Or just session id?
- if (!$args['record_token']) {
- return $response['auth']['sessionid'];
- } else {
- return $response['auth'];
- }
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.users.getProfile
- / accepts: $username = string
- / returns: array - user's profile
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.users.getProfile
- */
- function user_profile($username) {
- $xml = $this->sendRequest('viddler.users.getProfile','user='.$username); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['user'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.users.setOptions
- / accepts: $options = array
- / returns: string - number of options updated
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.users.setOptions
- */
- function user_setoptions($options) {
- $args = '';
- $args = $this->buildArguments($options); // Arguments as string
- $xml = $this->sendRequest('viddler.users.setOptions',$args); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['user'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /*########## Video functions ########### */
- /* viddler.videos.upload
- / requires: POST HTTP Method
- / accepts: $videoInfo = array
- / returns: array - info about video uploaded
- doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.upload
- */
- function video_upload($videoInfo) {
- $args = '';
- $args = $this->buildArguments($videoInfo,'array'); // Arguments as array
- $xml = $this->sendRequest('viddler.videos.upload',$args); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- // Deletes the uploaded file from the server
- //if ($this->uploaddir) {
- // unlink($this->uploaddir.$_FILES['file']['name']);
- //}
- if ($response['error']) {
- return $response;
- } else {
- return $response['video'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.videos.getRecordToken
- / accepts: $sessionid = string
- / returns: string - token needed for recording with webcam
- }
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getRecordToken
- / Instructions for use: http://wiki.developers.viddler.com/index.php/Record_With_Webcam_API
- */
- function video_getrecordtoken($sessionid) {
- $xml = $this->sendRequest('viddler.videos.getRecordToken','sessionid='.$sessionid); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['record_token'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* Not a method...
- / accepts: $token = string
- / returns: string - html for recorder embed with token included.
- }
- / doc: None.
- */
- function video_getrecordembed($token) {
- if (!$token) return false;
- $html = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="449" height="400" id="viddler_recorder" align="middle">
- <param name="allowScriptAccess" value="always" />
- <param name="allowNetworking" value="all" />
- <param name="movie" value="http://www.viddler.com/flash/recorder.swf" />
- <param name="quality" value="high" />
- <param name="scale" value="noScale">
- <param name="bgcolor" value="#000000" />
- <param name="flashvars" value="fake=1&recordToken='.$token.'" />
- <embed src="http://www.viddler.com/flash/recorder.swf" quality="high" scale="noScale" bgcolor="#000000" allowScriptAccess="always" allowNetworking="all" width="449" height="400" name="viddler_recorder" flashvars="fake=1&recordToken='.$token.'" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
- </object>';
- return $html;
- }
- /* viddler.videos.getStatus
- / accepts: $videoID = string
- / returns: array - info about video's upload status
- / Method specific responses {
- 1: Waiting in encode queue (failed=0)
- 2: Encoding (failed=0)
- 3: Encoding process failed (failed=1)
- 4: Ready (failed=0)
- 5: Deleted (failed=0)
- 6: Wrong priviledges (failed=0)
- }
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getStatus
- */
- function video_status($videoID) {
- $xml = $this->sendRequest('video.status','video_id='.$videoID); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['video_status'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.videos.getDetails
- / accepts: $sessionid and $videoID = string
- / returns: array - info about video's upload status
- / Method specific responses {
- 1: Waiting in encode queue (failed=0)
- 2: Encoding (failed=0)
- 3: Encoding process failed (failed=1)
- 4: Ready (failed=0)
- 5: Deleted (failed=0)
- 6: Wrong priviledges (failed=0)
- }
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getDetails
- */
- function video_details($sessionid,$videoID) {
- $xml = $this->sendRequest('viddler.videos.getDetails','sessionid='.$sessionid.'&video_id='.$videoID); // Get XML response
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['video'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.videos.getByUser
- / accepts: $user = string, $page = string, $per_page = string
- / returns: array - information about the videos matching this user
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getByUser
- */
- function videos_listbyuser($user,$page =1,$per_page =5) {
- // Get XML response
- $xml = $this->sendRequest('viddler.videos.getByUser','user='.$user.'&page='.$page.'&per_page='.$per_page);
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['video_list'];
- }
- } else {
- return $xml;
- }
- }
- /* viddler.videos.getByTag
- / accepts: $tag = string, $page = string, $per_page = string
- / returns: array - information about videos matching this tag
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getByTag
- */
- function videos_listbytag($tag,$page =1,$per_page =5) {
- // Get XML response
- $xml = $this->sendRequest('viddler.videos.getByTag','tag='.$tag.'&page='.$page.'&per_page='.$per_page);
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['video_list'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /* viddler.videos.getFeatured
- / accepts: nothing.
- / returns: array - information about videos that are featured
- / doc: http://wiki.developers.viddler.com/index.php/Viddler.videos.getFeatured
- */
- function videos_listfeatured() {
- // Get XML response
- $xml = $this->sendRequest('viddler.videos.getFeatured','');
- // Use included parser?
- if ($this->parser) {
- // Several steps
- // 1. Convert XML into an array
- // 2. Check for errors
- // i. Return array of error number, short, and long description
- // 3. Return multidimensional array of response.
- $response = $this->checkErrors(XML_unserialize($xml));
- if ($response['error']) {
- return $response;
- } else {
- return $response['video_list'];
- }
- } else {
- return $xml;
- }
- return false;
- }
- /*########## Misc. Functions ########### */
- // Error checking
- function checkErrors($response) {
- if ($response['error']) {
- switch ($response['error']) {
- case '1':
- $errorshort = 'An internal error has occurred.';
- break;
- case '2':
- $errorshort = 'Bad argument format.';
- break;
- case '3':
- $errorshort = 'Unknown argument specified.';
- break;
- case '4':
- $errorshort = 'Missing required argument for this method.';
- break;
- case '5':
- $errorshort = 'No method specified.';
- break;
- case '6':
- $errorshort = 'Unknown method specified.';
- break;
- case '7':
- $errorshort = 'API key missing.';
- break;
- case '8':
- $errorshort = 'Invalid or unknown API key specified.';
- break;
- case '9':
- $errorshort = 'Invalid or expired sessionid.';
- break;
- case '10':
- $errorshort = 'HTTP method used not allowed on this method.';
- break;
- case '100':
- $errorshort = 'Video could not be found.';
- break;
- case '101':
- $errorshort = 'Username not found.';
- break;
- case '102':
- $errorshort = 'This account has been suspended.';
- break;
- case '103':
- $errorshort = 'Password incorrect for this username.';
- break;
- case '104':
- $errorshort = 'Terms of Service not accepted by user.';
- break;
- case '105':
- $errorshort = 'Username already in use.';
- break;
- case '106':
- $errorshort = 'Email address already in use.';
- break;
- case '200':
- $errorshort = 'The file is too large. Please limit to 500Mb.';
- break;
- default:
- $errorshort = 'An unknown error has occured.';
- break;
- } // End switch
- $error = array('error' => array('number'=>$response['error'],'shortdesc'=>$errorshort));
- return $error;
- }
- return $response;
- }
- /**
- * Build arguments to use for a request to the API
- *
- * @param array $p An associative array of parameters
- * @param string $return_type Optional return type of parameters ['array'|'string']
- * @return mixed The filtered arguments in the format requested
- */
- public function buildArguments( $p, $return_type = 'string') {
- $args = array();
- foreach ($p as $key => $value) {
- // Skip method request name and submit button
- switch ($key) {
- case 'method':
- case 'submit':
- case 'MAX_FILE_SIZE':
- continue;
- }
- $args[$key] = $value;
- } // end foreach
- switch ($return_type) {
- // If array assume uploading
- case 'array':
- $uploadfile = $this->uploaddir . basename($_FILES['file']['name']);
- if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
- $args['file'] = "@{$uploadfile}";
- }
- break;
- // If String, chop off last ampersand
- case 'string':
- default:
- $args = http_build_query($args, null, '&');
- break;
- }
- return $args;
- }
- // Send REST request
- function sendRequest($method,$args) {
- // Build Request URL
- $reqURL = $this->viddlerREST.'?api_key='.$this->apiKey.'&method='.$method;
- if ($method != 'viddler.videos.upload') $reqURL .= '&'.$args;
- // Send request via CURL
- $curl_handle = curl_init();
- curl_setopt ($curl_handle, CURLOPT_URL, $reqURL); // Request URL
- curl_setopt ($curl_handle, CURLOPT_RETURNTRANSFER, 1); // Return as string
- curl_setopt ($curl_handle, CURLOPT_CONNECTTIMEOUT, 1); // Fail if timeout
- // If sending a file, change to POST instead of GET
- if ($method == 'viddler.videos.upload') {
- curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
- }
- $response = curl_exec($curl_handle); // Call!
- if (!$response) $response = curl_error($curl_handle);
- curl_close($curl_handle); // Close connection
- // When CURL doesn't work, use this.
- //$response = file_get_contents($reqURL);
- // Return XML response as string
- if (!$response) {
- return false; // 'There is no response. CURL might not by allowed? <br />'.$reqURL.'<br /><br />';
- }
- return $response;
- } // End sentReq();
- }
- /**
- * Viddler Silo
- */
- class ViddlerSilo extends Plugin implements MediaSilo
- {
- const SILO_NAME = 'Viddler';
- protected $cache = array();
- /*
- // add a rewrite rule for our auto-generated video page.
- public function filter_rewrite_rules( $rules ) {
- $rules[] = new RewriteRule(array(
- 'name' => 'viddlerlist',
- 'parse_regex' => '/^sillytv[\/]{0,1}$/i',
- 'build_str' => 'viddlerlist',
- 'handler' => 'ViddlerAdminHandler',
- 'action' => 'display_viddlerlist',
- 'priority' => 7,
- 'is_active' => 1,
- ));
- return $rules;
- }
- */
- /**
- * Initialize some internal values when plugin initializes
- */
- public function action_init()
- {
- // add some js to the admin header
- Stack::add( 'admin_header_javascript', $this->get_url(true) . 'vidfuncs.js', 'viddlerjs', array('media','jquery') );
- $this->viddler = new Phpviddler();
- }
- /**
- * Return basic information about this silo
- * name- The name of the silo, used as the root directory for media in this silo
- */
- public function silo_info()
- {
- if ($this->is_auth()) {
- return array('name' => self::SILO_NAME, 'icon' => URL::get_from_filesystem(__FILE__) . '/icon.png');
- }
- else {
- return array();
- }
- }
- /**
- * Return directory contents for the silo path
- *
- * @param string $path The path to retrieve the contents of
- * @return array An array of MediaAssets describing the contents of the directory
- */
- public function silo_dir($path)
- {
- $user = User::identify()->info->viddler__username;
- if (Cache::has('viddler:videos:' . $user)) {
- $pre = Cache::get('viddler:videos:' . $user);
- }
- else {
- $pre = $this->viddler->videos_listbyuser( $user, '', 20 );
- Cache::set('viddler:videos:' . $user, $pre);
- }
- $xml = new SimpleXMLElement( $pre );
- $results = array();
- foreach( $xml->video as $video ) {
- $props = array();
- foreach($video->children() as $name => $value) {
- $props[$name] = (string)$value;
- }
- $props['filetype'] = 'viddler';
- $asset = new MediaAsset(
- self::SILO_NAME . '/' . $path . ($path == '' ? '' : '/') . $video->id,
- false,
- $props
- );
- $results[] = $asset;
- //echo '<div class="media"><img src="' . $video->thumbnail_url . '" width="150px"><div class="foroutput"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_chrisjdavis_' . $video->id . '"><param name="movie" value="http://www.viddler.com/player/' . $video->id . '/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/' . $video->id . '/" width="437" height="370" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_chrisjdavis" ></embed></object></div></div>';
- }
- return $results;
- }
- /**
- * Get the file from the specified path
- *
- * @param string $path The path of the file to retrieve
- * @param array $qualities Qualities that specify the version of the file to retrieve.
- * @return MediaAsset The requested asset
- */
- public function silo_get($path, $qualities = null)
- {
- }
- /**
- * Get the direct URL of the file of the specified path
- *
- * @param string $path The path of the file to retrieve
- * @param array $qualities Qualities that specify the version of the file to retrieve.
- * @return string The requested url
- */
- public function silo_url( $path, $qualities = null )
- {
- $id = basename($path);
- $video = $this->cache[$id];
- if (isset($qualities['size']) && $qualities['size']=='thumbnail') {
- $url = $video->thumbnail_url;
- }
- else {
- $url = $video->url;
- }
- return $url;
- }
- /**
- * Create a new asset instance for the specified path
- *
- * @param string $path The path of the new file to create
- * @return MediaAsset The requested asset
- */
- public function silo_new($path)
- {
- }
- /**
- * Store the specified media at the specified path
- *
- * @param string $path The path of the file to retrieve
- * @param MediaAsset $ The asset to store
- */
- public function silo_put($path, $filedata)
- {
- }
- /**
- * Delete the file at the specified path
- *
- * @param string $path The path of the file to retrieve
- */
- public function silo_delete($path)
- {
- }
- /**
- * Retrieve a set of highlights from this silo
- * This would include things like recently uploaded assets, or top downloads
- *
- * @return array An array of MediaAssets to highlihgt from this silo
- */
- public function silo_highlights()
- {
- }
- public function controls()
- {
- echo '<ul class="silo-controls"><li id="vupload"><a href="#upload" title="Upload a video">Upload</a></li<li id="vrecord"><a href="#record" title="Record a video">Record</a></li><li id="vstream"><a class="final" href="#stream" title="View your video stream">Viddler Stream</a></li></ul>';
- }
- public function silo_upload_form()
- {
- echo '<form name="viddler_upload"></form>';
- }
- public function upload_form()
- {
- ?>
- <div id="viddlerform" class="container" style="display:none;">
- <h2>Upload a Video</h2>
- <form name="viddler_upload">
- <div class="container">
- <p class="column span-5">Video</p>
- <p class="column span-14 last"><input type="file" name="viddler_file"></p>
- </div>
- <hr>
- <div class="container">
- <p class="column span-5">Video Title</p>
- <p class="column span-14 last"><input type="text" name="viddler_title"></p>
- </div>
- <hr>
- <div class="container">
- <p class="column span-5">Video Tags</p>
- <p class="column span-14 last"><input type="text" name="viddler_tags"></p>
- </div>
- <hr>
- <div class="container">
- <p class="column span-5">Video Description</p>
- <p class="column span-14 last"><textarea name="viddler_desc"></textarea></p>
- <p class="column span-5 prepend-5"><input type="submit" value="Upload Video" id="execute_viddler"></p>
- </div>
- </form>
- </div>
- <div id="viddlerrecord" class="container" style="display:none;">
- <div class="column span-14 prepend-4">
- <h2>Record a Video</h2>
- <p><?php
- $user = User::identify()->info->viddler__username;
- $pass = User::identify()->info->viddler__password;
- $auth = $this->viddler->user_authenticate( array( 'user' => $user, 'password' => $pass, 'get_record_token' => 1 ) );
- $sid = new SimpleXMLElement( $auth );
- $mt = $test->video_getrecordtoken( $sid->sessionid );
- $token = new SimpleXMLElement( $mt );
- $embed = $test->video_getrecordembed( $token );
- echo $embed;
- ?></p>
- </div>
- <?php
- }
- /**
- * Retrieve the permissions for the current user to access the specified path
- *
- * @param string $path The path to retrieve permissions for
- * @return array An array of permissions constants (MediaSilo::PERM_READ, MediaSilo::PERM_WRITE)
- */
- public function silo_permissions($path)
- {
- }
- /**
- * Add actions to the plugin page for this plugin
- * The authorization should probably be done per-user.
- *
- * @param array $actions An array of actions that apply to this plugin
- * @param string $plugin_id The string id of a plugin, generated by the system
- * @return array The array of actions to attach to the specified $plugin_id
- */
- public function filter_plugin_config( $actions, $plugin_id ) {
- if ( $plugin_id == $this->plugin_id() ) {
- $viddler_ok = $this->is_auth();
- if ( $viddler_ok ) {
- $actions[]= 'Log Out';
- } else {
- $actions[]= 'Log In';
- }
- }
- return $actions;
- }
- /**
- * Respond to the user selecting an action on the plugin page
- *
- * @param string $plugin_id The string id of the acted-upon plugin
- * @param string $action The action string supplied via the filter_plugin_config hook
- */
- public function action_plugin_ui( $plugin_id, $action ) {
- switch ( $action ) {
- case 'Log In':
- $ui = new FormUI( strtolower( get_class( $this ) ) );
- $ui->append('text', 'username', 'user:viddler__username', 'Viddler Username:');
- $ui->append('password', 'password', 'user:viddler__password', 'Viddler Password:');
- $ui->append('submit', 'submit', 'Log In');
- $ui->on_success( array( $this, 'updated_config' ) );
- $ui->out();
- /*
- if ( $this->is_auth() ) {
- $deauth_url= URL::get('admin', array('page' => 'plugins', 'configure' => $this->plugin_id(), 'action' => 'Log Out')) . '#plugin_options';
- echo "<p>You have successfully logged into Vidder via Habari.</p>";
- echo "<p>Do you want to <a href=\"{$deauth_url}\">log out</a>?</p>";
- }
- else {
- $username = $ui->username->value;
- $password = $ui->password->value;
- if ($username != '' && $password != '') {
- $auth= $this->viddler->user_authenticate( array( 'user' => $username, 'password' => $password ) );
- $xml= new SimpleXMLElement( $auth );
- User::identify()->info->viddler__token = (string) $xml->session_id;
- }
- }
- */
- break;
- case 'Log Out':
- unset(User::identify()->info->viddler__token);
- $reauth_url = URL::get('admin', array('page' => 'plugins', 'configure' => $this->plugin_id(), 'action' => 'Log In')) . '#plugin_options';
- echo '<p>The Viddler Silo Plugin session has been logged out.<p>';
- echo "<p>Do you want to <a href=\"{$reauth_url}\">log in again</a>?<p>";
- break;
- }
- }
- /**
- * Returns true if plugin config form values defined in action_plugin_ui should be stored in options by Habari
- * @return boolean True if options should be stored
- **/
- public function updated_config($ui)
- {
- $username = $ui->username->value;
- $password = $ui->password->value;
- if ($username != '' && $password != '') {
- $auth = $this->viddler->user_authenticate( array( 'user' => $username, 'password' => $password ) );
- $xml = new SimpleXMLElement( $auth );
- $token = (string) $xml->sessionid;
- if ($token == '') {
- $ui->set_option('success_message', _t('The username and password you supplied failed to log in to Viddler.'));
- }
- else {
- $ui->save();
- User::identify()->info->viddler__token = $token;
- User::identify()->info->commit();
- return '<p>' . _t('You have logged in to Viddler.') . '</p>';
- }
- }
- return false;
- }
- private function is_auth()
- {
- $token = User::identify()->info->viddler__token;
- if ( $token != '' ) {
- return true;
- } else {
- return false;
- }
- }
- public function action_admin_header( $theme )
- {
- if (Controller::get_var('page') == 'publish') {
- $header = <<< HEADER
- habari.media.output.viddler = {display: function(index, fileobj) {
- habari.editor.insertSelection( ''+
- '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="370" id="viddler_' + fileobj.basename + '">' +
- '<param name="movie" value="http://www.viddler.com/player/' + fileobj.basename + '/" />' +
- '<param name="allowScriptAccess" value="always" />' +
- '<param name="allowFullScreen" value="true" />' +
- '<embed src="http://www.viddler.com/player/' + fileobj.basename + '/" width="437" height="370" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" ></embed>' +
- '</object>'
- );
- }}
- HEADER;
- Stack::add( 'admin_header_javascript', $header, 'viddlerinline', array('viddlerjs', 'media','jquery') );
- }
- }
- /**
- * Produce a link for the media control bar that causes a specific panel to be displayed
- *
- * @param string $path The path to pass
- * @param string $path The panel to display
- * @param string $title The text to use for the link in the control bar
- * @return string The link to create
- */
- public function link_panel( $path, $panel, $title )
- {
- return '<a href="#" onclick="habari.media.showpanel(\''.$path.'\', \''.$panel.'\');return false;">' . $title . '</a>';
- }
- /**
- * Provide controls for the media control bar
- *
- * @param array $controls Incoming controls from other plugins
- * @param MediaSilo $silo An instance of a MediaSilo
- * @param string $path The path to get controls for
- * @param string $panelname The name of the requested panel, if none then emptystring
- * @return array The altered $controls array with new (or removed) controls
- *
- * @todo This should really use FormUI, but FormUI needs a way to submit forms via ajax
- */
- public function filter_media_controls( $controls, $silo, $path, $panelname )
- {
- $class = __CLASS__;
- if ($silo instanceof $class) {
- if (User::identify()->can('upload_viddler')) {
- $controls[] = $this->link_panel(self::SILO_NAME . '/' . $path, 'upload', 'Upload');
- $controls[] = $this->link_panel(self::SILO_NAME . '/' . $path, 'record', 'Record');
- }
- }
- return $controls;
- }
- /**
- * Provide requested media panels for this plugin
- *
- * @param string $panel The HTML content of the panel to be output in the media bar
- * @param MediaSilo $silo The silo for which the panel was requested
- * @param string $path The path within the silo (silo root omitted) for which the panel was requested
- * @param string $panelname The name of the requested panel
- * @return string The modified $panel to contain the HTML output for the requested panel
- *
- * @todo Move the uploaded file from the temporary location to the location indicated by the path field.
- */
- public function filter_media_panels( $panel, $silo, $path, $panelname)
- {
- $class = __CLASS__;
- if ($silo instanceof $class) {
- switch ($panelname) {
- case 'record':
- $user = User::identify()->info->viddler__username;
- $pass = User::identify()->info->viddler__password;
- $auth = $this->viddler->user_authenticate( array( 'user' => $user, 'password' => $pass, 'get_record_token' => 1, 'record_token' => 1 ) );
- $sid = new SimpleXMLElement( $auth );
- $rt = $sid->record_token;
- $panel .= "<div class=\"span-18\" style=\"padding-top:30px;color: #e0e0e0;margin: 0px auto;\">";
- $panel .= $this->viddler->video_getrecordembed( $rt );
- $panel .= '</div>';
- break;
- case 'upload':
- if (isset($_FILES['file'])) {
- $size = Utils::human_size($_FILES['file']['size']);
- $panel .= "<div class=\"span-18\" style=\"padding-top:30px;color: #e0e0e0;margin: 0px auto;\"><p>File Uploaded: {$_FILES['file']['name']} ($size)</p>";
- $path = self::SILO_NAME . '/' . preg_replace('%\.{2,}%', '.', $path). '/' . $_FILES['file']['name'];
- $asset = new MediaAsset($path, false);
- $asset->upload($_FILES['file']);
- if ($asset->put()) {
- $panel .= '<p>File added successfully.</p>';
- }
- else {
- $panel .= '<p>File could not be added to the silo.</p>';
- }
- $panel .= '<p><a href="#" onclick="habari.media.forceReload();habari.media.showdir(\'' . dirname($path) . '\');">Browse the current silo path.</a></p></div>';
- }
- else {
- $fullpath = self::SILO_NAME . '/' . $path;
- $form_action = URL::get('admin_ajax', array('context' => 'media_panel'));
- $panel .= <<< UPLOAD_FORM
- <form enctype="multipart/form-data" method="post" id="simple_upload" target="simple_upload_frame" action="{$form_action}" class="span-10" style="margin:0px auto;text-align: center">
- <p style="padding-top:30px;">Upload to: <b style="font-weight:normal;color: #e0e0e0;font-size: 1.2em;">/{$path}</b></p>
- <p><input type="file" name="file"><input type="submit" name="upload" value="Upload">
- <input type="hidden" name="path" value="{$fullpath}">
- <input type="hidden" name="panel" value="{$panelname}">
- </p>
- </form>
- <iframe id="simple_upload_frame" name="simple_upload_frame" style="width:1px;height:1px;" onload="simple_uploaded();"></iframe>
- <script type="text/javascript">
- var responsedata;
- function simple_uploaded() {
- if (!$('#simple_upload_frame')[0].contentWindow) return;
- var response = $($('#simple_upload_frame')[0].contentWindow.document.body).text();
- if (response) {
- eval('responsedata = ' + response);
- window.setTimeout(simple_uploaded_complete, 500);
- }
- }
- function simple_uploaded_complete() {
- habari.media.jsonpanel(responsedata);
- }
- </script>
- UPLOAD_FORM;
- }
- }
- }
- return $panel;
- }
- }
- /*
- // This is an auto-generated video page. There is a rewrite rules array in the plugin
- // above that needs to be uncommented as well. Not sure if we actually want this in
- // the plugin, which is why it is commented out.
- class ViddlerAdminHandler extends ActionHandler
- {
- private $vids;
- private $theme= null;
- public function __construct() {
- $this->theme= Themes::create();
- }
- public function act_display_viddlerlist() {
- $this->load_vids();
- $this->theme->assign( 'vids', $this->vid );
- $this->theme->display( 'vids' );
- }
- public function load_vids() {
- $user= Options::get( 'viddlersilo:username_' . User::identify()->id );
- $viddler= new Phpviddler();
- $pre= $viddler->videos_listbyuser( $user, '', 20, 'view_count' );
- $xml= new SimpleXMLElement( $pre );
- foreach( $xml->video as $video ) {
- $this->vid[]= $video;
- }
- }
- }
- */
- ?>