/classes/reviewForm/ReviewFormElementDAO.inc.php

https://github.com/ojsde/pkp-lib · PHP · 318 lines · 178 code · 45 blank · 95 comment · 10 complexity · e186c3b6a6bfb35de780e62e8882a647 MD5 · raw file

  1. <?php
  2. /**
  3. * @file classes/reviewForm/ReviewFormElementDAO.inc.php
  4. *
  5. * Copyright (c) 2000-2012 John Willinsky
  6. * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
  7. *
  8. * @class ReviewFormElementDAO
  9. * @ingroup reviewForm
  10. * @see ReviewFormElement
  11. *
  12. * @brief Operations for retrieving and modifying ReviewFormElement objects.
  13. *
  14. */
  15. import ('lib.pkp.classes.reviewForm.ReviewFormElement');
  16. class ReviewFormElementDAO extends DAO {
  17. /**
  18. * Constructor
  19. */
  20. function ReviewFormElementDAO() {
  21. parent::DAO();
  22. }
  23. /**
  24. * Retrieve a review form element by ID.
  25. * @param $reviewFormElementId int
  26. * @return ReviewFormElement
  27. */
  28. function &getReviewFormElement($reviewFormElementId) {
  29. $result =& $this->retrieve(
  30. 'SELECT * FROM review_form_elements WHERE review_form_element_id = ?', $reviewFormElementId
  31. );
  32. $returner = null;
  33. if ($result->RecordCount() != 0) {
  34. $returner =& $this->_returnReviewFormElementFromRow($result->GetRowAssoc(false));
  35. }
  36. $result->Close();
  37. unset($result);
  38. return $returner;
  39. }
  40. /**
  41. * Construct a new data object corresponding to this DAO.
  42. * @return ReviewFormElement
  43. */
  44. function newDataObject() {
  45. return new ReviewFormElement();
  46. }
  47. /**
  48. * Internal function to return a ReviewFormElement object from a row.
  49. * @param $row array
  50. * @return ReviewFormElement
  51. */
  52. function &_returnReviewFormElementFromRow($row) {
  53. $reviewFormElement = $this->newDataObject();
  54. $reviewFormElement->setId($row['review_form_element_id']);
  55. $reviewFormElement->setReviewFormId($row['review_form_id']);
  56. $reviewFormElement->setSequence($row['seq']);
  57. $reviewFormElement->setElementType($row['element_type']);
  58. $reviewFormElement->setRequired($row['required']);
  59. $reviewFormElement->setIncluded($row['included']);
  60. $this->getDataObjectSettings('review_form_element_settings', 'review_form_element_id', $row['review_form_element_id'], $reviewFormElement);
  61. HookRegistry::call('ReviewFormElementDAO::_returnReviewFormElementFromRow', array(&$reviewFormElement, &$row));
  62. return $reviewFormElement;
  63. }
  64. /**
  65. * Get the list of fields for which data can be localized.
  66. * @return array
  67. */
  68. function getLocaleFieldNames() {
  69. return array('question', 'possibleResponses');
  70. }
  71. /**
  72. * Update the localized fields for this table
  73. * @param $reviewFormElement object
  74. */
  75. function updateLocaleFields(&$reviewFormElement) {
  76. $this->updateDataObjectSettings('review_form_element_settings', $reviewFormElement, array(
  77. 'review_form_element_id' => $reviewFormElement->getId()
  78. ));
  79. }
  80. /**
  81. * Insert a new review form element.
  82. * @param $reviewFormElement ReviewFormElement
  83. */
  84. function insertObject(&$reviewFormElement) {
  85. $this->update(
  86. 'INSERT INTO review_form_elements
  87. (review_form_id, seq, element_type, required, included)
  88. VALUES
  89. (?, ?, ?, ?, ?)',
  90. array(
  91. $reviewFormElement->getReviewFormId(),
  92. $reviewFormElement->getSequence() == null ? 0 : $reviewFormElement->getSequence(),
  93. $reviewFormElement->getElementType(),
  94. $reviewFormElement->getRequired() ? 1 : 0,
  95. $reviewFormElement->getIncluded() ? 1 : 0
  96. )
  97. );
  98. $reviewFormElement->setId($this->getInsertReviewFormElementId());
  99. $this->updateLocaleFields($reviewFormElement);
  100. return $reviewFormElement->getId();
  101. }
  102. /**
  103. * Update an existing review form element.
  104. * @param $reviewFormElement ReviewFormElement
  105. */
  106. function updateObject(&$reviewFormElement) {
  107. $returner = $this->update(
  108. 'UPDATE review_form_elements
  109. SET
  110. review_form_id = ?,
  111. seq = ?,
  112. element_type = ?,
  113. required = ?,
  114. included = ?
  115. WHERE review_form_element_id = ?',
  116. array(
  117. $reviewFormElement->getReviewFormId(),
  118. $reviewFormElement->getSequence(),
  119. $reviewFormElement->getElementType(),
  120. $reviewFormElement->getRequired(),
  121. $reviewFormElement->getIncluded(),
  122. $reviewFormElement->getId()
  123. )
  124. );
  125. $this->updateLocaleFields($reviewFormElement);
  126. return $returner;
  127. }
  128. /**
  129. * Delete a review form element.
  130. * @param $reviewFormElement reviewFormElement
  131. */
  132. function deleteObject(&$reviewFormElement) {
  133. return $this->deleteById($reviewFormElement->getId());
  134. }
  135. /**
  136. * Delete a review form element by ID.
  137. * @param $reviewFormElementId int
  138. */
  139. function deleteById($reviewFormElementId) {
  140. $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
  141. $reviewFormResponseDao->deleteByReviewFormElementId($reviewFormElementId);
  142. $this->update('DELETE FROM review_form_element_settings WHERE review_form_element_id = ?', array($reviewFormElementId));
  143. return $this->update('DELETE FROM review_form_elements WHERE review_form_element_id = ?', array($reviewFormElementId));
  144. }
  145. /**
  146. * Delete review form elements by review form ID
  147. * to be called only when deleting a review form.
  148. * @param $reviewFormId int
  149. */
  150. function deleteByReviewFormId($reviewFormId) {
  151. $reviewFormElements =& $this->getReviewFormElements($reviewFormId);
  152. foreach ($reviewFormElements as $reviewFormElementId => $reviewFormElement) {
  153. $this->deleteById($reviewFormElementId);
  154. }
  155. }
  156. /**
  157. * Delete a review form element setting
  158. * @param $reviewFormElementId int
  159. * @param $settingName string
  160. * @param $locale string
  161. */
  162. function deleteSetting($reviewFormElementId, $name, $locale = null) {
  163. $params = array($reviewFormElementId, $name);
  164. $sql = 'DELETE FROM review_form_element_settings WHERE review_form_element_id = ? AND setting_name = ?';
  165. if ($locale !== null) {
  166. $params[] = $locale;
  167. $sql .= ' AND locale = ?';
  168. }
  169. return $this->update($sql, $params);
  170. }
  171. /**
  172. * Retrieve all elements for a review form.
  173. * @param $reviewFormId int
  174. * @return array ReviewFormElements ordered by sequence
  175. */
  176. function &getReviewFormElements($reviewFormId) {
  177. $reviewFormElements = array();
  178. $result =& $this->retrieve(
  179. 'SELECT * FROM review_form_elements WHERE review_form_id = ? ORDER BY seq',
  180. $reviewFormId
  181. );
  182. while (!$result->EOF) {
  183. $reviewFormElement =& $this->_returnReviewFormElementFromRow($result->GetRowAssoc(false));
  184. $reviewFormElements[$reviewFormElement->getId()] = $reviewFormElement;
  185. $result->MoveNext();
  186. }
  187. $result->Close();
  188. unset($result);
  189. return $reviewFormElements;
  190. }
  191. /**
  192. * Retrieve all elements for a review form.
  193. * @param $reviewFormId int
  194. * @param $rangeInfo object RangeInfo object (optional)
  195. * @return DAOResultFactory containing ReviewFormElements ordered by sequence
  196. */
  197. function &getReviewFormElementsByReviewForm($reviewFormId, $rangeInfo = null) {
  198. $result =& $this->retrieveRange(
  199. 'SELECT * FROM review_form_elements WHERE review_form_id = ? ORDER BY seq',
  200. $reviewFormId, $rangeInfo
  201. );
  202. $returner = new DAOResultFactory($result, $this, '_returnReviewFormElementFromRow');
  203. return $returner;
  204. }
  205. /**
  206. * Retrieve ids of all required elements for a review form.
  207. * @param $reviewFormId int
  208. * return array
  209. */
  210. function getRequiredReviewFormElementIds($reviewFormId) {
  211. $result =& $this->retrieve(
  212. 'SELECT review_form_element_id FROM review_form_elements WHERE review_form_id = ? AND required = 1 ORDER BY seq',
  213. $reviewFormId
  214. );
  215. $requiredReviewFormElementIds = array();
  216. while (!$result->EOF) {
  217. $requiredReviewFormElementIds[] = $result->fields[0];
  218. $result->MoveNext();
  219. }
  220. $result->Close();
  221. unset($result);
  222. return $requiredReviewFormElementIds;
  223. }
  224. /**
  225. * Check if a review form element exists with the specified ID.
  226. * @param $reviewFormElementId int
  227. * @param $reviewFormId int optional
  228. * @return boolean
  229. */
  230. function reviewFormElementExists($reviewFormElementId, $reviewFormId = null) {
  231. $sql = 'SELECT COUNT(*) FROM review_form_elements WHERE review_form_element_id = ?';
  232. $params = array($reviewFormElementId);
  233. if ($reviewFormId !== null) {
  234. $sql .= ' AND review_form_id = ?';
  235. $params[] = $reviewFormId;
  236. }
  237. $result =& $this->retrieve($sql, $params);
  238. $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
  239. $result->Close();
  240. unset($result);
  241. return $returner;
  242. }
  243. /**
  244. * Sequentially renumber a review form elements in their sequence order.
  245. * @param $reviewFormId int
  246. */
  247. function resequenceReviewFormElements($reviewFormId) {
  248. $result =& $this->retrieve(
  249. 'SELECT review_form_element_id FROM review_form_elements WHERE review_form_id = ? ORDER BY seq', $reviewFormId
  250. );
  251. for ($i=1; !$result->EOF; $i++) {
  252. list($reviewFormElementId) = $result->fields;
  253. $this->update(
  254. 'UPDATE review_form_elements SET seq = ? WHERE review_form_element_id = ?',
  255. array(
  256. $i,
  257. $reviewFormElementId
  258. )
  259. );
  260. $result->MoveNext();
  261. }
  262. $result->Close();
  263. unset($result);
  264. }
  265. /**
  266. * Get the ID of the last inserted review form element.
  267. * @return int
  268. */
  269. function getInsertReviewFormElementId() {
  270. return $this->_getInsertId('review_form_elements', 'review_form_element_id');
  271. }
  272. }
  273. ?>