Blame view

sources/lib/private/ocsclient.php 6.46 KB
03e52840d   Kload   Init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  <?php
  /**
   * ownCloud
   *
   * @author Frank Karlitschek
   * @author Jakob Sack
   * @copyright 2012 Frank Karlitschek frank@owncloud.org
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
   *
   * You should have received a copy of the GNU Affero General Public
   * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
   *
   */
  
  /**
   * This class provides an easy way for apps to store config values in the
   * database.
   */
  
  class OC_OCSClient{
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
32
33
  	 * Get the url of the OCS AppStore server.
  	 * @return string of the AppStore server
03e52840d   Kload   Init
34
35
36
37
38
  	 *
  	 * This function returns the url of the OCS AppStore server. It´s possible
  	 * to set it in the config file or it will fallback to the default
  	 */
  	private static function getAppStoreURL() {
31b7f2792   Kload   Upgrade to ownclo...
39
  		if(OC_Util::getEditionString()===''){
6d9380f96   Cédric Dupont   Update sources OC...
40
  			$default='https://api.owncloud.com/v1';
31b7f2792   Kload   Upgrade to ownclo...
41
42
43
44
  		}else{
  			$default='';
  		}
  		$url = OC_Config::getValue('appstoreurl', $default);
03e52840d   Kload   Init
45
46
  		return($url);
  	}
03e52840d   Kload   Init
47
48
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
49
50
  	 * Get the content of an OCS url call.
  	 * @return string of the response
03e52840d   Kload   Init
51
  	 * This function calls an OCS server and returns the response. It also sets a sane timeout
6d9380f96   Cédric Dupont   Update sources OC...
52
  	* @param string $url
03e52840d   Kload   Init
53
54
55
56
57
58
59
  	*/
  	private static function getOCSresponse($url) {
  		$data = \OC_Util::getUrlContent($url);
  		return($data);
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
60
61
  	 * Get all the categories from the OCS server
  	 * @return array an array of category ids
03e52840d   Kload   Init
62
63
64
65
66
67
68
69
70
71
72
73
  	 * @note returns NULL if config value appstoreenabled is set to false
  	 * This function returns a list of all the application categories on the OCS server
  	 */
  	public static function getCategories() {
  		if(OC_Config::getValue('appstoreenabled', true)==false) {
  			return null;
  		}
  		$url=OC_OCSClient::getAppStoreURL().'/content/categories';
  		$xml=OC_OCSClient::getOCSresponse($url);
  		if($xml==false) {
  			return null;
  		}
837968727   Kload   [enh] Upgrade to ...
74
75
76
  		$loadEntities = libxml_disable_entity_loader(true);
  		$data =	simplexml_load_string($xml);
  		libxml_disable_entity_loader($loadEntities);
03e52840d   Kload   Init
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  
  		$tmp=$data->data;
  		$cats=array();
  
  		foreach($tmp->category as $value) {
  
  			$id= (int) $value->id;
  			$name= (string) $value->name;
  			$cats[$id]=$name;
  
  		}
  
  		return $cats;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
93
94
  	 * Get all the applications from the OCS server
  	 * @return array an array of application data
03e52840d   Kload   Init
95
96
  	 *
  	 * This function returns a list of all the applications on the OCS server
6d9380f96   Cédric Dupont   Update sources OC...
97
98
99
  	 * @param array|string $categories
  	 * @param int $page
  	 * @param string $filter
03e52840d   Kload   Init
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
  	 */
  	public static function getApplications($categories, $page, $filter) {
  		if(OC_Config::getValue('appstoreenabled', true)==false) {
  			return(array());
  		}
  
  		if(is_array($categories)) {
  			$categoriesstring=implode('x', $categories);
  		}else{
  			$categoriesstring=$categories;
  		}
  
  		$version='&version='.implode('x', \OC_Util::getVersion());
  		$filterurl='&filter='.urlencode($filter);
  		$url=OC_OCSClient::getAppStoreURL().'/content/data?categories='.urlencode($categoriesstring)
  			.'&sortmode=new&page='.urlencode($page).'&pagesize=100'.$filterurl.$version;
  		$apps=array();
  		$xml=OC_OCSClient::getOCSresponse($url);
  
  		if($xml==false) {
  			return null;
  		}
837968727   Kload   [enh] Upgrade to ...
122
123
124
  		$loadEntities = libxml_disable_entity_loader(true);
  		$data = simplexml_load_string($xml);
  		libxml_disable_entity_loader($loadEntities);
03e52840d   Kload   Init
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  
  		$tmp=$data->data->content;
  		for($i = 0; $i < count($tmp); $i++) {
  			$app=array();
  			$app['id']=(string)$tmp[$i]->id;
  			$app['name']=(string)$tmp[$i]->name;
  			$app['label']=(string)$tmp[$i]->label;
  			$app['version']=(string)$tmp[$i]->version;
  			$app['type']=(string)$tmp[$i]->typeid;
  			$app['typename']=(string)$tmp[$i]->typename;
  			$app['personid']=(string)$tmp[$i]->personid;
  			$app['license']=(string)$tmp[$i]->license;
  			$app['detailpage']=(string)$tmp[$i]->detailpage;
  			$app['preview']=(string)$tmp[$i]->smallpreviewpic1;
  			$app['changed']=strtotime($tmp[$i]->changed);
  			$app['description']=(string)$tmp[$i]->description;
  			$app['score']=(string)$tmp[$i]->score;
  
  			$apps[]=$app;
  		}
  		return $apps;
  	}
  
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
150
151
152
  	 * Get an the applications from the OCS server
  	 * @param string $id
  	 * @return array an array of application data
03e52840d   Kload   Init
153
154
155
156
157
158
159
160
161
162
163
164
165
166
  	 *
  	 * This function returns an  applications from the OCS server
  	 */
  	public static function getApplication($id) {
  		if(OC_Config::getValue('appstoreenabled', true)==false) {
  			return null;
  		}
  		$url=OC_OCSClient::getAppStoreURL().'/content/data/'.urlencode($id);
  		$xml=OC_OCSClient::getOCSresponse($url);
  
  		if($xml==false) {
  			OC_Log::write('core', 'Unable to parse OCS content', OC_Log::FATAL);
  			return null;
  		}
837968727   Kload   [enh] Upgrade to ...
167
168
169
  		$loadEntities = libxml_disable_entity_loader(true);
  		$data = simplexml_load_string($xml);
  		libxml_disable_entity_loader($loadEntities);
03e52840d   Kload   Init
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
  
  		$tmp=$data->data->content;
  		$app=array();
  		$app['id']=$tmp->id;
  		$app['name']=$tmp->name;
  		$app['version']=$tmp->version;
  		$app['type']=$tmp->typeid;
  		$app['label']=$tmp->label;
  		$app['typename']=$tmp->typename;
  		$app['personid']=$tmp->personid;
  		$app['detailpage']=$tmp->detailpage;
  		$app['preview1']=$tmp->smallpreviewpic1;
  		$app['preview2']=$tmp->smallpreviewpic2;
  		$app['preview3']=$tmp->smallpreviewpic3;
  		$app['changed']=strtotime($tmp->changed);
  		$app['description']=$tmp->description;
  		$app['detailpage']=$tmp->detailpage;
  		$app['score']=$tmp->score;
  
  		return $app;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
193
194
195
196
197
198
199
  	 * Get the download url for an application from the OCS server
  	 * @return array an array of application data
  	 *
  	 * This function returns an download url for an applications from the OCS server
  	 * @param string $id
  	 * @param integer $item
  	 */
03e52840d   Kload   Init
200
201
202
203
204
205
206
207
208
209
210
  	public static function getApplicationDownload($id, $item) {
  		if(OC_Config::getValue('appstoreenabled', true)==false) {
  			return null;
  		}
  		$url=OC_OCSClient::getAppStoreURL().'/content/download/'.urlencode($id).'/'.urlencode($item);
  		$xml=OC_OCSClient::getOCSresponse($url);
  
  		if($xml==false) {
  			OC_Log::write('core', 'Unable to parse OCS content', OC_Log::FATAL);
  			return null;
  		}
837968727   Kload   [enh] Upgrade to ...
211
212
213
  		$loadEntities = libxml_disable_entity_loader(true);
  		$data = simplexml_load_string($xml);
  		libxml_disable_entity_loader($loadEntities);
03e52840d   Kload   Init
214
215
216
217
218
219
220
221
222
223
  
  		$tmp=$data->data->content;
  		$app=array();
  		if(isset($tmp->downloadlink)) {
  			$app['downloadlink']=$tmp->downloadlink;
  		}else{
  			$app['downloadlink']='';
  		}
  		return $app;
  	}
03e52840d   Kload   Init
224
225
  
  }