course_description.lib.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This file contains a class used like library provides functions for
  5. * course description tool. It's also used like model to
  6. * course_description_controller (MVC pattern).
  7. *
  8. * @author Christian Fasanando <christian1827@gmail.com>
  9. *
  10. * @package chamilo.course_description
  11. */
  12. /**
  13. * Class CourseDescription course descriptions.
  14. *
  15. * @package chamilo.course_description
  16. */
  17. class CourseDescription
  18. {
  19. private $id;
  20. private $course_id;
  21. private $title;
  22. private $content;
  23. private $session_id;
  24. private $description_type;
  25. private $progress;
  26. /**
  27. * Constructor.
  28. */
  29. public function __construct()
  30. {
  31. }
  32. /**
  33. * Returns an array of objects of type CourseDescription corresponding to
  34. * a specific course, without session ids (session id = 0).
  35. *
  36. * @param int $course_id
  37. *
  38. * @return array Array of CourseDescriptions
  39. */
  40. public static function get_descriptions($course_id)
  41. {
  42. $course_id = (int) $course_id;
  43. // Get course code
  44. $course_info = api_get_course_info_by_id($course_id);
  45. if (!empty($course_info)) {
  46. $course_id = $course_info['real_id'];
  47. } else {
  48. return [];
  49. }
  50. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  51. $sql = "SELECT * FROM $table
  52. WHERE c_id = $course_id AND session_id = '0'";
  53. $sql_result = Database::query($sql);
  54. $results = [];
  55. while ($row = Database::fetch_array($sql_result)) {
  56. $desc_tmp = new CourseDescription();
  57. $desc_tmp->set_id($row['id']);
  58. $desc_tmp->set_title($row['title']);
  59. $desc_tmp->set_content($row['content']);
  60. $desc_tmp->set_session_id($row['session_id']);
  61. $desc_tmp->set_description_type($row['description_type']);
  62. $desc_tmp->set_progress($row['progress']);
  63. $results[] = $desc_tmp;
  64. }
  65. return $results;
  66. }
  67. /**
  68. * Get all data of course description by session id,
  69. * first you must set session_id property with the object CourseDescription.
  70. *
  71. * @return array
  72. */
  73. public function get_description_data()
  74. {
  75. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  76. $condition_session = api_get_session_condition(
  77. $this->session_id,
  78. true,
  79. true
  80. );
  81. $course_id = $this->course_id ?: api_get_course_int_id();
  82. if (empty($course_id)) {
  83. return [];
  84. }
  85. $sql = "SELECT * FROM $table
  86. WHERE c_id = $course_id $condition_session
  87. ORDER BY id ";
  88. $rs = Database::query($sql);
  89. $data = [];
  90. while ($description = Database::fetch_array($rs)) {
  91. $data['descriptions'][$description['id']] = $description;
  92. }
  93. return $data;
  94. }
  95. /**
  96. * Get all data by description and session id,
  97. * first you must set session_id property with the object CourseDescription.
  98. *
  99. * @param int $description_type Description type
  100. * @param string $courseId Course code (optional)
  101. * @param int $session_id Session id (optional)
  102. *
  103. * @return array List of fields from the descriptions found of the given type
  104. */
  105. public function get_data_by_description_type(
  106. $description_type,
  107. $courseId = null,
  108. $session_id = null
  109. ) {
  110. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  111. $courseId = (int) $courseId;
  112. if (empty($courseId)) {
  113. $courseId = api_get_course_int_id();
  114. }
  115. if (!isset($session_id)) {
  116. $session_id = $this->session_id;
  117. }
  118. $condition_session = api_get_session_condition($session_id);
  119. $description_type = (int) $description_type;
  120. $sql = "SELECT * FROM $table
  121. WHERE
  122. c_id = $courseId AND
  123. description_type = '$description_type'
  124. $condition_session ";
  125. $rs = Database::query($sql);
  126. $data = [];
  127. if ($description = Database::fetch_array($rs)) {
  128. $data['description_title'] = $description['title'];
  129. $data['description_content'] = $description['content'];
  130. $data['progress'] = $description['progress'];
  131. $data['id'] = $description['id'];
  132. }
  133. return $data;
  134. }
  135. /**
  136. * @param int $id
  137. * @param string $course_code
  138. * @param int $session_id
  139. *
  140. * @return array
  141. */
  142. public function get_data_by_id($id, $course_code = '', $session_id = null)
  143. {
  144. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  145. $course_id = api_get_course_int_id();
  146. $id = (int) $id;
  147. if (!isset($session_id)) {
  148. $session_id = $this->session_id;
  149. }
  150. $condition_session = api_get_session_condition($session_id);
  151. if (!empty($course_code)) {
  152. $course_info = api_get_course_info($course_code);
  153. $course_id = $course_info['real_id'];
  154. }
  155. $sql = "SELECT * FROM $table
  156. WHERE c_id = $course_id AND id='$id' $condition_session ";
  157. $rs = Database::query($sql);
  158. $data = [];
  159. if ($description = Database::fetch_array($rs)) {
  160. $data['description_type'] = $description['description_type'];
  161. $data['description_title'] = $description['title'];
  162. $data['description_content'] = $description['content'];
  163. $data['progress'] = $description['progress'];
  164. }
  165. return $data;
  166. }
  167. /**
  168. * Get maximum description type by session id,
  169. * first you must set session_id properties with the object CourseDescription.
  170. *
  171. * @return int maximum description time adding one
  172. */
  173. public function get_max_description_type()
  174. {
  175. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  176. $course_id = api_get_course_int_id();
  177. $sql = "SELECT MAX(description_type) as MAX
  178. FROM $table
  179. WHERE c_id = $course_id AND session_id='".$this->session_id."'";
  180. $rs = Database::query($sql);
  181. $max = Database::fetch_array($rs);
  182. if ($max['MAX'] >= 8) {
  183. $description_type = 8;
  184. } else {
  185. $description_type = $max['MAX'] + 1;
  186. }
  187. if ($description_type < ADD_BLOCK) {
  188. $description_type = ADD_BLOCK;
  189. }
  190. return $description_type;
  191. }
  192. /**
  193. * Insert a description to the course_description table,
  194. * first you must set description_type, title, content, progress and
  195. * session_id properties with the object CourseDescription.
  196. *
  197. * @return int affected rows
  198. */
  199. public function insert()
  200. {
  201. if (empty($this->course_id)) {
  202. $course_id = api_get_course_int_id();
  203. } else {
  204. $course_id = $this->course_id;
  205. }
  206. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  207. $params = [
  208. 'c_id' => $course_id,
  209. 'description_type' => $this->description_type,
  210. 'title' => $this->title,
  211. 'content' => $this->content,
  212. 'progress' => intval($this->progress),
  213. 'session_id' => $this->session_id,
  214. ];
  215. $last_id = Database::insert($table, $params);
  216. if ($last_id > 0) {
  217. $sql = "UPDATE $table SET id = iid WHERE iid = $last_id";
  218. Database::query($sql);
  219. // insert into item_property
  220. api_item_property_update(
  221. api_get_course_info(),
  222. TOOL_COURSE_DESCRIPTION,
  223. $last_id,
  224. 'CourseDescriptionAdded',
  225. api_get_user_id()
  226. );
  227. }
  228. return $last_id > 0 ? 1 : 0;
  229. }
  230. /**
  231. * Update a description, first you must set description_type, title, content, progress
  232. * and session_id properties with the object CourseDescription.
  233. *
  234. * @return int affected rows
  235. */
  236. public function update()
  237. {
  238. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  239. $params = [
  240. 'title' => $this->title,
  241. 'content' => $this->content,
  242. 'progress' => intval($this->progress),
  243. ];
  244. Database::update(
  245. $table,
  246. $params,
  247. [
  248. 'id = ? AND session_id = ? AND c_id = ?' => [
  249. $this->id,
  250. $this->session_id,
  251. $this->course_id ? $this->course_id : api_get_course_int_id(),
  252. ],
  253. ]
  254. );
  255. if ($this->id > 0) {
  256. // Insert into item_property
  257. api_item_property_update(
  258. api_get_course_info(),
  259. TOOL_COURSE_DESCRIPTION,
  260. $this->id,
  261. 'CourseDescriptionUpdated',
  262. api_get_user_id()
  263. );
  264. }
  265. return 1;
  266. }
  267. /**
  268. * Delete a description, first you must set description_type and session_id
  269. * properties with the object CourseDescription.
  270. *
  271. * @return int affected rows
  272. */
  273. public function delete()
  274. {
  275. $table = Database::get_course_table(TABLE_COURSE_DESCRIPTION);
  276. $course_id = api_get_course_int_id();
  277. $sql = "DELETE FROM $table
  278. WHERE
  279. c_id = $course_id AND
  280. id = '".intval($this->id)."' AND
  281. session_id = '".intval($this->session_id)."'";
  282. $result = Database::query($sql);
  283. $affected_rows = Database::affected_rows($result);
  284. if ($this->id > 0) {
  285. //insert into item_property
  286. api_item_property_update(
  287. api_get_course_info(),
  288. TOOL_COURSE_DESCRIPTION,
  289. $this->id,
  290. 'CourseDescriptionDeleted',
  291. api_get_user_id()
  292. );
  293. }
  294. return $affected_rows;
  295. }
  296. /**
  297. * Get description titles by default.
  298. *
  299. * @return array
  300. */
  301. public function get_default_description_title()
  302. {
  303. $default_description_titles = [];
  304. $default_description_titles[1] = get_lang('GeneralDescription');
  305. $default_description_titles[2] = get_lang('Objectives');
  306. $default_description_titles[3] = get_lang('Topics');
  307. $default_description_titles[4] = get_lang('Methodology');
  308. $default_description_titles[5] = get_lang('CourseMaterial');
  309. $default_description_titles[6] = get_lang('HumanAndTechnicalResources');
  310. $default_description_titles[7] = get_lang('Assessment');
  311. $default_description_titles[8] = get_lang('Other');
  312. return $default_description_titles;
  313. }
  314. /**
  315. * Get description titles editable by default.
  316. *
  317. * @return array
  318. */
  319. public function get_default_description_title_editable()
  320. {
  321. $default_description_title_editable = [];
  322. $default_description_title_editable[1] = true;
  323. $default_description_title_editable[2] = true;
  324. $default_description_title_editable[3] = true;
  325. $default_description_title_editable[4] = true;
  326. $default_description_title_editable[5] = true;
  327. $default_description_title_editable[6] = true;
  328. $default_description_title_editable[7] = true;
  329. //$default_description_title_editable[8] = true;
  330. return $default_description_title_editable;
  331. }
  332. /**
  333. * Get description icons by default.
  334. *
  335. * @return array
  336. */
  337. public function get_default_description_icon()
  338. {
  339. $default_description_icon = [];
  340. $default_description_icon[1] = 'info.png';
  341. $default_description_icon[2] = 'objective.png';
  342. $default_description_icon[3] = 'topics.png';
  343. $default_description_icon[4] = 'strategy.png';
  344. $default_description_icon[5] = 'laptop.png';
  345. $default_description_icon[6] = 'teacher.png';
  346. $default_description_icon[7] = 'assessment.png';
  347. $default_description_icon[8] = 'wizard.png';
  348. return $default_description_icon;
  349. }
  350. /**
  351. * Get questions by default for help.
  352. *
  353. * @return array
  354. */
  355. public function get_default_question()
  356. {
  357. $question = [];
  358. $question[1] = get_lang('GeneralDescriptionQuestions');
  359. $question[2] = get_lang('ObjectivesQuestions');
  360. $question[3] = get_lang('TopicsQuestions');
  361. $question[4] = get_lang('MethodologyQuestions');
  362. $question[5] = get_lang('CourseMaterialQuestions');
  363. $question[6] = get_lang('HumanAndTechnicalResourcesQuestions');
  364. $question[7] = get_lang('AssessmentQuestions');
  365. //$question[8]= get_lang('ThematicAdvanceQuestions');
  366. return $question;
  367. }
  368. /**
  369. * Get informations by default for help.
  370. *
  371. * @return array
  372. */
  373. public function get_default_information()
  374. {
  375. $information = [];
  376. $information[1] = get_lang('GeneralDescriptionInformation');
  377. $information[2] = get_lang('ObjectivesInformation');
  378. $information[3] = get_lang('TopicsInformation');
  379. $information[4] = get_lang('MethodologyInformation');
  380. $information[5] = get_lang('CourseMaterialInformation');
  381. $information[6] = get_lang('HumanAndTechnicalResourcesInformation');
  382. $information[7] = get_lang('AssessmentInformation');
  383. //$information[8]= get_lang('ThematicAdvanceInformation');
  384. return $information;
  385. }
  386. /**
  387. * Set description id.
  388. */
  389. public function set_id($id)
  390. {
  391. $this->id = $id;
  392. }
  393. /**
  394. * Set description's course id.
  395. *
  396. * @param int $id Course ID
  397. */
  398. public function set_course_id($id)
  399. {
  400. $this->course_id = intval($id);
  401. }
  402. /**
  403. * Set description title.
  404. *
  405. * @param string $title
  406. */
  407. public function set_title($title)
  408. {
  409. $this->title = $title;
  410. }
  411. /**
  412. * Set description content.
  413. *
  414. * @param string $content
  415. */
  416. public function set_content($content)
  417. {
  418. $this->content = $content;
  419. }
  420. /**
  421. * Set description session id.
  422. *
  423. * @param int $session_id
  424. */
  425. public function set_session_id($session_id)
  426. {
  427. $this->session_id = $session_id;
  428. }
  429. /**
  430. * Set description type.
  431. */
  432. public function set_description_type($description_type)
  433. {
  434. $this->description_type = $description_type;
  435. }
  436. /**
  437. * Set progress of a description.
  438. *
  439. * @param string $progress
  440. */
  441. public function set_progress($progress)
  442. {
  443. $this->progress = $progress;
  444. }
  445. /**
  446. * get description id.
  447. *
  448. * @return int
  449. */
  450. public function get_id()
  451. {
  452. return $this->id;
  453. }
  454. /**
  455. * get description title.
  456. *
  457. * @return string
  458. */
  459. public function get_title()
  460. {
  461. return $this->title;
  462. }
  463. /**
  464. * get description content.
  465. *
  466. * @return string
  467. */
  468. public function get_content()
  469. {
  470. return $this->content;
  471. }
  472. /**
  473. * get session id.
  474. *
  475. * @return int
  476. */
  477. public function get_session_id()
  478. {
  479. return $this->session_id;
  480. }
  481. /**
  482. * get description type.
  483. *
  484. * @return int
  485. */
  486. public function get_description_type()
  487. {
  488. return $this->description_type;
  489. }
  490. /**
  491. * get progress of a description.
  492. *
  493. * @return int
  494. */
  495. public function get_progress()
  496. {
  497. return $this->progress;
  498. }
  499. }