PageRenderTime 27ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/php/slideshare_external_repository_manager_connector.class.php

https://bitbucket.org/chamilo/chamilo-ext-repo-slideshare-dev/
PHP | 304 lines | 193 code | 37 blank | 74 comment | 8 complexity | 4c123fd942151b8f7818ba9519a0435c MD5 | raw file
  1. <?php
  2. namespace common\extensions\external_repository_manager\implementation\slideshare;
  3. use common\libraries;
  4. use common\libraries\Path;
  5. use common\libraries\Request;
  6. use common\libraries\Redirect;
  7. use common\libraries\ActionBarSearchForm;
  8. use common\libraries\ArrayResultSet;
  9. use common\libraries\Session;
  10. use repository\ExternalUserSetting;
  11. use repository\ExternalSetting;
  12. use repository\RepositoryDataManager;
  13. use RestClient;
  14. use common\extensions\external_repository_manager\ExternalRepositoryManagerConnector;
  15. use common\extensions\external_repository_manager\ExternalRepositoryObject;
  16. require_once dirname(__FILE__) . '/slideshare_external_repository_object.class.php';
  17. require_once dirname(__FILE__) . '/webservices/slideshare_rest_client.class.php';
  18. class SlideshareExternalRepositoryManagerConnector extends ExternalRepositoryManagerConnector
  19. {
  20. private $slideshare;
  21. private $consumer_key;
  22. private $consumer_secret;
  23. private $user;
  24. private $password;
  25. /**
  26. * @param ExternalRepository $external_repository_instance
  27. */
  28. function __construct($external_repository_instance)
  29. {
  30. parent :: __construct($external_repository_instance);
  31. $this->consumer_key = ExternalSetting :: get('consumer_key', $this->get_external_repository_instance_id());
  32. $this->consumer_secret = ExternalSetting :: get('consumer_secret', $this->get_external_repository_instance_id());
  33. $this->user = ExternalSetting :: get('username', $this->get_external_repository_instance_id());
  34. $this->password = ExternalSetting :: get('password', $this->get_external_repository_instance_id());
  35. $this->slideshare = new SlideshareRestClient('https://www.slideshare.net/api/2/');
  36. $this->slideshare->set_connexion_mode(RestClient :: MODE_PEAR);
  37. }
  38. /**
  39. * @param mixed $condition
  40. * @param ObjectTableOrder $order_property
  41. * @param int $offset
  42. * @param int $count
  43. * @return ArrayResultSet
  44. */
  45. function retrieve_external_repository_objects($condition = null, $order_property, $offset, $count)
  46. {
  47. if (is_null($condition))
  48. {
  49. $condition = 'default';
  50. }
  51. $date = time();
  52. $hash = sha1($this->consumer_secret . $date);
  53. $params = array();
  54. $params['api_key'] = $this->consumer_key;
  55. $params['ts'] = $date;
  56. $params['hash'] = $hash;
  57. $params['tag'] = $condition;
  58. $params['limit'] = $count;
  59. $params['offset'] = $offset;
  60. $result = $this->slideshare->request(SlideshareRestClient :: METHOD_GET, 'get_slideshows_by_tag', $params);
  61. $slideshows = (array) $result->get_response_content_xml();
  62. $objects = array();
  63. foreach ($slideshows['Slideshow'] as $slideshow)
  64. {
  65. $objects[] = $this->get_slideshow($slideshow);
  66. }
  67. return new ArrayResultSet($objects);
  68. }
  69. function get_slideshow($slideshow)
  70. {
  71. $slideshow = (array) $slideshow;
  72. $object = new SlideshareExternalRepositoryObject();
  73. $object->set_id((int) $slideshow['ID']);
  74. $object->set_external_repository_id($this->get_external_repository_instance_id());
  75. $object->set_title((string) $slideshow['Title']);
  76. $object->set_description((string) $slideshow['Description']);
  77. $object->set_created($slideshow['Created']);
  78. $object->set_modified($slideshow['Updated']);
  79. $object->set_urls((string) $slideshow['URL']);
  80. $object->set_thumbnail($slideshow['ThumbnailSmallURL']);
  81. $object->set_rights($this->determine_rights());
  82. return $object;
  83. }
  84. /**
  85. * @param mixed $condition
  86. * @return int
  87. */
  88. function count_external_repository_objects($condition)
  89. {
  90. if (is_null($condition))
  91. {
  92. $condition = 'default';
  93. }
  94. $date = time();
  95. $hash = sha1($this->consumer_secret . $date);
  96. $params = array();
  97. $params['api_key'] = $this->consumer_key;
  98. $params['ts'] = $date;
  99. $params['hash'] = $hash;
  100. $params['tag'] = $condition;
  101. $result = $this->slideshare->request(SlideshareRestClient :: METHOD_GET, 'get_slideshows_by_tag', $params);
  102. $slideshows = (array) $result->get_response_content_xml();
  103. $objects = array();
  104. $count = 0;
  105. foreach ($slideshows['Slideshow'] as $slideshow)
  106. {
  107. $count ++;
  108. }
  109. return $count;
  110. }
  111. /**
  112. * @param string $query
  113. * @return string
  114. */
  115. static function translate_search_query($query)
  116. {
  117. return $query;
  118. }
  119. /**
  120. * @param ObjectTableOrder $order_properties
  121. * @return string|null
  122. */
  123. function convert_order_property($order_properties)
  124. {
  125. if (count($order_properties) > 0)
  126. {
  127. $order_property = $order_properties[0]->get_property();
  128. if ($order_property == self :: SORT_RELEVANCE)
  129. {
  130. return $order_property;
  131. }
  132. else
  133. {
  134. $sorting_direction = $order_properties[0]->get_direction();
  135. if ($sorting_direction == SORT_ASC)
  136. {
  137. return $order_property . '-asc';
  138. }
  139. elseif ($sorting_direction == SORT_DESC)
  140. {
  141. return $order_property . '-desc';
  142. }
  143. }
  144. }
  145. return null;
  146. }
  147. /**
  148. * @return array
  149. */
  150. static function get_sort_properties()
  151. {
  152. $feed_type = Request :: get(SlideshareExternalRepositoryManager :: PARAM_FEED_TYPE);
  153. $query = ActionBarSearchForm :: get_query();
  154. return array();
  155. }
  156. /* (non-PHPdoc)
  157. * @see application/common/external_repository_manager/ExternalRepositoryManagerConnector#retrieve_external_repository_object()
  158. */
  159. function retrieve_external_repository_object($id)
  160. {
  161. $date = time();
  162. $hash = sha1($this->consumer_secret . $date);
  163. $params = array();
  164. $params['slideshow_id'] = $id;
  165. $params['api_key'] = $this->consumer_key;
  166. $params['ts'] = $date;
  167. $params['hash'] = $hash;
  168. $slideshow = $this->slideshare->request(SlideshareRestClient :: METHOD_GET, 'get_slideshow', $params);
  169. $slideshow = (array) $slideshow->get_response_content_xml();
  170. $object = new SlideshareExternalRepositoryObject();
  171. $object->set_external_repository_id($this->get_external_repository_instance_id());
  172. $object->set_id($slideshow['ID']);
  173. $object->set_title($slideshow['Title']);
  174. $object->set_description($slideshow['Description']);
  175. $object->set_created($slideshow['Created']);
  176. $object->set_modified($slideshow['Updated']);
  177. $object->set_owner_id($slideshow['Username']);
  178. $object->set_urls($slideshow['URL']);
  179. $object->set_embed($slideshow['Embed']);
  180. $object->set_rights($this->determine_rights());
  181. return $object;
  182. }
  183. /**
  184. * @param array $values
  185. * @return boolean
  186. */
  187. function update_external_repository_object($values)
  188. {
  189. /*$date = time();
  190. $hash = sha1($this->consumer_secret . $date);
  191. $params = array();
  192. $params['api_key'] = $this->consumer_key;
  193. $params['ts'] = $date;
  194. $params['hash'] = $hash;
  195. $params['slideshow_id'] = $values[SlideshareExternalRepositoryObject :: PROPERTY_ID];
  196. $result = $this->slideshare->request(SlideshareRestClient :: METHOD_GET, 'edit_slideshow', $params);
  197. $slideshows = (array) $result->get_response_content_xml();
  198. */
  199. }
  200. /**
  201. * @param array $values
  202. * @return mixed
  203. */
  204. function create_external_repository_object($values, $slideshow)
  205. {
  206. $date = time();
  207. $hash = sha1($this->consumer_secret . $date);
  208. $params = array();
  209. $params['api_key'] = $this->consumer_key;
  210. $params['ts'] = $date;
  211. $params['hash'] = $hash;
  212. $params['username'] = $this->user;
  213. $params['password'] = $this->password;
  214. $params['slideshow_title'] = $values['title'];
  215. $params['slideshow_srcfile'] = file_get_contents($slideshow['tmp_name']);
  216. $this->slideshare->set_header_data('Content-Type', 'multipart/form-data');
  217. $this->slideshare->set_header_data('enctype', 'multipart/form-data');
  218. $slideshow1 = $this->slideshare->request(SlideshareRestClient :: METHOD_POST, 'upload_slideshow', $params);
  219. /*$slideshow1 = $slideshow1->get_response_content_xml();
  220. */
  221. }
  222. /**
  223. * @param ContentObject $content_object
  224. * @return mixed
  225. */
  226. function export_external_repository_object($content_object)
  227. {
  228. }
  229. /**
  230. * @param int $license
  231. * @return boolean
  232. */
  233. function determine_rights()
  234. {
  235. $rights = array();
  236. $rights[ExternalRepositoryObject :: RIGHT_USE] = true;
  237. $rights[ExternalRepositoryObject :: RIGHT_EDIT] = true;
  238. $rights[ExternalRepositoryObject :: RIGHT_DELETE] = false;
  239. $rights[ExternalRepositoryObject :: RIGHT_DOWNLOAD] = false;
  240. return $rights;
  241. }
  242. /**
  243. * @param string $id
  244. * @return mixed
  245. */
  246. function delete_external_repository_object($id)
  247. {
  248. /*$date = time();
  249. $hash = sha1($this->consumer_secret . $date);
  250. $params = array();
  251. $params['api_key'] = $this->consumer_key;
  252. $params['ts'] = $date;
  253. $params['hash'] = $hash;
  254. $params['slideshow_id'] = $id;
  255. $params['username'] = $this->user;
  256. $params['password'] = $this->password;
  257. $slideshow = $this->slideshare->request(SlideshareRestClient :: METHOD_GET, 'delete_slideshow', $params);
  258. $slideshow = (array) $slideshow->get_response_content_xml();
  259. */
  260. }
  261. function download_external_repository_object($id)
  262. {
  263. }
  264. }
  265. ?>