[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/ -> boxlib.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * Box.net client.
  19   *
  20   * @package core
  21   * @author James Levy <[email protected]>
  22   * @link http://enabled.box.net
  23   * @access public
  24   * @version 1.0
  25   * @copyright copyright Box.net 2007
  26   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  27   */
  28  
  29  defined('MOODLE_INTERNAL') || die();
  30  require_once($CFG->libdir . '/oauthlib.php');
  31  
  32  /**
  33   * Box.net client class.
  34   *
  35   * @package    core
  36   * @copyright  2013 Frédéric Massart
  37   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  38   */
  39  class boxnet_client extends oauth2_client {
  40  
  41      /** @const API URL */
  42      const API = 'https://api.box.com/2.0';
  43  
  44      /** @const UPLOAD_API URL */
  45      const UPLOAD_API = 'https://upload.box.com/api/2.0';
  46  
  47      /**
  48       * Return authorize URL.
  49       *
  50       * @return string
  51       */
  52      protected function auth_url() {
  53          return 'https://www.box.com/api/oauth2/authorize';
  54      }
  55  
  56      /**
  57       * Create a folder.
  58       *
  59       * @param string $foldername The folder name.
  60       * @param int $parentid The ID of the parent folder.
  61       * @return array Information about the new folder.
  62       */
  63      public function create_folder($foldername, $parentid = 0) {
  64          $params = array('name' => $foldername, 'parent' => array('id' => (string) $parentid));
  65          $this->reset_state();
  66          $result = $this->post($this->make_url("/folders"), json_encode($params));
  67          $result = json_decode($result);
  68          return $result;
  69      }
  70  
  71      /**
  72       * Download the file.
  73       *
  74       * @param int $fileid File ID.
  75       * @param string $path Path to download the file to.
  76       * @return bool Success or not.
  77       */
  78      public function download_file($fileid, $path) {
  79          $this->reset_state();
  80          $result = $this->download_one($this->make_url("/files/$fileid/content"), array(),
  81              array('filepath' => $path, 'CURLOPT_FOLLOWLOCATION' => true));
  82          return ($result === true && $this->info['http_code'] === 200);
  83      }
  84  
  85      /**
  86       * Get info of a file.
  87       *
  88       * @param int $fileid File ID.
  89       * @return object
  90       */
  91      public function get_file_info($fileid) {
  92          $this->reset_state();
  93          $result = $this->request($this->make_url("/files/$fileid"));
  94          return json_decode($result);
  95      }
  96  
  97      /**
  98       * Get a folder content.
  99       *
 100       * @param int $folderid Folder ID.
 101       * @return object
 102       */
 103      public function get_folder_items($folderid = 0) {
 104          $this->reset_state();
 105          $result = $this->request($this->make_url("/folders/$folderid/items",
 106              array('fields' => 'id,name,type,modified_at,size,owned_by')));
 107          return json_decode($result);
 108      }
 109  
 110      /**
 111       * Log out.
 112       *
 113       * @return void
 114       */
 115      public function log_out() {
 116          if ($accesstoken = $this->get_accesstoken()) {
 117              $params = array(
 118                  'client_id' => $this->get_clientid(),
 119                  'client_secret' => $this->get_clientsecret(),
 120                  'token' => $accesstoken->token
 121              );
 122              $this->reset_state();
 123              $this->post($this->revoke_url(), $params);
 124          }
 125          parent::log_out();
 126      }
 127  
 128      /**
 129       * Build a request URL.
 130       *
 131       * @param string $uri The URI to request.
 132       * @param array $params Query string parameters.
 133       * @param bool $uploadapi Whether this works with the upload API or not.
 134       * @return string
 135       */
 136      protected function make_url($uri, $params = array(), $uploadapi = false) {
 137          $api = $uploadapi ? self::UPLOAD_API : self::API;
 138          $url = new moodle_url($api . '/' . ltrim($uri, '/'), $params);
 139          return $url->out(false);
 140      }
 141  
 142      /**
 143       * Rename a file.
 144       *
 145       * @param int $fileid The file ID.
 146       * @param string $newname The new file name.
 147       * @return object Box.net file object.
 148       */
 149      public function rename_file($fileid, $newname) {
 150          // This requires a PUT request with data within it. We cannot use
 151          // the standard PUT request 'CURLOPT_PUT' because it expects a file.
 152          $data = array('name' => $newname);
 153          $options = array(
 154              'CURLOPT_CUSTOMREQUEST' => 'PUT',
 155              'CURLOPT_POSTFIELDS' => json_encode($data)
 156          );
 157          $url = $this->make_url("/files/$fileid");
 158          $this->reset_state();
 159          $result = $this->request($url, $options);
 160          $result = json_decode($result);
 161          return $result;
 162      }
 163  
 164      /**
 165       * Resets curl for multiple requests.
 166       *
 167       * @return void
 168       */
 169      public function reset_state() {
 170          $this->cleanopt();
 171          $this->resetHeader();
 172      }
 173  
 174      /**
 175       * Return the revoke URL.
 176       *
 177       * @return string
 178       */
 179      protected function revoke_url() {
 180          return 'https://www.box.com/api/oauth2/revoke';
 181      }
 182  
 183      /**
 184       * Share a file and return the link to it.
 185       *
 186       * @param string $fileid The file ID.
 187       * @param bool $businesscheck Whether or not to check if the user can share files, has a business account.
 188       * @return object
 189       */
 190      public function share_file($fileid, $businesscheck = true) {
 191          // Sharing the file, this requires a PUT request with data within it. We cannot use
 192          // the standard PUT request 'CURLOPT_PUT' because it expects a file.
 193          $data = array('shared_link' => array('access' => 'open', 'permissions' =>
 194              array('can_download' => true, 'can_preview' => true)));
 195          $options = array(
 196              'CURLOPT_CUSTOMREQUEST' => 'PUT',
 197              'CURLOPT_POSTFIELDS' => json_encode($data)
 198          );
 199          $this->reset_state();
 200          $result = $this->request($this->make_url("/files/$fileid"), $options);
 201          $result = json_decode($result);
 202  
 203          if ($businesscheck) {
 204              // Checks that the user has the right to share the file. If not, throw an exception.
 205              $this->reset_state();
 206              $this->head($result->shared_link->download_url);
 207              $info = $this->get_info();
 208              if ($info['http_code'] == 403) {
 209                  throw new moodle_exception('No permission to share the file');
 210              }
 211          }
 212  
 213          return $result->shared_link;
 214      }
 215  
 216      /**
 217       * Search.
 218       *
 219       * @return object
 220       */
 221      public function search($query) {
 222          $this->reset_state();
 223          $result = $this->request($this->make_url('/search', array('query' => $query, 'limit' => 50, 'offset' => 0)));
 224          return json_decode($result);
 225      }
 226  
 227      /**
 228       * Return token URL.
 229       *
 230       * @return string
 231       */
 232      protected function token_url() {
 233          return 'https://www.box.com/api/oauth2/token';
 234      }
 235  
 236      /**
 237       * Upload a file.
 238       *
 239       * Please note that the file is named on Box.net using the path we are providing, and so
 240       * the file has the name of the stored_file hash.
 241       *
 242       * @param stored_file $storedfile A stored_file.
 243       * @param integer $parentid The ID of the parent folder.
 244       * @return object Box.net file object.
 245       */
 246      public function upload_file(stored_file $storedfile, $parentid = 0) {
 247          $url = $this->make_url('/files/content', array(), true);
 248          $options = array(
 249              'filename' => $storedfile,
 250              'parent_id' => $parentid
 251          );
 252          $this->reset_state();
 253          $result = $this->post($url, $options);
 254          $result = json_decode($result);
 255          return $result;
 256      }
 257  
 258  }
 259  
 260  /**
 261   * Box REST Client Library for PHP5 Developers.
 262   *
 263   * Deprecation note: As of the 14th of December 2013 Box.net APIv1, used by this class,
 264   * is reaching its end of life. Please use boxnet_client() instead.
 265   *
 266   * @package core
 267   * @author James Levy <[email protected]>
 268   * @link http://enabled.box.net
 269   * @access public
 270   * @version 1.0
 271   * @copyright copyright Box.net 2007
 272   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 273   * @deprecated since 2.6, 2.5.3, 2.4.7
 274   */
 275  class boxclient {
 276      /** @var string */
 277      public $auth_token = '';
 278      /** @var string */
 279      private $_box_api_url = 'https://www.box.com/api/1.0/rest';
 280      private $_box_api_upload_url = 'http://upload.box.com/api/1.0/upload';
 281      private $_box_api_download_url = 'http://www.box.com/api/1.0/download';
 282      private $_box_api_auth_url = 'http://www.box.com/api/1.0/auth';
 283      private $_error_code = '';
 284      private $_error_msg = '';
 285      /** @var bool */
 286      private $debug = false;
 287  
 288      /**
 289       * @param string $api_key
 290       * @param string $auth_token
 291       * @param bool $debug
 292       */
 293      public function __construct($api_key, $auth_token = '', $debug = false) {
 294          $this->api_key    = $api_key;
 295          $this->auth_token = $auth_token;
 296          if (!empty($debug)) {
 297              $this->debug = true;
 298          } else {
 299              $this->debug = false;
 300          }
 301      }
 302      /**
 303       * Setup for Functions
 304       *
 305       * @param string $method
 306       * @param array $params
 307       * @return array
 308       */
 309      function makeRequest($method, $params = array()) {
 310          $this->_clearErrors();
 311          $c = new curl(array('debug'=>$this->debug, 'cache'=>true, 'module_cache'=>'repository'));
 312          $c->setopt(array('CURLOPT_FOLLOWLOCATION'=>1));
 313          try {
 314              if ($method == 'upload'){
 315                  $request = $this->_box_api_upload_url.'/'.
 316                      $this->auth_token.'/'.$params['folder_id'];
 317                  $xml = $c->post($request, $params);
 318              }else{
 319                  $args = array();
 320                  $xml = $c->get($this->_box_api_url, $params);
 321              }
 322              $xml_parser = xml_parser_create();
 323              // set $data here
 324              xml_parse_into_struct($xml_parser, $xml, $data);
 325              xml_parser_free($xml_parser);
 326          } catch (moodle_exception $e) {
 327              $this->setError(0, 'connection time-out or invalid url');
 328              return false;
 329          }
 330          return $data;
 331      }
 332      /**
 333       * @param array $params
 334       * @return array
 335       */
 336      function getTicket($params = array()) {
 337          $params['api_key'] = $this->api_key;
 338          $params['action']  = 'get_ticket';
 339          $ret_array = array();
 340          $data = $this->makeRequest('action=get_ticket', $params);
 341          if ($this->_checkForError($data)) {
 342              return false;
 343          }
 344          foreach ($data as $a) {
 345              switch ($a['tag']) {
 346              case 'STATUS':
 347                  $ret_array['status'] = $a['value'];
 348                  break;
 349              case 'TICKET':
 350                  $ret_array['ticket'] = $a['value'];
 351                  break;
 352              }
 353          }
 354          return $ret_array;
 355      }
 356  
 357      /**
 358       * $options['username'] and $options['password'] must be
 359       * given, we  will use them to obtain a valid auth_token
 360       * To get a token, you should use following code:
 361       *
 362       * <code>
 363       * $box = new boxclient('dmls97d8j3i9tn7av8y71m9eb55vrtj4');
 364       * Get a ticket
 365       * $t = $box->getTicket();
 366       * $box->getAuthToken($t['ticket'], array(
 367       *              'username'=>'[email protected]',
 368       *              'password'=>'xxx'));
 369       * </code>
 370       *
 371       * @param string $ticket
 372       * @param string $username
 373       * @param string $password
 374       * @return mixed
 375       */
 376      function getAuthToken($ticket, $username, $password) {
 377          $c = new curl(array('debug'=>$this->debug));
 378          $c->setopt(array('CURLOPT_FOLLOWLOCATION'=>0));
 379          $param =  array(
 380              'login_form1'=>'',
 381              'login'=>$username,
 382              'password'=>$password,
 383              'dologin'=>1,
 384              '__login'=>1
 385              );
 386          try {
 387              $ret = $c->post($this->_box_api_auth_url.'/'.$ticket, $param);
 388          } catch (moodle_exception $e) {
 389              $this->setError(0, 'connection time-out or invalid url');
 390              return false;
 391          }
 392          $header = $c->getResponse();
 393          if(empty($header['location'])) {
 394              throw new repository_exception('invalidpassword', 'repository_boxnet');
 395          }
 396          $location = $header['location'];
 397          preg_match('#auth_token=(.*)$#i', $location, $matches);
 398          $auth_token = $matches[1];
 399          if(!empty($auth_token)) {
 400              $this->auth_token = $auth_token;
 401              return $auth_token;
 402          } else {
 403              throw new repository_exception('invalidtoken', 'repository_boxnet');
 404          }
 405      }
 406      /**
 407       * @param string $path Unused
 408       * @param array $params
 409       * @return array
 410       */
 411      function getfiletree($path, $params = array()) {
 412          $this->_clearErrors();
 413          $params['auth_token'] = $this->auth_token;
 414          $params['folder_id']  = 0;
 415          $params['api_key']    = $this->api_key;
 416          $params['action']     = 'get_account_tree';
 417          $params['onelevel']   = 1;
 418          $params['params[]']   = 'nozip';
 419          $c = new curl(array('debug'=>$this->debug));
 420          $c->setopt(array('CURLOPT_FOLLOWLOCATION'=>1));
 421          try {
 422              $args = array();
 423              $xml = $c->get($this->_box_api_url, $params);
 424          } catch (Exception $e){
 425          }
 426          $ret = array();
 427          $o = simplexml_load_string(trim($xml));
 428          if($o->status == 'listing_ok') {
 429              $tree = $o->tree->folder;
 430              $this->buildtree($tree, $ret);
 431          }
 432          return $ret;
 433      }
 434  
 435      /**
 436       * Get box.net file info
 437       *
 438       * @param string $fileid
 439       * @param int $timeout request timeout in seconds
 440       * @return stdClass|null
 441       */
 442      function get_file_info($fileid, $timeout = 0) {
 443          $this->_clearErrors();
 444          $params = array();
 445          $params['action']     = 'get_file_info';
 446          $params['file_id']    = $fileid;
 447          $params['auth_token'] = $this->auth_token;
 448          $params['api_key']    = $this->api_key;
 449          $http = new curl(array('debug'=>$this->debug));
 450          $xml = $http->get($this->_box_api_url, $params, array('timeout' => $timeout));
 451          if (!$http->get_errno()) {
 452              $o = simplexml_load_string(trim($xml));
 453              if ($o->status == 's_get_file_info') {
 454                  return $o->info;
 455              }
 456          }
 457          return null;
 458      }
 459  
 460      /**
 461       * @param array $sax
 462       * @param array $tree Passed by reference
 463       */
 464      function buildtree($sax, &$tree){
 465          $sax = (array)$sax;
 466          $count = 0;
 467          foreach($sax as $k=>$v){
 468              if($k == 'folders'){
 469                  $o = $sax[$k];
 470                  foreach($o->folder as $z){
 471                      $tmp = array('title'=>(string)$z->attributes()->name,
 472                          'size'=>0, 'date'=>userdate(time()),
 473                          'thumbnail'=>'https://www.box.com/img/small_folder_icon.gif',
 474                          'path'=>array('name'=>(string)$z->attributes()->name, 'path'=>(int)$z->attributes()->id));
 475                      $tmp['children'] = array();
 476                      $this->buildtree($z, $tmp['children']);
 477                      $tree[] = $tmp;
 478                  }
 479              } elseif ($k == 'files') {
 480                  $val = $sax[$k]->file;
 481                  foreach($val as $file){
 482                      $thumbnail = (string)$file->attributes()->thumbnail;
 483                      if (!preg_match('#^(?:http://)?([^/]+)#i', $thumbnail)) {
 484                          $thumbnail =  'http://www.box.com'.$thumbnail;
 485                      }
 486                      $tmp = array('title'=>(string)$file->attributes()->file_name,
 487                          'size'=>display_size((int)$file->attributes()->size),
 488                          'thumbnail'=>$thumbnail,
 489                          'date'=>userdate((int)$file->attributes()->updated),
 490                          'source'=> $this->_box_api_download_url .'/'
 491                              .$this->auth_token.'/'.(string)$file->attributes()->id,
 492                          'url'=>(string)$file->attributes()->shared_link);
 493                      $tree[] = $tmp;
 494                  }
 495              }
 496              $count++;
 497          }
 498      }
 499      /**
 500       * @param array $params
 501       * @return bool|array Array or false
 502       */
 503      function getAccountTree($params = array()) {
 504          $params['auth_token'] = $this->auth_token;
 505          $params['folder_id']  = 0;
 506          $params['api_key']    = $this->api_key;
 507          $params['action']     = 'get_account_tree';
 508          $params['onelevel']   = 1;
 509          $params['params[]']   = 'nozip';
 510          $ret_array = array();
 511          $data = $this->makeRequest('action=get_account_tree', $params);
 512          if ($this->_checkForError($data)) {
 513              return false;
 514          }
 515          $tree_count=count($data);
 516          $entry_count = 0;
 517          for ($i=0; $i<$tree_count; $i++) {
 518              $a = $data[$i];
 519              switch ($a['tag'])
 520              {
 521              case 'FOLDER':
 522                  if (@is_array($a['attributes'])) {
 523                      $ret_array['folder_id'][$i] = $a['attributes']['ID'];
 524                      $ret_array['folder_name'][$i] = $a['attributes']['NAME'];
 525                      $ret_array['shared'][$i] = $a['attributes']['SHARED'];
 526                  }
 527                  break;
 528  
 529              case 'FILE':
 530                  if (@is_array($a['attributes'])) {
 531                      $ret_array['file_id'][$i] = $a['attributes']['ID'];
 532                      @$ret_array['file_name'][$i] = $a['attributes']['FILE_NAME'];
 533                      @$ret_array['file_keyword'][$i] = $a['attributes']['KEYWORD'];
 534                      @$ret_array['file_size'][$i] = display_size($a['attributes']['SIZE']);
 535                      @$ret_array['file_date'][$i] = userdate($a['attributes']['UPDATED']);
 536                      if (preg_match('#^(?:http://)?([^/]+)#i', $a['attributes']['THUMBNAIL'])) {
 537                          @$ret_array['thumbnail'][$i] =  $a['attributes']['THUMBNAIL'];
 538                      } else {
 539                          @$ret_array['thumbnail'][$i] =  'http://www.box.com'.$a['attributes']['THUMBNAIL'];
 540                      }
 541                      $entry_count++;
 542                  }
 543                  break;
 544              }
 545          }
 546          return $ret_array;
 547      }
 548  
 549      /**
 550       * @param string $new_folder_name
 551       * @param array $params
 552       * @return bool|array Array or false
 553       */
 554      function CreateFolder($new_folder_name, $params = array()) {
 555          $params['auth_token'] =  $this->auth_token;
 556          $params['api_key']    = $this->api_key;
 557          $params['action']     = 'create_folder';
 558          $params['name']       = $new_folder_name;
 559          $defaults = array(
 560              'parent_id'  => 0, //Set to '0' by default. Change to create within sub-folder.
 561              'share'     => 1, //Set to '1' by default. Set to '0' to make folder private.
 562          );
 563          foreach ($defaults as $key => $value) {
 564              if (!array_key_exists($key, $params)) {
 565                  $params[$key] = $value;
 566              }
 567          }
 568  
 569          $ret_array = array();
 570          $data = $this->makeRequest('action=create_folder', $params);
 571          if ($this->_checkForError($data)) {
 572              return false;
 573          }
 574          foreach ($data as $a) {
 575              if (!empty($a['value'])) {
 576                  switch ($a['tag']) {
 577  
 578                  case 'FOLDER_ID':
 579                      $ret_array['folder_id'] = $a['value'];
 580                      break;
 581  
 582                  case 'FOLDER_NAME':
 583                      $ret_array['folder_name'] = $a['value'];
 584                      break;
 585  
 586                  case 'FOLDER_TYPE_ID':
 587                      $ret_array['folder_type_id'] = $a['value'];
 588                      break;
 589  
 590                  case 'SHARED':
 591                      $ret_array['shared'] = $a['value'];
 592                      break;
 593  
 594                  case 'PASSWORD':
 595                      $ret_array['password'] = $a['value'];
 596                      break;
 597                  }
 598              } else {
 599                  $ret_array[strtolower($a['tag'])] = null;
 600              }
 601          }
 602          return $ret_array;
 603      }
 604  
 605      /**
 606       * Upload a File
 607       * @param array $params the file MUST be present in key 'file' and be a moodle stored_file object.
 608       * @return array|bool Array or false
 609       */
 610      function UploadFile ($params = array()) {
 611          $params['auth_token'] = $this->auth_token;
 612          // this param should be the full path of the file
 613          $params['new_file1']  = $params['file'];
 614          unset($params['file']);
 615          $defaults = array(
 616              'folder_id' => 0, //Set to '0' by default. Change to create within sub-folder.
 617              'share'     => 1, //Set to '1' by default. Set to '0' to make folder private.
 618          );
 619          foreach ($defaults as $key => $value) {
 620              if (!array_key_exists($key, $params)) {
 621                  $params[$key] = $value;
 622              }
 623          }
 624          $ret_array = array();
 625          $entry_count = 0;
 626          $data = $this->makeRequest('upload', $params);
 627          if ($this->_checkForError($data)) {
 628              return false;
 629          }
 630          for ($i=0, $tree_count=count($data); $i<$tree_count; $i++) {
 631              $a = $data[$i];
 632              switch ($a['tag']) {
 633              case 'STATUS':
 634                  $ret_array['status'] = $a['value'];
 635                  break;
 636  
 637              case 'FILE':
 638                  if (is_array($a['attributes'])) {
 639                      @$ret_array['file_name'][$i] = $a['attributes']['FILE_NAME'];
 640                      @$ret_array['id'][$i] = $a['attributes']['ID'];
 641                      @$ret_array['folder_name'][$i] = $a['attributes']['FOLDER_NAME'];
 642                      @$ret_array['error'][$i] = $a['attributes']['ERROR'];
 643                      @$ret_array['public_name'][$i] = $a['attributes']['PUBLIC_NAME'];
 644                      $entry_count++;
 645                  }
 646                  break;
 647              }
 648          }
 649  
 650          return $ret_array;
 651      }
 652      /**
 653       * @param string $fileid
 654       * @param string $newname
 655       * @return bool
 656       */
 657      function RenameFile($fileid, $newname) {
 658          $params = array(
 659              'api_key'    => $this->api_key,
 660              'auth_token' => $this->auth_token,
 661              'action'     => 'rename',
 662              'target'     => 'file',
 663              'target_id'  => $fileid,
 664              'new_name'   => $newname,
 665          );
 666          $data = $this->makeRequest('action=rename', $params);
 667          if ($this->_checkForError($data)) {
 668              return false;
 669          }
 670          foreach ($data as $a) {
 671              switch ($a['tag']) {
 672                  case 'STATUS':
 673                      if ($a['value'] == 's_rename_node') {
 674                          return true;
 675                      }
 676              }
 677          }
 678          return false;
 679      }
 680  
 681      /**
 682       * Register New User
 683       *
 684       * @param array $params
 685       * @return array|bool Outcome Array or false
 686       */
 687      function RegisterUser($params = array()) {
 688          $params['api_key'] = $this->api_key;
 689          $params['action']  = 'register_new_user';
 690          $params['login']   = $_REQUEST['login'];
 691          $params['password'] = $_REQUEST['password'];
 692          $ret_array = array();
 693          $data = $this->makeRequest('action=register_new_user', $params);
 694          if ($this->_checkForError($data)) {
 695              return false;
 696          }
 697          foreach ($data as $a) {
 698              switch ($a['tag']) {
 699              case 'STATUS':
 700                  $ret_array['status'] = $a['value'];
 701                  break;
 702  
 703              case 'AUTH_TOKEN':
 704                  $ret_array['auth_token'] = $a['value'];
 705                  break;
 706  
 707              case 'LOGIN':
 708                  $ret_array['login'] = $a['value'];
 709                  break;
 710              case 'SPACE_AMOUNT':
 711                  $ret_array['space_amount'] = $a['value'];
 712                  break;
 713              case 'SPACE_USED':
 714                  $ret_array['space_used'] = $a['value'];
 715                  break;
 716              }
 717          }
 718  
 719          return $ret_array;
 720      }
 721  
 722      /**
 723       * Add Tags  (http://enabled.box.net/docs/rest#add_to_tag)
 724       *
 725       * @param string $tag
 726       * @param string $id Set to ID of file or folder
 727       * @param string $target_type File or folder
 728       * @param array $params
 729       * @return array|bool Outcome Array or false
 730       */
 731      function AddTag($tag, $id, $target_type, $params = array()) {
 732          $params['auth_token'] = $this->auth_token;
 733          $params['api_key']    = $this->api_key;
 734          $params['action']     = 'add_to_tag';
 735          $params['target']     = $target_type; // File or folder
 736          $params['target_id']  = $id; // Set to ID of file or folder
 737          $params['tags[]']     = $tag;
 738          $ret_array = array();
 739          $data = $this->makeRequest('action=add_to_tag', $params);
 740          if ($this->_checkForError($data)) {
 741              return false;
 742          }
 743          foreach ($data as $a) {
 744              switch ($a['tag']) {
 745              case 'STATUS':
 746                  $ret_array['status'] = $a['value'];
 747  
 748                  break;
 749              }
 750          }
 751          return $ret_array;
 752      }
 753  
 754      /**
 755       * Public Share  (http://enabled.box.net/docs/rest#public_share)
 756       *
 757       * @param string $message
 758       * @param string $emails
 759       * @param string $id Set to ID of file or folder
 760       * @param string $target_type File or folder
 761       * @param string $password
 762       * @param array $params
 763       * @return array|bool Outcome Array or false
 764       */
 765      function PublicShare($message, $emails, $id, $target_type, $password, $params = array()) {
 766          $params['auth_token'] = $this->auth_token;
 767          $params['api_key']    = $this->api_key;
 768          $params['action']     = 'public_share';
 769          $params['target']     = $target_type;
 770          $params['target_id']  = $id;
 771          $params['password']   =  $password;
 772          $params['message']    = $message;
 773          $params['emails']     = $emails;
 774          $ret_array = array();
 775          $data = $this->makeRequest('action=public_share', $params);
 776          if ($this->_checkForError($data)) {
 777              return false;
 778          }
 779          foreach ($data as $a) {
 780              switch ($a['tag']) {
 781              case 'STATUS':
 782                  $ret_array['status'] = $a['value'];
 783                  break;
 784              case 'PUBLIC_NAME':
 785                  $ret_array['public_name'] = $a['value'];
 786                  break;
 787              }
 788          }
 789  
 790          return $ret_array;
 791      }
 792      /**
 793       * Get Friends  (http://enabled.box.net/docs/rest#get_friends)
 794       *
 795       * @param array $params
 796       * @return array|bool Outcome Array or false
 797       */
 798      function GetFriends ($params = array()) {
 799          $params['auth_token'] = $this->auth_token;
 800          $params['action']     = 'get_friends';
 801          $params['api_key']    = $this->api_key;
 802          $params['params[]']   = 'nozip';
 803          $ret_array = array();
 804          $data = $this->makeRequest('action=get_friends', $params);
 805          if ($this->_checkForError($data)) {
 806              return false;
 807          }
 808          foreach ($data as $a) {
 809              switch ($a['tag']) {
 810              case 'NAME':
 811                  $ret_array['name'] = $a['value'];
 812                  break;
 813              case 'EMAIL':
 814                  $ret_array['email'] = $a['value'];
 815                  break;
 816              case 'ACCEPTED':
 817                  $ret_array['accepted'] = $a['value'];
 818                  break;
 819              case 'AVATAR_URL':
 820                  $ret_array['avatar_url'] = $a['value'];
 821                  break;
 822              case 'ID':
 823                  $ret_array['id'] = $a['value'];
 824                  break;
 825              case 'URL':
 826                  $ret_array['url'] = $a['value'];
 827                  break;
 828              case 'STATUS':
 829                  $ret_array['status'] = $a['value'];
 830                  break;
 831              }
 832          }
 833          return $ret_array;
 834      }
 835  
 836      /**
 837       * Logout User  (http://enabled.box.net/docs/rest#get_friends)
 838       *
 839       * @param array $params
 840       * @return array|bool Outcome Array or false
 841       */
 842      function Logout($params = array()) {
 843          $params['auth_token'] = $this->auth_token;
 844          $params['api_key']    = $this->api_key;
 845          $params['action']     = 'logout';
 846          $ret_array = array();
 847          $data = $this->makeRequest('action=logout', $params);
 848          if ($this->_checkForError($data)) {
 849              return false;
 850          }
 851          foreach ($data as $a) {
 852              switch ($a['tag']) {
 853              case 'ACTION':
 854                  $ret_array['logout'] = $a['value'];
 855  
 856                  break;
 857              }
 858              return $ret_array;
 859          }
 860      }
 861      /**
 862       * @param array $data
 863       * @return bool
 864       */
 865      function _checkForError($data) {
 866          if ($this->_error_msg != '') {
 867              return true;
 868          }
 869          if (@$data[0]['attributes']['STAT'] == 'fail') {
 870              $this->_error_code = $data[1]['attributes']['CODE'];
 871              $this->_error_msg = $data[1]['attributes']['MSG'];
 872              return true;
 873          }
 874          return false;
 875      }
 876  
 877      /**
 878       * @return bool
 879       */
 880      public function isError() {
 881          if  ($this->_error_msg != '') {
 882              return true;
 883          }
 884          return false;
 885      }
 886      /**
 887       *
 888       */
 889      public function setError($code = 0, $msg){
 890          $this->_error_code = $code;
 891          $this->_error_msg  = $msg;
 892      }
 893      /**
 894       * @return string
 895       */
 896      function getErrorMsg() {
 897          return '<p>Error: (' . $this->_error_code . ') ' . $this->_error_msg . '</p>';
 898      }
 899      /**
 900       * @return string
 901       */
 902      function getErrorCode() {
 903          return $this->_error_code;
 904      }
 905      /**
 906       *
 907       */
 908      function _clearErrors() {
 909          $this->_error_code = '';
 910          $this->_error_msg = '';
 911      }
 912  
 913  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1