PageRenderTime 56ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/apps/backend/modules/catalogue/actions/actions.class.php

https://github.com/PolloFox/Darwin
PHP | 264 lines | 220 code | 29 blank | 15 comment | 45 complexity | d641afa7514c7839a592c9a0db91bfac MD5 | raw file
  1. <?php
  2. /**
  3. * catalogue actions.
  4. *
  5. * @package darwin
  6. * @subpackage catalogue
  7. * @author DB team <collections@naturalsciences.be>
  8. * @version SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
  9. */
  10. class catalogueActions extends DarwinActions
  11. {
  12. protected $catalogue = array(
  13. 'catalogue_relationships','catalogue_people','class_vernacular_names','catalogue_properties','comments',
  14. 'specimens','specimen_individuals','specimen_parts','ext_links','collection_maintenance', 'insurances',
  15. 'people_addresses', 'people_comm','people_languages', 'people_relationships', 'classification_keywords');
  16. protected $ref_id = array('specimens' => 'spec_ref','specimen_individuals' => 'individual_ref','specimen_parts' => 'part_ref') ;
  17. public function executeRelation(sfWebRequest $request)
  18. {
  19. if(! $this->getUser()->isAtLeast(Users::ENCODER)) $this->forwardToSecureAction();
  20. $this->relation = null;
  21. if($request->hasParameter('id'))
  22. {
  23. $this->relation = Doctrine::getTable('CatalogueRelationships')->find($request->getParameter('id'));
  24. }
  25. if(! $this->relation)
  26. {
  27. $this->relation = new CatalogueRelationships();
  28. $this->relation->setRecordId_1($request->getParameter('rid'));
  29. $this->relation->setReferencedRelation($request->getParameter('table'));
  30. $this->relation->setRelationshipType($request->getParameter('type') == 'rename' ? 'current_name' : 'recombined from');
  31. }
  32. $this->form = new CatalogueRelationshipsForm($this->relation);
  33. if($request->isMethod('post'))
  34. {
  35. $this->form->bind($request->getParameter('catalogue_relationships'));
  36. if($this->form->isValid())
  37. {
  38. try{
  39. $this->form->save();
  40. $this->form->getObject()->refreshRelated();
  41. $this->form = new CatalogueRelationshipsForm($this->form->getObject()); //Ugly refresh
  42. return $this->renderText('ok');
  43. }
  44. catch(Doctrine_Exception $ne)
  45. {
  46. $e = new DarwinPgErrorParser($ne);
  47. $error = new sfValidatorError(new savedValidator(),$e->getMessage());
  48. $this->form->getErrorSchema()->addError($error);
  49. }
  50. }
  51. }
  52. $filterFormName = DarwinTable::getFilterForTable($request->getParameter('table'));
  53. $this->searchForm = new $filterFormName(array('table'=>$request->getParameter('table')));
  54. }
  55. public function executeTree(sfWebRequest $request)
  56. {
  57. $this->items = Doctrine::getTable( DarwinTable::getModelForTable($request->getParameter('table')) )
  58. ->findWithParents($request->getParameter('id'));
  59. }
  60. public function executeSearch(sfWebRequest $request)
  61. {
  62. $this->setCommonValues('catalogue', 'name_order_by', $request);
  63. $this->forward404Unless($request->hasParameter('searchCatalogue'));
  64. $item = $request->getParameter('searchCatalogue',array('') );
  65. $formFilterName = DarwinTable::getFilterForTable($item['table']);
  66. $this->searchForm = new $formFilterName(array('table' => $item['table'], 'level' => $item['level'], 'caller_id' => $item['caller_id']));
  67. $this->searchResults($this->searchForm,$request);
  68. $this->setLayout(false);
  69. }
  70. public function executeDeleteRelated(sfWebRequest $request)
  71. {
  72. if(in_array($request->getParameter('table'), array('users_languages','users_comm','users_addresses')))
  73. {
  74. $r = Doctrine::getTable( DarwinTable::getModelForTable($request->getParameter('table')) )->find($request->getParameter('id'));
  75. $this->forward404Unless($r,'No such item');
  76. if((in_array($request->getParameter('table'), array('users_comm','users_addresses'))
  77. && ($r->getPersonUserRef() == $this->getUser()->getId() || $this->getUser()->isAtLeast(Users::MANAGER)))
  78. || (in_array($request->getParameter('table'), array('users_languages'))
  79. && ($r->getUsersRef() == $this->getUser()->getId() || $this->getUser()->isAtLeast(Users::MANAGER)) ))
  80. {
  81. try
  82. {
  83. $r->delete();
  84. }
  85. catch(Doctrine_Exception $ne)
  86. {
  87. $e = new DarwinPgErrorParser($ne);
  88. return $this->renderText($e->getMessage());
  89. }
  90. return $this->renderText('ok');
  91. }
  92. }
  93. if(! $this->getUser()->isAtLeast(Users::ENCODER))
  94. $this->forwardToSecureAction();
  95. if(! in_array($request->getParameter('table'),$this->catalogue))
  96. $this->forwardToSecureAction();
  97. $r = Doctrine::getTable( DarwinTable::getModelForTable($request->getParameter('table')) )->find($request->getParameter('id'));
  98. $this->forward404Unless($r,'No such item');
  99. if(!$this->getUser()->isA(Users::ADMIN))
  100. {
  101. if(in_array($request->getParameter('table'),array('comments','catalogue_properties','ext_links')) && in_array($r->getReferencedRelation(),$this->ref_id))
  102. {
  103. $spec = Doctrine::getTable('specimenSearch')->getRecordByRef($this->ref_id[$r->getReferencedRelation()],$r->getRecordId());
  104. if(in_array($spec->getCollectionRef(),Doctrine::getTable('Specimens')->testNoRightsCollections($this->ref_id[$r->getReferencedRelation()],
  105. $r->getRecordId(),
  106. $this->getUser()->getId())))
  107. $this->forwardToSecureAction();
  108. }
  109. }
  110. try{
  111. $r->delete();
  112. }
  113. catch(Doctrine_Exception $ne)
  114. {
  115. $e = new DarwinPgErrorParser($ne);
  116. return $this->renderText($e->getMessage());
  117. }
  118. return $this->renderText('ok');
  119. }
  120. protected function searchResults($form, $request)
  121. {
  122. if($request->getParameter('searchCatalogue','') !== '')
  123. {
  124. $form->bind($request->getParameter('searchCatalogue'));
  125. if ($form->isValid())
  126. {
  127. $query = $form
  128. ->getQuery()
  129. ->orderBy($this->orderBy .' '.$this->orderDir .', id' );
  130. if($this->is_choose == 0)
  131. $query->andWhere('id > 0');
  132. $pager = new DarwinPager($query,
  133. $this->currentPage,
  134. $form->getValue('rec_per_page')
  135. );
  136. // Replace the count query triggered by the Pager to get the number of records retrieved
  137. $count_q = clone $query;
  138. // Remove from query the group by and order by clauses
  139. $count_q = $count_q->select('count(id)')->removeDqlQueryPart('groupby')->removeDqlQueryPart('orderby')->removeDqlQueryPart('join');
  140. // Initialize an empty count query
  141. $counted = new DoctrineCounted();
  142. // Define the correct select count() of the count query
  143. $counted->count_query = $count_q;
  144. // And replace the one of the pager with this new one
  145. $pager->setCountQuery($counted);
  146. $this->pagerLayout = new PagerLayoutWithArrows(
  147. $pager,
  148. new Doctrine_Pager_Range_Sliding(array('chunk' => $this->pagerSlidingSize)),
  149. $this->getController()->genUrl($this->s_url.$this->o_url).'/page/{%page_number}'
  150. );
  151. // Sets the Pager Layout templates
  152. $this->setDefaultPaggingLayout($this->pagerLayout);
  153. // If pager not yet executed, this means the query has to be executed for data loading
  154. if (! $this->pagerLayout->getPager()->getExecuted())
  155. $this->items = $this->pagerLayout->execute();
  156. }
  157. }
  158. }
  159. public function executeSearchPUL(sfWebRequest $request)
  160. {
  161. $response = 'ok';
  162. if($request->hasParameter('level_id') && $request->hasParameter('parent_id') && $request->hasParameter('table'))
  163. {
  164. $parent_level = Doctrine::getTable($request->getParameter('table'))->find($request->getParameter('parent_id'))->getLevelRef();
  165. $possible_upper_levels = Doctrine::getTable('PossibleUpperLevels')->findByLevelRef($request->getParameter('level_id'));
  166. if($possible_upper_levels)
  167. {
  168. $response = 'not ok';
  169. foreach($possible_upper_levels as $val)
  170. {
  171. if($val->getLevelUpperRef() == 0)
  172. {
  173. $response = 'top';
  174. break;
  175. }
  176. elseif ($val->getLevelUpperRef() == $parent_level)
  177. {
  178. $response = 'ok';
  179. break;
  180. }
  181. }
  182. }
  183. }
  184. return $this->renderText($response);
  185. }
  186. public function executeKeyword(sfWebRequest $request)
  187. {
  188. if(!$this->getUser()->isAtLeast(Users::ENCODER)) $this->forwardToSecureAction();
  189. $this->forward404Unless( $request->hasParameter('id') && $request->hasParameter('table'));
  190. $this->ref_object = Doctrine::getTable(DarwinTable::getModelForTable($request->getParameter('table')))->find($request->getParameter('id'));
  191. $this->forward404Unless($this->ref_object);
  192. $this->form = new KeywordsForm(null,array('table' => $request->getParameter('table'), 'id' => $request->getParameter('id')));
  193. if($request->isMethod('post'))
  194. {
  195. $this->form->bind($request->getParameter('keywords'));
  196. if($this->form->isValid())
  197. {
  198. try{
  199. $this->form->save();
  200. return $this->renderText('ok');
  201. }
  202. catch(Doctrine_Exception $ne)
  203. {
  204. $e = new DarwinPgErrorParser($ne);
  205. $error = new sfValidatorError(new savedValidator(),$e->getMessage());
  206. $this->form->getErrorSchema()->addError($error);
  207. }
  208. }
  209. }
  210. }
  211. public function executeAddKeyword(sfWebRequest $request)
  212. {
  213. if($this->getUser()->getDbUserType() < Users::ENCODER) $this->forwardToSecureAction();
  214. $number = intval($request->getParameter('num'));
  215. $form = new KeywordsForm(null,array('no_load'=>true));
  216. $form->addKeyword($number, $request->getParameter('key'));
  217. return $this->renderPartial('nameValue',array('form' => $form['newKeywords'][$number]));
  218. }
  219. public function executeGetCurrent(sfWebRequest $request)
  220. {
  221. $this->forward404Unless( $request->hasParameter('id') && $request->hasParameter('table'));
  222. $relation = Doctrine::getTable('ClassificationSynonymies')->findGroupIdFor(
  223. $request->getParameter('table'),
  224. $request->getParameter('id'),
  225. 'rename'
  226. );
  227. if($relation == 0)
  228. return $this->renderText('{}'); // The record has no current name
  229. $current = Doctrine::getTable('ClassificationSynonymies')->findBasionymIdForGroupId($relation);
  230. if($current == $request->getParameter('id') || $current == 0)
  231. return $this->renderText('{}'); // The record is a current name
  232. $item = Doctrine::getTable(DarwinTable::getModelForTable($request->getParameter('table')))->find($current);
  233. return $this->renderText(json_encode(array('name'=>$item->getName(), 'id'=>$item->getId() )));
  234. }
  235. }