File indexing completed on 2024-12-22 05:36:24
0001 <?php 0002 /** 0003 * ocs-webserver 0004 * 0005 * Copyright 2016 by pling GmbH. 0006 * 0007 * This file is part of ocs-webserver. 0008 * 0009 * This program is free software: you can redistribute it and/or modify 0010 * it under the terms of the GNU Affero General Public License as 0011 * published by the Free Software Foundation, either version 3 of the 0012 * License, or (at your option) any later version. 0013 * 0014 * This program is distributed in the hope that it will be useful, 0015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0017 * GNU Affero General Public License for more details. 0018 * 0019 * You should have received a copy of the GNU Affero General Public License 0020 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0021 **/ 0022 0023 // ppload-API: https://github.com/KDE/ocs-fileserver/blob/master/docs/ocs-fileserver-API.md 0024 0025 class Ppload_Api 0026 { 0027 0028 protected $_config = array( 0029 'apiUri' => 'https://www.ppload.com/api/', 0030 'clientId' => '', 0031 'secret' => '' 0032 ); 0033 0034 public function __construct(array $config = null) 0035 { 0036 if ($config) { 0037 $this->_config = $config + $this->_config; 0038 } 0039 } 0040 0041 public function getProfiles(array $params = null) 0042 { 0043 return $this->_request('GET', 'profiles/index', $params); 0044 } 0045 0046 public function getProfile($id) 0047 { 0048 return $this->_request('GET', 'profiles/profile', array( 0049 'id' => $id 0050 )); 0051 } 0052 0053 public function postProfile(array $params) 0054 { 0055 return $this->_request('POST', 'profiles/profile', array( 0056 'client_id' => $this->_config['clientId'], 0057 'secret' => $this->_config['secret'] 0058 ) + $params); 0059 } 0060 0061 public function putProfile($id, array $params) 0062 { 0063 return $this->_request('PUT', 'profiles/profile', array( 0064 'id' => $id, 0065 'client_id' => $this->_config['clientId'], 0066 'secret' => $this->_config['secret'] 0067 ) + $params); 0068 } 0069 0070 public function deleteProfile($id) 0071 { 0072 return $this->_request('DELETE', 'profiles/profile', array( 0073 'id' => $id, 0074 'client_id' => $this->_config['clientId'], 0075 'secret' => $this->_config['secret'] 0076 )); 0077 } 0078 0079 public function getCollections(array $params = null) 0080 { 0081 return $this->_request('GET', 'collections/index', $params); 0082 } 0083 0084 public function getCollection($id) 0085 { 0086 return $this->_request('GET', 'collections/collection', array( 0087 'id' => $id 0088 )); 0089 } 0090 0091 public function postCollection(array $params) 0092 { 0093 return $this->_request('POST', 'collections/collection', array( 0094 'client_id' => $this->_config['clientId'], 0095 'secret' => $this->_config['secret'] 0096 ) + $params); 0097 } 0098 0099 public function putCollection($id, array $params) 0100 { 0101 return $this->_request('PUT', 'collections/collection', array( 0102 'id' => $id, 0103 'client_id' => $this->_config['clientId'], 0104 'secret' => $this->_config['secret'] 0105 ) + $params); 0106 } 0107 0108 public function deleteCollection($id) 0109 { 0110 return $this->_request('DELETE', 'collections/collection', array( 0111 'id' => $id, 0112 'client_id' => $this->_config['clientId'], 0113 'secret' => $this->_config['secret'] 0114 )); 0115 } 0116 0117 public function getFiles(array $params = null) 0118 { 0119 return $this->_request('GET', 'files/index', $params); 0120 } 0121 0122 public function getFile($id) 0123 { 0124 return $this->_request('GET', 'files/file', array( 0125 'id' => $id 0126 )); 0127 } 0128 0129 public function postFile(array $params) 0130 { 0131 return $this->_request('POST', 'files/file', array( 0132 'client_id' => $this->_config['clientId'], 0133 'secret' => $this->_config['secret'] 0134 ) + $params); 0135 } 0136 0137 public function putFile($id, array $params) 0138 { 0139 return $this->_request('PUT', 'files/file', array( 0140 'id' => $id, 0141 'client_id' => $this->_config['clientId'], 0142 'secret' => $this->_config['secret'] 0143 ) + $params); 0144 } 0145 0146 public function deleteFile($id) 0147 { 0148 return $this->_request('DELETE', 'files/file', array( 0149 'id' => $id, 0150 'client_id' => $this->_config['clientId'], 0151 'secret' => $this->_config['secret'] 0152 )); 0153 } 0154 0155 public function getFavorites(array $params = null) 0156 { 0157 return $this->_request('GET', 'favorites/index', $params); 0158 } 0159 0160 public function getFavorite($id) 0161 { 0162 return $this->_request('GET', 'favorites/favorite', array( 0163 'id' => $id 0164 )); 0165 } 0166 0167 public function postFavorite(array $params) 0168 { 0169 return $this->_request('POST', 'favorites/favorite', array( 0170 'client_id' => $this->_config['clientId'], 0171 'secret' => $this->_config['secret'] 0172 ) + $params); 0173 } 0174 0175 public function deleteFavorite($id) 0176 { 0177 return $this->_request('DELETE', 'favorites/favorite', array( 0178 'id' => $id, 0179 'client_id' => $this->_config['clientId'], 0180 'secret' => $this->_config['secret'] 0181 )); 0182 } 0183 0184 public function deleteOwner($id) 0185 { 0186 return $this->_request('DELETE', 'owners/owner', array( 0187 'id' => $id, 0188 'client_id' => $this->_config['clientId'], 0189 'secret' => $this->_config['secret'] 0190 )); 0191 } 0192 0193 public function getMediaGenres(array $params = null) 0194 { 0195 return $this->_request('GET', 'media/genres', $params); 0196 } 0197 0198 public function getMediaOwners(array $params = null) 0199 { 0200 return $this->_request('GET', 'media/owners', $params); 0201 } 0202 0203 public function getMediaCollections(array $params = null) 0204 { 0205 return $this->_request('GET', 'media/collections', $params); 0206 } 0207 0208 public function getMediaIndex(array $params = null) 0209 { 0210 return $this->_request('GET', 'media/index', $params); 0211 } 0212 0213 public function getMedia($id) 0214 { 0215 return $this->_request('GET', 'media/media', array( 0216 'id' => $id 0217 )); 0218 } 0219 0220 public function postMediaCollectionthumbnail($id, array $params) 0221 { 0222 return $this->_request('POST', 'media/collectionthumbnail', array( 0223 'id' => $id, 0224 'client_id' => $this->_config['clientId'], 0225 'secret' => $this->_config['secret'] 0226 ) + $params); 0227 } 0228 0229 public function postMediaAlbumthumbnail($id, array $params) 0230 { 0231 return $this->_request('POST', 'media/albumthumbnail', array( 0232 'id' => $id, 0233 'client_id' => $this->_config['clientId'], 0234 'secret' => $this->_config['secret'] 0235 ) + $params); 0236 } 0237 0238 protected function _request($method, $uri = '', array $params = null) 0239 { 0240 if (empty($this->_config['apiUri'])) { 0241 return false; 0242 } 0243 0244 $timeout = 60; 0245 $postFields = array( 0246 'method' => $method, 0247 'format' => 'json' 0248 ); 0249 if ($params) { 0250 $postFields = $postFields + $params; 0251 } 0252 if (isset($postFields['file'])) { 0253 $timeout = 600; 0254 if ($postFields['file'][0] != '@') { 0255 $postFields['file'] = $this->_getCurlValue($postFields['file']); 0256 } 0257 } 0258 else { 0259 $postFields = http_build_query($postFields, '', '&'); 0260 } 0261 0262 $curl = curl_init(); 0263 curl_setopt_array($curl, array( 0264 CURLOPT_URL => $this->_config['apiUri'] . ltrim($uri, '/'), //. '?XDEBUG_SESSION_START=files', 0265 CURLOPT_HEADER => false, 0266 CURLOPT_POST => true, 0267 CURLOPT_POSTFIELDS => $postFields, 0268 CURLOPT_RETURNTRANSFER => true, 0269 CURLOPT_TIMEOUT => $timeout 0270 )); 0271 $response = curl_exec($curl); 0272 $last_error = curl_error($curl); 0273 curl_close($curl); 0274 0275 if ($last_error) { 0276 error_log(__METHOD__ . ' :: ' . $last_error); 0277 } 0278 if ($response) { 0279 return json_decode($response); 0280 } 0281 return false; 0282 } 0283 0284 /** 0285 * @param string $filename 0286 * @return CURLFile|string 0287 */ 0288 private function _getCurlValue($filename) 0289 { 0290 // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax 0291 // See: https://wiki.php.net/rfc/curl-file-upload 0292 if (function_exists('curl_file_create')) { 0293 return curl_file_create($filename); 0294 } 0295 0296 return "@{$filename}"; 0297 } 0298 0299 }