PageRenderTime 66ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/php/lib/data_manager/mdb2.class.php

https://bitbucket.org/cbenelug/chamilo-app-weblcms
PHP | 4404 lines | 3200 code | 638 blank | 566 comment | 195 complexity | 45de56de5777c7b858cbe4290ded7e4f MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. namespace application\weblcms;
  3. use application\weblcms\tool\survey\SurveyInvitation;
  4. use common\libraries\ArrayResultSet;
  5. use common\libraries\SubselectCondition;
  6. use common\libraries\ConditionTranslator;
  7. use common\libraries\NotCondition;
  8. use common\libraries\PlatformSetting;
  9. use common\libraries\Session;
  10. use common\libraries\OrCondition;
  11. use common\libraries\InCondition;
  12. use common\libraries\Utilities;
  13. use common\libraries\ObjectTableOrder;
  14. use common\libraries\AndCondition;
  15. use common\libraries\InequalityCondition;
  16. use common\libraries\EqualityCondition;
  17. use common\libraries\Request;
  18. use common\libraries\Mdb2Database;
  19. use common\libraries\Translation;
  20. use group\Group;
  21. use group\GroupDataManager;
  22. use group\GroupRelUser;
  23. use user\User;
  24. use user\UserDataManager;
  25. use repository\ContentObject;
  26. use repository\content_object\introduction\Introduction;
  27. use repository\ContentObjectPublicationAttributes;
  28. use repository\RepositoryDataManager;
  29. use repository\ComplexContentObjectItem;
  30. use repository\DatabaseRepositoryDataManager;
  31. use common\libraries\Mdb2ResultSet;
  32. use tracking\TrackingDataManager;
  33. use rights\RightsLocation;
  34. use application\weblcms\course\CourseUserRelation;
  35. use application\weblcms\course\CourseGroupRelation;
  36. use application\weblcms\course_type\CourseType;
  37. use application\weblcms\course\Course;
  38. use application\weblcms\course_type\CourseTypeRelCourseSetting;
  39. use application\weblcms\course_type\CourseTypeRelCourseSettingValue;
  40. use application\weblcms\course\CourseRelCourseSetting;
  41. use application\weblcms\course\CourseRelCourseSettingValue;
  42. use common\libraries\DataClass;
  43. use common\libraries\DataClassCache;
  44. use Doctrine\DBAL\Query\QueryBuilder;
  45. use application\weblcms\ContentObjectPublication;
  46. use application\weblcms\tool\assignment\AssignmentTool;
  47. use common\libraries\DoctrineResultSet;
  48. class Mdb2WeblcmsDataManager extends Mdb2Database implements WeblcmsDataManagerInterface
  49. {
  50. private $course_group_cache;
  51. function initialize()
  52. {
  53. parent :: initialize();
  54. $this->set_prefix('weblcms_');
  55. }
  56. function retrieve_content_object_publication($publication_id)
  57. {
  58. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_ID, $publication_id);
  59. return $this->retrieve_object(ContentObjectPublication :: get_table_name(), $condition, array(),
  60. ContentObjectPublication :: CLASS_NAME);
  61. }
  62. function retrieve_content_object_publication_feedback($publication_id)
  63. {
  64. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_PARENT_ID, $publication_id);
  65. return $this->retrieve_objects(ContentObjectPublication :: get_table_name(), $condition, null, null, array(),
  66. ContentObjectPublication :: CLASS_NAME)->as_array();
  67. }
  68. public function content_object_is_published($object_id)
  69. {
  70. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $object_id);
  71. return $this->count_objects(ContentObjectPublication :: get_table_name(), $condition) >= 1;
  72. }
  73. public function any_content_object_is_published($object_ids)
  74. {
  75. $condition = new InCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $object_ids);
  76. return $this->count_objects(ContentObjectPublication :: get_table_name(), $condition) >= 1;
  77. }
  78. function get_content_object_publication_attributes($user, $object_id, $type = null, $offset = null, $count = null,
  79. $order_properties = null)
  80. {
  81. if (isset($type))
  82. {
  83. if ($type == 'user')
  84. {
  85. $rdm = RepositoryDataManager :: get_instance();
  86. $co_alias = $rdm->get_alias(ContentObject :: get_table_name());
  87. $pub_alias = $this->get_alias(ContentObjectPublication :: get_table_name());
  88. $query = 'SELECT ' . $pub_alias . '.*, ' . $co_alias . '.' . $this->escape_column_name(
  89. ContentObject :: PROPERTY_TITLE) . ' FROM ' . $this->escape_table_name(
  90. ContentObjectPublication :: get_table_name()) . ' AS ' . $pub_alias . ' JOIN ' . $rdm->escape_table_name(
  91. ContentObject :: get_table_name()) . ' AS ' . $co_alias . ' ON ' . $this->escape_column_name(
  92. ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $pub_alias) . '=' . $this->escape_column_name(
  93. ContentObject :: PROPERTY_ID, $co_alias);
  94. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_PUBLISHER_ID,
  95. Session :: get_user_id());
  96. $translator = ConditionTranslator :: factory($this);
  97. $query .= $translator->render_query($condition);
  98. $order = array();
  99. foreach ($order_properties as $order_property)
  100. {
  101. if ($order_property->get_property() == 'application')
  102. {
  103. }
  104. elseif ($order_property->get_property() == 'location')
  105. {
  106. }
  107. elseif ($order_property->get_property() == 'title')
  108. {
  109. $order[] = $this->escape_column_name('title') . ' ' . ($order_property->get_direction() == SORT_DESC ? 'DESC' : 'ASC');
  110. }
  111. else
  112. {
  113. $order[] = $this->escape_column_name($order_property->get_property()) . ' ' . ($order_property->get_direction() == SORT_DESC ? 'DESC' : 'ASC');
  114. }
  115. }
  116. if (count($order) > 0)
  117. $query .= ' ORDER BY ' . implode(', ', $order);
  118. }
  119. }
  120. else
  121. {
  122. $query = 'SELECT * FROM ' . $this->escape_table_name(ContentObjectPublication :: get_table_name());
  123. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $object_id);
  124. $translator = ConditionTranslator :: factory($this);
  125. $query .= $translator->render_query($condition);
  126. }
  127. $this->set_limit($count, $offset);
  128. $res = $this->query($query);
  129. $publication_attr = array();
  130. while ($record = $res->fetchRow(MDB2_FETCHMODE_ASSOC))
  131. {
  132. $info = new ContentObjectPublicationAttributes();
  133. $info->set_id($record[ContentObjectPublication :: PROPERTY_ID]);
  134. $info->set_publisher_user_id($record[ContentObjectPublication :: PROPERTY_PUBLISHER_ID]);
  135. $info->set_publication_date($record[ContentObjectPublication :: PROPERTY_PUBLICATION_DATE]);
  136. $info->set_application('weblcms');
  137. // TODO: i8n location string
  138. $info->set_location(
  139. $record[ContentObjectPublication :: PROPERTY_COURSE_ID] . ' &gt; ' . $record[ContentObjectPublication :: PROPERTY_TOOL]);
  140. // TODO: set correct URL
  141. $info->set_url(
  142. 'index.php?application=weblcms&amp;go=' . WeblcmsManager :: ACTION_VIEW_COURSE . '&course=' . $record[ContentObjectPublication :: PROPERTY_COURSE_ID] . '&amp;tool=' . $record[ContentObjectPublication :: PROPERTY_TOOL] . '&amp;tool_action=' . Tool :: ACTION_VIEW . '&amp;' . Tool :: PARAM_PUBLICATION_ID . '=' . $info->get_id());
  143. $info->set_publication_object_id($record[ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID]);
  144. $publication_attr[] = $info;
  145. }
  146. $res->free();
  147. return $publication_attr;
  148. }
  149. function get_content_object_publication_attribute($publication_id)
  150. {
  151. $query = 'SELECT * FROM ' . $this->escape_table_name('content_object_publication') . ' WHERE ' . $this->escape_column_name(
  152. ContentObjectPublication :: PROPERTY_ID) . '=' . $this->quote($publication_id);
  153. $this->get_connection()->setLimit(0, 1);
  154. $res = $this->query($query);
  155. $publication_attr = array();
  156. $record = $res->fetchRow(MDB2_FETCHMODE_ASSOC);
  157. $res->free();
  158. $publication_attr = new ContentObjectPublicationAttributes();
  159. $publication_attr->set_id($record[ContentObjectPublication :: PROPERTY_ID]);
  160. $publication_attr->set_publisher_user_id($record[ContentObjectPublication :: PROPERTY_PUBLISHER_ID]);
  161. $publication_attr->set_publication_date($record[ContentObjectPublication :: PROPERTY_PUBLICATION_DATE]);
  162. $publication_attr->set_application('weblcms');
  163. // TODO: i8n location string
  164. $publication_attr->set_location(
  165. $record[ContentObjectPublication :: PROPERTY_COURSE_ID] . ' &gt; ' . $record[ContentObjectPublication :: PROPERTY_TOOL]);
  166. // TODO: set correct URL
  167. $publication_attr->set_url(
  168. 'index_weblcms.php?tool=' . $record[ContentObjectPublication :: PROPERTY_TOOL] . '&amp;cidReq=' . $record[ContentObjectPublication :: PROPERTY_COURSE_ID]);
  169. $publication_attr->set_publication_object_id($record[ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID]);
  170. return $publication_attr;
  171. }
  172. function count_publication_attributes($user = null, $object_id = null, $condition = null)
  173. {
  174. if (! $object_id)
  175. {
  176. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_PUBLISHER_ID, $user->get_id());
  177. }
  178. else
  179. {
  180. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $object_id);
  181. }
  182. return $this->count_objects(ContentObjectPublication :: get_table_name(), $condition);
  183. }
  184. function retrieve_content_object_publications($condition = null, $order_by = array(), $offset = 0, $max_objects = -1)
  185. {
  186. $publication_table_alias = $this->get_alias(ContentObjectPublication :: get_table_name());
  187. $repo_data_manager = RepositoryDataManager :: get_instance();
  188. $content_object_table_alias = $repo_data_manager->get_alias(ContentObject :: get_table_name());
  189. $query = 'SELECT ' . $publication_table_alias . '.*, ' . $content_object_table_alias . '.' . ContentObject :: PROPERTY_TITLE . ',' . $content_object_table_alias . '.' . ContentObject :: PROPERTY_DESCRIPTION . ',' . $content_object_table_alias . '.' . ContentObject :: PROPERTY_TYPE . ', ' . $content_object_table_alias . '.' . ContentObject :: PROPERTY_OWNER_ID;
  190. $query .= ' FROM ' . $this->escape_table_name(ContentObjectPublication :: get_table_name()) . ' AS ' . $publication_table_alias;
  191. $query .= ' JOIN ' . $repo_data_manager->escape_table_name(ContentObject :: get_table_name()) . ' AS ' . $content_object_table_alias . ' ON ' . $repo_data_manager->escape_column_name(
  192. ContentObject :: PROPERTY_ID, $content_object_table_alias) . '=';
  193. $query .= $this->escape_column_name(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID,
  194. $publication_table_alias);
  195. return $this->retrieve_object_set($query, ContentObjectPublication :: get_table_name(), $condition, $offset,
  196. $max_objects, $order_by, ContentObjectPublication :: CLASS_NAME);
  197. }
  198. function count_content_object_publications($condition)
  199. {
  200. $publication_table_alias = $this->get_alias(ContentObjectPublication :: get_table_name());
  201. $repo_data_manager = RepositoryDataManager :: get_instance();
  202. $content_object_table_alias = $repo_data_manager->get_alias(ContentObject :: get_table_name());
  203. $query = 'SELECT COUNT(*)';
  204. $query .= ' FROM ' . $this->escape_table_name(ContentObjectPublication :: get_table_name()) . ' AS ' . $publication_table_alias;
  205. $query .= ' JOIN ' . $repo_data_manager->escape_table_name(ContentObject :: get_table_name()) . ' AS ' . $content_object_table_alias . ' ON ' . $repo_data_manager->escape_column_name(
  206. ContentObject :: PROPERTY_ID, $content_object_table_alias) . '=';
  207. $query .= $this->escape_column_name(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID,
  208. $publication_table_alias);
  209. return $this->count_result_set($query, ContentObjectPublication :: get_table_name(), $condition);
  210. }
  211. function subscribe_user_to_allowed_courses($user_id)
  212. {
  213. $conditions = array();
  214. $conditions[] = new EqualityCondition(CommonRequest :: PROPERTY_USER_ID, $user_id);
  215. $conditions[] = new InequalityCondition(CommonRequest :: PROPERTY_DECISION_DATE,
  216. InequalityCondition :: LESS_THAN_OR_EQUAL, time());
  217. $conditions[] = new EqualityCondition(CommonRequest :: PROPERTY_DECISION, CommonRequest :: ALLOWED_DECISION);
  218. $condition = new AndCondition($conditions);
  219. $course_subscribe_requests = $this->retrieve_requests($condition);
  220. while ($course_request = $course_subscribe_requests->next_result())
  221. {
  222. $course = $this->retrieve_course($course_request->get_course_id());
  223. $user = UserDataManager :: get_instance()->retrieve_user($user_id);
  224. if (! $this->is_subscribed($course, $user))
  225. {
  226. $this->subscribe_user_to_course($course, '5', '0', $user_id);
  227. }
  228. $course_request->delete();
  229. }
  230. }
  231. function count_requests($condition = null)
  232. {
  233. return $this->count_objects(CourseRequest :: get_table_name(), $condition);
  234. }
  235. function count_course_create_requests($condition = null)
  236. {
  237. return $this->count_objects(CourseCreateRequest :: get_table_name(), $condition);
  238. }
  239. function count_course_categories($condition = null)
  240. {
  241. return $this->count_objects(CourseCategory :: get_table_name(), $condition);
  242. }
  243. function count_user_courses($condition = null)
  244. {
  245. $course_alias = $this->get_alias(Course :: get_table_name());
  246. $course_user_relation_alias = $this->get_alias(CourseUserRelation :: get_table_name());
  247. $course_group_relation_alias = $this->get_alias(CourseGroupRelation :: get_table_name());
  248. $query = 'SELECT COUNT(*) FROM ' . $this->escape_table_name(Course :: get_table_name()) . ' AS ' . $course_alias;
  249. $query .= ' LEFT JOIN ' . $this->escape_table_name(CourseUserRelation :: get_table_name()) . ' AS ' . $course_user_relation_alias . ' ON ' . $this->escape_column_name(
  250. Course :: PROPERTY_ID, $course_alias) . ' = ' . $this->escape_column_name(
  251. CourseUserRelation :: PROPERTY_COURSE_ID, $course_user_relation_alias);
  252. $query .= ' LEFT JOIN ' . $this->escape_table_name(CourseGroupRelation :: get_table_name()) . ' AS ' . $course_group_relation_alias . ' ON ' . $this->escape_column_name(
  253. Course :: PROPERTY_ID, $course_alias) . ' = ' . $this->escape_column_name(
  254. CourseGroupRelation :: PROPERTY_COURSE_ID, $course_group_relation_alias);
  255. return $this->count_result_set($query, Course :: get_table_name(), $condition);
  256. }
  257. function retrieve_user_courses($condition = null, $offset = 0, $max_objects = -1, $order_by = null)
  258. {
  259. $course_alias = $this->get_alias(Course :: get_table_name());
  260. $course_user_relation_alias = $this->get_alias(CourseUserRelation :: get_table_name());
  261. $course_group_relation_alias = $this->get_alias(CourseGroupRelation :: get_table_name());
  262. $query = 'SELECT DISTINCT ' . $course_alias . '.* FROM ' . $this->escape_table_name(Course :: get_table_name()) . ' AS ' . $course_alias;
  263. $query .= ' LEFT JOIN ' . $this->escape_table_name(CourseUserRelation :: get_table_name()) . ' AS ' . $course_user_relation_alias . ' ON ' . $this->escape_column_name(
  264. Course :: PROPERTY_ID, $course_alias) . ' = ' . $this->escape_column_name(
  265. CourseUserRelation :: PROPERTY_COURSE_ID, $course_user_relation_alias);
  266. $query .= ' LEFT JOIN ' . $this->escape_table_name(CourseGroupRelation :: get_table_name()) . ' AS ' . $course_group_relation_alias . ' ON ' . $this->escape_column_name(
  267. Course :: PROPERTY_ID, $course_alias) . ' = ' . $this->escape_column_name(
  268. CourseGroupRelation :: PROPERTY_COURSE_ID, $course_group_relation_alias);
  269. if (is_null($order_by))
  270. {
  271. $order_by[] = new ObjectTableOrder(Course :: PROPERTY_TITLE);
  272. }
  273. return $this->retrieve_object_set($query, Course :: get_table_name(), $condition, $offset, $max_objects,
  274. $order_by, Course :: class_name());
  275. }
  276. function count_course_user_categories($condition = null)
  277. {
  278. return $this->count_objects(CourseUserCategory :: get_table_name(), $condition);
  279. }
  280. function count_course_type_user_categories($condition = null)
  281. {
  282. return $this->count_objects(CourseTypeUserCategory :: get_table_name(), $condition);
  283. }
  284. function retrieve_course_list_of_user_as_course_admin($user_id)
  285. {
  286. $conditions = array();
  287. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $user_id);
  288. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_STATUS, 1);
  289. $condition = new AndCondition($conditions);
  290. return $this->retrieve_course_user_relations($condition);
  291. }
  292. function count_distinct_course_user_relations()
  293. {
  294. return $this->count_distinct(CourseUserRelation :: get_table_name(), CourseUserRelation :: PROPERTY_USER_ID);
  295. }
  296. function count_course_user_relations($condition = null)
  297. {
  298. return $this->count_objects(CourseUserRelation :: get_table_name(), $condition);
  299. }
  300. function count_course_group_relations($condition = null)
  301. {
  302. return $this->count_objects(CourseGroupRelation :: get_table_name(), $condition);
  303. }
  304. function retrieve_course_group_group_relation($id)
  305. {
  306. $condition = new EqualityCondition(CourseGroupGroupRelation :: PROPERTY_ID, $id);
  307. return $this->retrieve_object(CourseGroupGroupRelation :: get_table_name(), $condition, array(),
  308. CourseGroupGroupRelation :: CLASS_NAME);
  309. }
  310. function retrieve_course_group_group_relation_custom($condition)
  311. {
  312. return $this->retrieve_object(CourseGroupGroupRelation :: get_table_name(), $condition, array(),
  313. CourseGroupGroupRelation :: CLASS_NAME);
  314. }
  315. function retrieve_course_group_group_relation_by_name($name)
  316. {
  317. $condition = new EqualityCondition(CourseGroupGroupRelation :: PROPERTY_NAME, $name);
  318. return $this->retrieve_object(CourseGroupGroupRelation :: get_table_name(), $condition, array(),
  319. CourseGroupGroupRelation :: CLASS_NAME);
  320. }
  321. function retrieve_course_group_group_relations($condition = null, $offset = null, $count = null, $order_property = null)
  322. {
  323. return $this->retrieve_objects(CourseGroupGroupRelation::get_table_name(), $condition, $offset, $count,
  324. $order_property, CourseGroupGroupRelation::CLASS_NAME);
  325. }
  326. function update_course_group_group_relation($course_group_group_relation)
  327. {
  328. $conditions = array();
  329. $conditions[] = new EqualityCondition(CourseGroupGroupRelation :: PROPERTY_ID,
  330. $course_group_group_relation->get_id());
  331. $condition = new AndCondition($conditions);
  332. return $this->update($course_group_group_relation, $condition);
  333. }
  334. function delete_course_group_group_relation($course_group_group_relation)
  335. {
  336. $condition = new EqualityCondition(CourseGroup::PROPERTY_GROUP_ID, $course_group_group_relation->get_id());
  337. $course_groups = $this->retrieve_course_groups($condition);
  338. $success = true;
  339. while($course_group = $course_groups->next_result())
  340. {
  341. if(!$this->delete_course_group($course_group))
  342. {
  343. $success = false;
  344. }
  345. }
  346. if(!$success)
  347. {
  348. return false;
  349. }
  350. $condition = new EqualityCondition(CourseGroupGroupRelation :: PROPERTY_ID, $course_group_group_relation->get_id());
  351. $succes = $this->delete(CourseGroupGroupRelation :: get_table_name(), $condition);
  352. return $succes;
  353. }
  354. function retrieve_course_groups_by_group_id($condition = null, $offset = null, $count = null, $order_property = null)
  355. {
  356. return $this->retrieve_objects(CourseGroup :: get_table_name(), $condition, $offset, $count, $order_property,
  357. CourseGroup :: CLASS_NAME);
  358. }
  359. function retrieve_course_groups_by_course_group_group_relation_id($course_id, $course_group_group_relation_id)
  360. {
  361. $conditions[] = new EqualityCondition(CourseGroup :: PROPERTY_GROUP_ID, $course_group_group_relation_id);
  362. $conditions[] = new EqualityCondition(CourseGroup :: PROPERTY_COURSE_CODE, $course_id);
  363. $condition = new AndCondition($conditions);
  364. return $this->retrieve_objects(CourseGroup :: get_table_name(), $condition, null, null, null,
  365. CourseGroup :: CLASS_NAME);
  366. }
  367. function update_content_object_publication_id($publication_attr)
  368. {
  369. $where = $this->escape_column_name(ContentObjectPublication :: PROPERTY_ID) . '=' . $publication_attr->get_id();
  370. $props = array();
  371. $props[$this->escape_column_name(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID)] = $publication_attr->get_publication_object_id();
  372. $this->get_connection()->loadModule('Extended');
  373. if ($this->get_connection()->extended->autoExecute($this->get_table_name('content_object_publication'), $props,
  374. MDB2_AUTOQUERY_UPDATE, $where))
  375. {
  376. return true;
  377. }
  378. else
  379. {
  380. return false;
  381. }
  382. }
  383. function delete_content_object_publication($publication)
  384. {
  385. if (is_numeric($publication))
  386. {
  387. $publication = $this->retrieve_content_object_publication($publication);
  388. }
  389. $publication_id = $publication->get_id();
  390. $query = 'DELETE FROM ' . $this->escape_table_name('content_object_publication_user') . ' WHERE publication_id = ' . $this->quote(
  391. $publication_id);
  392. $res = $this->exec($query);
  393. $query = 'DELETE FROM ' . $this->escape_table_name('content_object_publication_course_group') . ' WHERE publication_id = ' . $this->quote(
  394. $publication_id);
  395. $res = $this->exec($query);
  396. $query = 'UPDATE ' . $this->escape_table_name('content_object_publication') . ' SET ' . $this->escape_column_name(
  397. ContentObjectPublication :: PROPERTY_DISPLAY_ORDER_INDEX) . '=' . $this->escape_column_name(
  398. ContentObjectPublication :: PROPERTY_DISPLAY_ORDER_INDEX) . '-1 WHERE ' . $this->escape_column_name(
  399. ContentObjectPublication :: PROPERTY_DISPLAY_ORDER_INDEX) . '>' . $this->quote(
  400. $publication->get_display_order_index()) . ' AND ' . $this->escape_column_name(
  401. ContentObjectPublication :: PROPERTY_COURSE_ID) . '=' . $publication->get_course_id() . ' AND ' . $this->escape_column_name(
  402. ContentObjectPublication :: PROPERTY_TOOL) . '=\'' . $publication->get_tool() . '\' AND ' . $this->escape_column_name(
  403. ContentObjectPublication :: PROPERTY_CATEGORY_ID) . '=' . $publication->get_category_id();
  404. $res = $this->exec($query);
  405. $query = 'DELETE FROM ' . $this->escape_table_name('content_object_publication') . ' WHERE ' . $this->escape_column_name(
  406. ContentObjectPublication :: PROPERTY_ID) . '=' . $this->quote($publication_id);
  407. $this->get_connection()->setLimit(0, 1);
  408. $res = $this->exec($query);
  409. return true;
  410. }
  411. function delete_content_object_publications($object_id)
  412. {
  413. $condition = new EqualityCondition(ContentObjectPublication :: PROPERTY_CONTENT_OBJECT_ID, $object_id);
  414. $publications = $this->retrieve_content_object_publications($condition);
  415. while ($publication = $publications->next_result())
  416. {
  417. $publication->delete();
  418. }
  419. return true;
  420. }
  421. function retrieve_content_object_publication_category($id)
  422. {
  423. $condition = new EqualityCondition(ContentObjectPublicationCategory :: PROPERTY_ID, $id);
  424. return $this->retrieve_object(ContentObjectPublicationCategory :: get_table_name(), $condition, array(),
  425. ContentObjectPublicationCategory :: CLASS_NAME);
  426. }
  427. function move_content_object_publication($publication, $places)
  428. {
  429. if ($places < 0)
  430. {
  431. return $this->move_content_object_publication_up($publication, - $places);
  432. }
  433. else
  434. {
  435. return $this->move_content_object_publication_down($publication, $places);
  436. }
  437. }
  438. function retrieve_course_module_access($condition = null, $order_by = array())
  439. {
  440. return $this->retrieve_object(CourseModuleLastAccess :: get_table_name(), $condition, $order_by,
  441. CourseModuleLastAccess :: CLASS_NAME);
  442. }
  443. function retrieve_course_module_accesses($condition = null, $offset = null, $max_objects = null, $order_by = null)
  444. {
  445. return $this->retrieve_objects(CourseModuleLastAccess :: get_table_name(), $condition, $offset, $max_objects,
  446. $order_by, CourseModuleLastAccess :: CLASS_NAME);
  447. }
  448. function log_course_module_access($course_code, $user_id, $module_name = null, $category_id = 0)
  449. {
  450. $conditions = array();
  451. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_COURSE_CODE, $course_code);
  452. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_USER_ID, $user_id);
  453. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_MODULE_NAME, $module_name);
  454. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_CATEGORY_ID, $category_id);
  455. $condition = new AndCondition($conditions);
  456. $course_module_last_access = $this->retrieve_course_module_access($condition);
  457. if (! $course_module_last_access)
  458. {
  459. $course_module_last_access = new CourseModuleLastAccess();
  460. $course_module_last_access->set_course_code($course_code);
  461. $course_module_last_access->set_user_id($user_id);
  462. $course_module_last_access->set_module_name($module_name);
  463. $course_module_last_access->set_category_id($category_id);
  464. $course_module_last_access->set_access_date(time());
  465. return $course_module_last_access->create();
  466. }
  467. else
  468. {
  469. $course_module_last_access->set_access_date(time());
  470. return $course_module_last_access->update();
  471. }
  472. }
  473. /**
  474. * Creates a course module last acces in the database
  475. *
  476. * @param $coursemodule_last_accces CourseModuleLastAccess
  477. */
  478. function update_course_module_last_access($coursemodule_last_accces)
  479. {
  480. $conditions = array();
  481. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_COURSE_CODE,
  482. $coursemodule_last_accces->get_course_code());
  483. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_MODULE_NAME,
  484. $coursemodule_last_accces->get_module_name());
  485. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_USER_ID,
  486. $coursemodule_last_accces->get_user_id());
  487. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_CATEGORY_ID,
  488. $coursemodule_last_accces->get_category_id());
  489. $condition = new AndCondition($conditions);
  490. $this->update($coursemodule_last_accces, $condition);
  491. }
  492. /**
  493. * Returns the last visit date per course and module
  494. *
  495. * @param $course_code <type>
  496. * @param $module_name <type>
  497. * @return <type>
  498. */
  499. function get_last_visit_date_per_course($course_code, $module_name = null, $user_id = null)
  500. {
  501. $conditions = array();
  502. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_COURSE_CODE, $course_code);
  503. if (! is_null($module_name))
  504. {
  505. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_MODULE_NAME, $module_name);
  506. }
  507. if (! is_null($user_id))
  508. {
  509. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_USER_ID, $user_id);
  510. }
  511. $condition = new AndCondition($conditions);
  512. $order_by = new ObjectTableOrder(CourseModuleLastAccess :: PROPERTY_ACCESS_DATE, SORT_DESC);
  513. $course_module_access = $this->retrieve_course_module_access($condition, $order_by);
  514. if (! $course_module_access)
  515. {
  516. return 0;
  517. }
  518. else
  519. {
  520. return $course_module_access->get_access_date();
  521. }
  522. }
  523. function get_last_visit_date($course_code, $user_id, $module_name = null, $category_id = 0)
  524. {
  525. $conditions = array();
  526. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_COURSE_CODE, $course_code);
  527. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_USER_ID, $user_id);
  528. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_CATEGORY_ID, $category_id);
  529. if (! is_null($module_name))
  530. {
  531. $conditions[] = new EqualityCondition(CourseModuleLastAccess :: PROPERTY_MODULE_NAME, $module_name);
  532. }
  533. $condition = new AndCondition($conditions);
  534. $order_by = new ObjectTableOrder(CourseModuleLastAccess :: PROPERTY_ACCESS_DATE, SORT_DESC);
  535. $course_module_access = $this->retrieve_course_module_access($condition, $order_by);
  536. if (! $course_module_access)
  537. {
  538. return 0;
  539. }
  540. else
  541. {
  542. return $course_module_access->get_access_date();
  543. }
  544. }
  545. function get_course_modules($course_code, $order_by_name = false)
  546. {
  547. $query = 'SELECT * FROM ' . $this->escape_table_name('course_module') . ' WHERE course_id = ' . $this->quote(
  548. $course_code);
  549. if ($order_by_name)
  550. {
  551. $query .= ' ORDER BY ' . CourseModule :: PROPERTY_NAME;
  552. }
  553. else
  554. {
  555. $query .= ' ORDER BY ' . CourseModule :: PROPERTY_SORT;
  556. }
  557. $res = $this->query($query);
  558. $modules = array();
  559. $module = null;
  560. while ($module = $res->fetchRow(MDB2_FETCHMODE_OBJECT))
  561. {
  562. $modules[$module->name] = $module;
  563. }
  564. $res->free();
  565. return $modules;
  566. }
  567. // DEPRECATED
  568. function get_all_course_modules()
  569. {
  570. return $this->retrieve_distinct(CourseModule :: get_table_name(), CourseModule :: PROPERTY_NAME);
  571. }
  572. function retrieve_course_module($id)
  573. {
  574. $condition = new EqualityCondition(CourseModule :: PROPERTY_ID, $id);
  575. return $this->retrieve_object(CourseModule :: get_table_name(), $condition, array(), CourseModule :: CLASS_NAME);
  576. }
  577. /**
  578. * Retrieves a single course tool by id
  579. *
  580. * @param $tool_id type
  581. * @return type
  582. */
  583. function retrieve_course_tool($tool_id)
  584. {
  585. $condition = new EqualityCondition(CourseTool :: PROPERTY_ID, $tool_id);
  586. return $this->retrieve_objects(CourseTool :: get_table_name(), $condition, $offset, $max_objects, $order_by);
  587. }
  588. /**
  589. * Returns the course tools
  590. *
  591. * @param $condition Condition
  592. * @param $offset int
  593. * @param $max_objects int
  594. * @param $order_by int
  595. *
  596. * @return ResultSet <CourseTool>
  597. */
  598. function retrieve_course_tools($condition = null, $offset = null, $max_objects = null, $order_by = null)
  599. {
  600. return $this->retrieve_objects(CourseTool :: get_table_name(), $condition, $offset, $max_objects, $order_by);
  601. }
  602. function retrieve_course_module_by_name($course_id, $course_module)
  603. {
  604. $conditions = array();
  605. $conditions[] = new EqualityCondition(CourseModule :: PROPERTY_COURSE_CODE, $course_id);
  606. $conditions[] = new EqualityCondition(CourseModule :: PROPERTY_NAME, $course_module);
  607. $condition = new AndCondition($conditions);
  608. return $this->retrieve_object(CourseModule :: get_table_name(), $condition, array(), CourseModule :: CLASS_NAME);
  609. }
  610. // CTODO - move this to course datamanager
  611. function retrieve_course_user_relation($course_code, $user_id)
  612. {
  613. $conditions = array();
  614. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $course_code);
  615. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $user_id);
  616. $condition = new AndCondition($conditions);
  617. return $this->retrieve_object(CourseUserRelation :: get_table_name(), $condition, array(),
  618. 'application\weblcms\course\CourseUserRelation');
  619. }
  620. // CTODO - move this to course datamanager
  621. function retrieve_course_user_relations($condition = null, $offset = null, $count = null, $order_property = null)
  622. {
  623. return $this->retrieve_objects(CourseUserRelation :: get_table_name(), $condition, $offset, $count,
  624. $order_property, 'application\weblcms\course\CourseUserRelation');
  625. }
  626. // CTODO - move this to course datamanager
  627. function retrieve_course_group_relations($condition = null, $offset = null, $count = null, $order_property = null)
  628. {
  629. return $this->retrieve_objects(CourseGroupRelation :: get_table_name(), $condition, $offset, $count,
  630. $order_property, 'application\weblcms\course\CourseGroupRelation');
  631. }
  632. function retrieve_course_type_user_category_at_sort($user_id, $course_type_id, $sort, $direction)
  633. {
  634. $conditions = array();
  635. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_USER_ID, $user_id);
  636. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_COURSE_TYPE_ID, $course_type_id);
  637. if ($direction == 'up')
  638. {
  639. $conditions[] = new InequalityCondition(CourseTypeUserCategory :: PROPERTY_SORT,
  640. InequalityCondition :: LESS_THAN, $sort);
  641. $order_direction = SORT_DESC;
  642. }
  643. elseif ($direction == 'down')
  644. {
  645. $conditions[] = new InequalityCondition(CourseTypeUserCategory :: PROPERTY_SORT,
  646. InequalityCondition :: GREATER_THAN, $sort);
  647. $order_direction = SORT_ASC;
  648. }
  649. $condition = new AndCondition($conditions);
  650. return $this->retrieve_object(CourseTypeUserCategory :: get_table_name(), $condition,
  651. array(new ObjectTableOrder(CourseTypeUserCategory :: PROPERTY_SORT, $order_direction)),
  652. CourseTypeUserCategory :: CLASS_NAME);
  653. }
  654. function create_course_modules($course_modules, $course_id)
  655. {
  656. $condition = new EqualityCondition(CourseSection :: PROPERTY_COURSE_ID, $course_id);
  657. $sections_set = $this->retrieve_course_sections($condition);
  658. $sections = array();
  659. while ($section = $sections_set->next_result())
  660. {
  661. $sections[$section->get_type()][] = $section;
  662. }
  663. foreach ($course_modules as $module)
  664. {
  665. $section_id = $sections[CourseSection :: TYPE_TOOL][0]->get_id();
  666. $module->set_section($section_id);
  667. if (! $module->create())
  668. return false;
  669. }
  670. $admin_tools = WeblcmsDataManager :: get_tools('course_admin');
  671. foreach ($admin_tools as $index => $tool_name)
  672. {
  673. $section_id = $sections[CourseSection :: TYPE_ADMIN][0]->get_id();
  674. $module = new CourseModule();
  675. $module->set_course_code($course_code);
  676. $module->set_name($tool_name);
  677. $module->set_visible(1);
  678. $module->set_section($section_id);
  679. $module->set_sort($index);
  680. if (! $module->create())
  681. return false;
  682. }
  683. return true;
  684. }
  685. private $is_subscribed_cache;
  686. function is_subscribed($course, $user)
  687. {
  688. $course_id = $course;
  689. if ($course instanceof Course)
  690. {
  691. $course_id = $course->get_id();
  692. }
  693. if(!$user instanceof \user\User)
  694. {
  695. $user = \user\DataManager :: retrieve_user($user);
  696. }
  697. if (is_null($this->is_subscribed_cache[$course_id][$user->get_id()]))
  698. {
  699. $conditions = array();
  700. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $user->get_id());
  701. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $course_id);
  702. $condition = new AndCondition($conditions);
  703. $has_user_relations = $this->count_objects(CourseUserRelation :: get_table_name(), $condition) > 0;
  704. $groups = $user->get_groups(true);
  705. if ($groups)
  706. {
  707. $conditions = array();
  708. $conditions[] = new InCondition(CourseGroupRelation :: PROPERTY_GROUP_ID, $user->get_groups(true));
  709. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $course_id);
  710. $condition = new AndCondition($conditions);
  711. $has_group_relations = $this->count_objects(CourseGroupRelation :: get_table_name(), $condition) > 0;
  712. }
  713. else
  714. $has_group_relations = false;
  715. $this->is_subscribed_cache[$course_id][$user->get_id()] = $has_user_relations || $has_group_relations;
  716. }
  717. return $this->is_subscribed_cache[$course_id][$user->get_id()];
  718. }
  719. function is_group_subscribed($course_id, $group_id)
  720. {
  721. $conditions = array();
  722. $conditions[] = new EqualityCondition(CourseGroupRelation :: PROPERTY_GROUP_ID, $group_id);
  723. $conditions[] = new EqualityCondition(CourseGroupRelation :: PROPERTY_COURSE_ID, $course_id);
  724. $condition = new AndCondition($conditions);
  725. return $this->count_objects(CourseGroupRelation :: get_table_name(), $condition) > 0;
  726. }
  727. function is_course_category($category)
  728. {
  729. $condition = new EqualityCondition(CourseCategory :: PROPERTY_ID, $category);
  730. return $this->count_objects(CourseCategory :: get_table_name(), $condition) > 0;
  731. }
  732. function is_course($course_code)
  733. {
  734. $condition = new EqualityCondition(Course :: PROPERTY_ID, $course_code);
  735. return $this->count_objects(Course :: get_table_name(), $condition) > 0;
  736. }
  737. function is_course_admin($course, $user_id)
  738. {
  739. $course_id = $course;
  740. if ($course instanceof Course)
  741. {
  742. $course_id = $course->get_id();
  743. }
  744. $conditions = array();
  745. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $course_id);
  746. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $user_id);
  747. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_STATUS, 1);
  748. $condition = new AndCondition($conditions);
  749. return $this->count_objects(CourseUserRelation :: get_table_name(), $condition) > 0;
  750. }
  751. function retrieve_next_course_user_relation_sort_value(CourseUserRelation $course_user_relation)
  752. {
  753. $course = $this->retrieve_course($course_user_relation->get_course());
  754. $subcondition = new EqualityCondition(Course :: PROPERTY_COURSE_TYPE_ID, $course->get_course_type_id());
  755. $conditions[] = new SubselectCondition(CourseUserRelation :: PROPERTY_COURSE_ID, Course :: PROPERTY_ID,
  756. Course :: get_table_name(), $subcondition);
  757. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $course_user_relation->get_user());
  758. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_CATEGORY,
  759. $course_user_relation->get_category());
  760. $condition = new AndCondition($conditions);
  761. return $this->retrieve_max_sort_value(CourseUserRelation :: get_table_name(),
  762. CourseUserRelation :: PROPERTY_SORT, $condition) + 1;
  763. }
  764. function subscribe_user_to_course($course, $status, $tutor_id, $user_id)
  765. {
  766. $course_id = $course;
  767. if ($course instanceof Course)
  768. {
  769. $course_id = $course->get_id();
  770. }
  771. $course_user_relation = new CourseUserRelation();
  772. $course_user_relation->set_course_id($course_id);
  773. $course_user_relation->set_user_id($user_id);
  774. $course_user_relation->set_status($status);
  775. if ($course_user_relation->create())
  776. {
  777. return true;
  778. }
  779. else
  780. {
  781. return false;
  782. }
  783. }
  784. function subscribe_group_to_course(Course $course, $group_id, $status)
  785. {
  786. $this->get_connection()->loadModule('Extended');
  787. $course_group_relation = new CourseGroupRelation();
  788. $course_group_relation->set_course_id($course->get_id());
  789. $course_group_relation->set_group_id($group_id);
  790. $course_group_relation->set_status($status);
  791. if ($course_group_relation->create())
  792. {
  793. return true;
  794. }
  795. else
  796. {
  797. return false;
  798. }
  799. }
  800. function create_course_user_relation($courseuserrelation)
  801. {
  802. $props = array();
  803. foreach ($courseuserrelation->get_default_properties() as $key => $value)
  804. {
  805. $props[$this->escape_column_name($key)] = $value;
  806. }
  807. $this->get_connection()->loadModule('Extended');
  808. if ($this->get_connection()->extended->autoExecute(
  809. $this->get_table_name(CourseUserRelation :: get_table_name()), $props, MDB2_AUTOQUERY_INSERT))
  810. {
  811. return true;
  812. }
  813. else
  814. {
  815. return false;
  816. }
  817. }
  818. function unsubscribe_user_from_course($course, $user_id)
  819. {
  820. $conditions = array();
  821. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $course->get_id());
  822. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $user_id);
  823. $condition = new AndCondition($conditions);
  824. return $this->delete_objects(CourseUserRelation :: get_table_name(), $condition);
  825. }
  826. function unsubscribe_group_from_course(Course $course, $group_id)
  827. {
  828. $conditions = array();
  829. $conditions[] = new EqualityCondition(CourseGroupRelation :: PROPERTY_COURSE_ID, $course->get_id());
  830. $conditions[] = new EqualityCondition(CourseGroupRelation :: PROPERTY_GROUP_ID, $group_id);
  831. $condition = new AndCondition($conditions);
  832. return $this->delete_objects(CourseGroupRelation :: get_table_name(), $condition);
  833. }
  834. function delete_course_type_user_category($course_type_user_category)
  835. {
  836. $condition = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_ID, $course_type_user_category->get_id());
  837. if ($this->delete_objects(CourseTypeUserCategory :: get_table_name(), $condition))
  838. {
  839. $condition = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_COURSE_USER_CATEGORY_ID,
  840. $course_type_user_category->get_course_user_category_id());
  841. $count = $this->count_course_type_user_categories($condition);
  842. if ($count == 0)
  843. {
  844. $condition = new EqualityCondition(CourseUserCategory :: PROPERTY_ID,
  845. $course_type_user_category->get_course_user_category_id());
  846. $course_user_category = $this->retrieve_course_user_category($condition);
  847. if (! $course_user_category->delete())
  848. {
  849. return false;
  850. }
  851. }
  852. $conditions = array();
  853. $conditions[] = new EqualityCondition(
  854. CourseTypeUserCategoryRelCourse :: PROPERTY_COURSE_TYPE_USER_CATEGORY_ID,
  855. $course_type_user_category->get_id());
  856. $condition = new AndCondition($conditions);
  857. $course_type_user_category_rel_courses = $this->retrieve_course_type_user_category_rel_courses($condition);
  858. while ($course_type_user_category_rel_course = $course_type_user_category_rel_courses->next_result())
  859. {
  860. if (! $course_type_user_category_rel_course->delete())
  861. {
  862. return false;
  863. }
  864. }
  865. $conditions = array();
  866. $conditions[] = new InEqualityCondition(CourseTypeUserCategory :: PROPERTY_SORT,
  867. InEqualityCondition :: GREATER_THAN, $course_type_user_category->get_sort());
  868. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_COURSE_TYPE_ID,
  869. $course_type_user_category->get_course_type_id());
  870. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_USER_ID,
  871. $course_type_user_category->get_user_id());
  872. $condition = new AndCondition($conditions);
  873. $properties = array();
  874. $properties[CourseTypeUserCategory :: PROPERTY_SORT] = $this->escape_column_name(
  875. CourseTypeUserCategory :: PROPERTY_SORT) . '-1';
  876. return $this->update_objects(CourseTypeUserCategory :: get_table_name(), $properties, $condition);
  877. }
  878. else
  879. {
  880. return false;
  881. }
  882. }
  883. function delete_course_user($courseuser)
  884. {
  885. $conditions = array();
  886. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID, $courseuser->get_course());
  887. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID, $courseuser->get_user());
  888. $condition = new AndCondition($conditions);
  889. return $this->delete_objects(CourseUserRelation :: get_table_name(), $condition);
  890. }
  891. function delete_course_category($course_category)
  892. {
  893. $condition = new EqualityCondition(CourseCategory :: PROPERTY_ID, $course_category->get_id());
  894. $success = $this->delete_objects(CourseCategory :: get_table_name(), $condition);
  895. if ($success)
  896. {
  897. $condition = new EqualityCondition(CourseCategory :: PROPERTY_PARENT, $course_category->get_id());
  898. $properties = array(CourseCategory :: PROPERTY_PARENT => $course_category->get_parent());
  899. $success = $this->update_objects(CourseCategory :: get_table_name(), $properties, $condition);
  900. if ($success)
  901. {
  902. $condition = new EqualityCondition(Course :: PROPERTY_CATEGORY_ID, $course_category->get_id());
  903. $properties = array(Course :: PROPERTY_CATEGORY_ID => $course_category->get_parent());
  904. return $this->update_objects(Course :: get_table_name(), $properties, $condition);
  905. }
  906. else
  907. {
  908. return false;
  909. }
  910. }
  911. else
  912. {
  913. return false;
  914. }
  915. }
  916. function update_courses($properties, $condition)
  917. {
  918. return $this->update_objects(Course :: get_table_name(), $properties, $condition);
  919. }
  920. function update_course_module($course_module)
  921. {
  922. $conditions = array();
  923. $conditions[] = new EqualityCondition(CourseModule :: PROPERTY_COURSE_CODE, $course_module->get_course_code());
  924. $conditions[] = new EqualityCondition(CourseModule :: PROPERTY_NAME, $course_module->get_name());
  925. $condition = new AndCondition($conditions);
  926. return $this->update($course_module, $condition);
  927. }
  928. /**
  929. * Updates the visibility of the course modules
  930. *
  931. * @param $condition Condition define the to be updated modules and course
  932. * @param $visibility bool visibility
  933. */
  934. function update_course_module_visibility($condition, $visibility)
  935. {
  936. // $and_condition = new AndConditon
  937. $properties = array(CourseModule :: PROPERTY_VISIBLE => $visibility);
  938. $this->update_objects(CourseModule :: get_table_name(), $properties, $condition);
  939. }
  940. function update_course_type_user_category($course_type_user_category)
  941. {
  942. $conditions = array();
  943. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_COURSE_TYPE_ID,
  944. $course_type_user_category->get_course_type_id());
  945. $conditions[] = new EqualityCondition(CourseTypeUserCategory :: PROPERTY_COURSE_USER_CATEGORY_ID,
  946. $course_type_user_category->get_course_user_category_id());
  947. $condition = new AndCondition($conditions);
  948. return $this->update($course_type_user_category, $condition);
  949. }
  950. function update_course_user_relation($course_user_relation)
  951. {
  952. $conditions = array();
  953. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_COURSE_ID,
  954. $course_user_relation->get_course_id());
  955. $conditions[] = new EqualityCondition(CourseUserRelation :: PROPERTY_USER_ID,
  956. $course_user_relation->get_user_id());
  957. $condition = new AndCondition($conditions);
  958. return $this->update($course_user_relation, $condition);
  959. }
  960. function delete_courses_by_course_type_id($course_type_id)
  961. {
  962. $condition = new EqualityCondition(Course :: PROPERTY_COURSE_TYPE_ID, $course_type_id);
  963. $resultset = $this->retrieve_courses($condition);
  964. while ($result = $resultset->next_result())
  965. {
  966. if (! $this->delete_course($result->get_id()))
  967. return false;
  968. }
  969. return true;
  970. }
  971. function delete_course($course_code)

Large files files are truncated, but you can click here to view the full file