PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/tracker/include/Tracker/FormElement/View/Admin.class.php

https://gitlab.com/prenaud76/tuleap
PHP | 356 lines | 240 code | 28 blank | 88 comment | 4 complexity | 43b29905d966fcb7c5dfc5a2756dfe0d MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, LGPL-3.0, GPL-2.0, GPL-3.0
  1. <?php
  2. /**
  3. * Copyright (c) Enalean, 2012. All Rights Reserved.
  4. *
  5. * Tuleap is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * Tuleap is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with Tuleap; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. */
  19. /**
  20. * Manage display of FormElement administration (creation / update).
  21. *
  22. * This is the top most element of the hierarchy and correspond to Tracker_FormElement
  23. */
  24. class Tracker_FormElement_View_Admin {
  25. /**
  26. * @var Tracker_FormElement
  27. */
  28. protected $formElement;
  29. /**
  30. * @var
  31. */
  32. protected $allUsedElements;
  33. public function __construct(Tracker_FormElement $formElement, $allUsedElements) {
  34. $this->formElement = $formElement;
  35. $this->allUsedElements = $allUsedElements;
  36. }
  37. public function fetchTypeNotModifiable() {
  38. $html = '';
  39. $html .= '<p><label for="formElement_type">'. $GLOBALS['Language']->getText('plugin_tracker_include_type', 'type') .': </label>';
  40. $html .= '<img width="16" height="16" alt="" src="'. $this->formElement->getFactoryIconUseIt() .'" style="vertical-align:middle"/> '. $this->formElement->getFactoryLabel();
  41. $html .= '</p>';
  42. $html .= '<p>'.$this->formElement->getFactoryDescription().'</p>';
  43. return $html;
  44. }
  45. public function fetchTypeForUpdate() {
  46. $html = '';
  47. $html .= '<p><label for="formElement_type">'. $GLOBALS['Language']->getText('plugin_tracker_include_type', 'type') .': </label>';
  48. $html .= '<img width="16" height="16" alt="" src="'. $this->formElement->getFactoryIconUseIt() .'" style="vertical-align:middle"/> '. $this->formElement->getFactoryLabel();
  49. $html .= '<p>'.$this->formElement->getFactoryDescription().'</p>';
  50. $html .= '</p>';
  51. return $html;
  52. }
  53. public function fetchNameForUpdate() {
  54. $hp = Codendi_HTMLPurifier::instance();
  55. $html = '';
  56. $html .= '<p>';
  57. $html .= '<label for="formElement_name">' . $GLOBALS['Language']->getText('plugin_tracker_include_type', 'name') . ': </label>';
  58. $html .= '<input type="text" id="formElement_name" name="formElement_data[name]" value="' . $hp->purify($this->formElement->getName(), CODENDI_PURIFIER_CONVERT_HTML) . '" />';
  59. $html .= '</p>';
  60. return $html;
  61. }
  62. /**
  63. * html form for the label
  64. *
  65. * @return string html
  66. */
  67. public function fetchLabelForUpdate() {
  68. $html = '';
  69. $html .= '<p>';
  70. $html .= '<label for="formElement_label">'.$GLOBALS['Language']->getText('plugin_tracker_include_report', 'field_label').': <font color="red">*</font></label> ';
  71. $html .= '<input type="text" name="formElement_data[label]" id="formElement_label" value="'. $this->formElement->getLabel() .'" size="40" />';
  72. $html .= '<input type="hidden" name="formElement_data[use_it]" value="1" />';
  73. $html .= '</p>';
  74. $html .= $this->fetchCustomHelp();
  75. return $html;
  76. }
  77. /**
  78. * html form for the description
  79. *
  80. * @return string html
  81. */
  82. public function fetchDescriptionForUpdate() {
  83. $hp = Codendi_HTMLPurifier::instance();
  84. $html = '';
  85. $html .= '<p>';
  86. $html .= '<label for="formElement_description">'.$GLOBALS['Language']->getText('plugin_tracker_include_type', 'fieldset_desc').':</label>';
  87. $html .= '<textarea name="formElement_data[description]" id="formElement_description" cols="40">'. $hp->purify($this->formElement->description, CODENDI_PURIFIER_CONVERT_HTML) .'</textarea>';
  88. $html .= '</p>';
  89. return $html;
  90. }
  91. public function fetchNameForShared() {
  92. $hp = Codendi_HTMLPurifier::instance();
  93. $html = '';
  94. $html .= '<p>';
  95. $html .= '<label>'.$GLOBALS['Language']->getText('plugin_tracker_include_type', 'name') . '</label>';
  96. $html .= $hp->purify($this->formElement->getName(), CODENDI_PURIFIER_CONVERT_HTML);
  97. $html .= '</p>';
  98. return $html;
  99. }
  100. /**
  101. * html form for the label
  102. *
  103. * @return string html
  104. */
  105. public function fetchLabelForShared() {
  106. $html = '';
  107. $html .= '<p>';
  108. $html .= '<label>'.$GLOBALS['Language']->getText('plugin_tracker_include_report', 'field_label').'</label>';
  109. $html .= $this->formElement->getLabel();
  110. $html .= '<input type="hidden" name="formElement_data[use_it]" value="1" />';
  111. $html .= '</p>';
  112. $html .= $this->fetchCustomHelp();
  113. return $html;
  114. }
  115. /**
  116. * html form for the description
  117. *
  118. * @return string html
  119. */
  120. public function fetchDescriptionForShared() {
  121. $hp = Codendi_HTMLPurifier::instance();
  122. $html = '';
  123. $html .= '<p>';
  124. $html .= '<label>'.$GLOBALS['Language']->getText('plugin_tracker_include_type', 'fieldset_desc').'</label>';
  125. $html .= $hp->purify($this->formElement->description, CODENDI_PURIFIER_CONVERT_HTML);
  126. $html .= '</p>';
  127. return $html;
  128. }
  129. protected function fetchCustomHelp() {
  130. return '';
  131. }
  132. public function fetchCustomHelpForShared() {
  133. $originalTrackerName = $this->formElement->getOriginalTracker()->getName();
  134. $originalProjectName = $this->formElement->getOriginalProject()->getPublicName();
  135. $originalEditUrl = $this->formElement->getOriginalField()->getAdminEditUrl();
  136. $html = '';
  137. $html .= '<span class="tracker-admin-form-element-help">';
  138. $html .= $GLOBALS['Language']->getText('plugin_tracker_include_type', 'field_copied_from', array($originalTrackerName, $originalProjectName, $originalEditUrl));
  139. $html .= '</span>';
  140. return $html;
  141. }
  142. public function fetchRanking() {
  143. $html = '';
  144. $html .= '<p>';
  145. $html .= '<label for="formElement_rank">'.$GLOBALS['Language']->getText('plugin_tracker_include_type', 'rank_screen').': <font color="red">*</font></label>';
  146. $items = array();
  147. foreach ($this->allUsedElements as $field) {
  148. $items[] = $field->getRankSelectboxDefinition();
  149. }
  150. $html .= $GLOBALS['HTML']->selectRank(
  151. $this->formElement->id,
  152. $this->formElement->rank,
  153. $items,
  154. array(
  155. 'id' => 'formElement_rank',
  156. 'name' => 'formElement_data[rank]'
  157. )
  158. );
  159. $html .= '</p>';
  160. return $html;
  161. }
  162. /**
  163. * If the formElement has specific properties then this method
  164. * should return the html needed to update those properties
  165. *
  166. * The html must be a (or many) html row(s) table (one column for the label,
  167. * another one for the property)
  168. *
  169. * <code>
  170. * <tr><td><label>Property 1:</label></td><td><input type="text" value="value 1" /></td></tr>
  171. * <tr><td><label>Property 2:</label></td><td><input type="text" value="value 2" /></td></tr>
  172. * </code>
  173. *
  174. * @return string html
  175. */
  176. public function fetchAdminSpecificProperties() {
  177. $html = '';
  178. foreach ($this->formElement->getProperties() as $key => $property) {
  179. $html .= '<p>';
  180. $html .= $this->fetchAdminSpecificProperty($key, $property);
  181. $html .= '</p>';
  182. }
  183. return $html;
  184. }
  185. /**
  186. * Fetch a unique property edit form
  187. *
  188. * @param string $key The key of the property
  189. * @param array $property The property to display
  190. *
  191. * @see fetchAdminSpecificProperties
  192. * @return string html
  193. */
  194. protected function fetchAdminSpecificProperty($key, $property) {
  195. $html = '';
  196. switch ($property['type']) {
  197. case 'string':
  198. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  199. $html .= '<input type="text"
  200. size="'. $property['size'] .'"
  201. name="formElement_data[specific_properties]['. $key .']"
  202. id="formElement_properties_'. $key .'"
  203. value="'. $property['value'] .'" />';
  204. break;
  205. case 'date':
  206. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  207. $value = $property['value'] ? $this->formElement->formatDate($property['value']) : '';
  208. $html .= $GLOBALS['HTML']->getDatePicker("formElement_properties_".$key, "formElement_data[specific_properties][$key]", $value);
  209. break;
  210. case 'text':
  211. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  212. $html .= '<textarea
  213. cols="50" rows="10"
  214. name="formElement_data[specific_properties]['. $key .']"
  215. id="formElement_properties_'. $key .'">' .
  216. $property['value'] . '</textarea>';
  217. break;
  218. case 'rich_text':
  219. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  220. $html .= '<textarea
  221. class="tracker-field-richtext"
  222. cols="50" rows="10"
  223. name="formElement_data[specific_properties]['. $key .']"
  224. id="formElement_properties_'. $key .'">' .
  225. $property['value'] . '</textarea>';
  226. break;
  227. case 'radio':
  228. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  229. foreach ($property['choices'] as $key_choice => $choice) {
  230. $checked = '';
  231. if ($this->formElement->getProperty($key) == $choice['radio_value']) {
  232. $checked = 'checked="checked"';
  233. }
  234. $html .= '<div class="form-inline"><input type="radio"
  235. name="formElement_data[specific_properties]['. $key .']"
  236. value="'. $choice['radio_value'] .'"
  237. id="formElement_properties_'. $key_choice .'"
  238. '. $checked .' />';
  239. $html .= '&nbsp;'.$this->fetchAdminSpecificProperty($key_choice, $choice);
  240. $html .= '</div>';
  241. }
  242. break;
  243. case 'checkbox':
  244. $checked = $property['value'] ? 'checked="checked"' : '';
  245. $html .= '<label class="checkbox">
  246. <input type="hidden"
  247. name="formElement_data[specific_properties]['. $key .']"
  248. value="0"/>
  249. <input type="checkbox"
  250. name="formElement_data[specific_properties]['. $key .']"
  251. id="formElement_properties_'.$key.'" '. $checked .'
  252. value="1"/>
  253. '.$this->formElement->getPropertyLabel($key).'
  254. </label>';
  255. break;
  256. case 'label':
  257. $html .= '<label for="formElement_properties_'. $key .'">'. $this->formElement->getPropertyLabel($key) .'</label> ';
  258. default:
  259. //Unknown type. raise exception?
  260. break;
  261. }
  262. return $html;
  263. }
  264. /**
  265. * Fetch additionnal stuff to display below the edit form
  266. *
  267. * @return string html
  268. */
  269. public function fetchAfterAdminEditForm() {
  270. return '';
  271. }
  272. /**
  273. * Fetch additionnal stuff to display below the create form
  274. * Result if not empty must be enclosed in a <tr>
  275. *
  276. * @return string html
  277. */
  278. public function fetchAfterAdminCreateForm() {
  279. return '';
  280. }
  281. public function fetchAdminButton($name) {
  282. $html = '';
  283. $html .= '<p>';
  284. $html .= '<input type="submit" name="'. $name .'" value="'. $GLOBALS['Language']->getText('global', 'btn_submit') .'" />';
  285. $html .= '</p>';
  286. return $html;
  287. }
  288. /**
  289. * fetch permission link on admin form
  290. *
  291. * @return string html
  292. */
  293. public function fetchAdminFormPermissionLink() {
  294. $html = '';
  295. $html .= '<p>';
  296. $html .= '<a href="'.TRACKER_BASE_URL.'/?'. http_build_query(
  297. array(
  298. 'tracker' => $this->formElement->tracker_id,
  299. 'func' => 'admin-perms-fields',
  300. 'selected_id' => $this->formElement->id
  301. )
  302. ) .'">';
  303. $html .= $GLOBALS['HTML']->getImage('ic/lock-small.png', array(
  304. 'style' => 'vertical-align:middle;',
  305. ));
  306. $html .= ' ';
  307. $html .= $GLOBALS['Language']->getText('plugin_tracker_formelement_admin','edit_permissions') .'</a>';
  308. $html .= '</p>';
  309. return $html;
  310. }
  311. public function fetchSharedUsage() {
  312. $html = '';
  313. $fields = $this->formElement->getSharedTargets();
  314. if ($fields) {
  315. $trackers = array();
  316. foreach ($fields as $field) {
  317. $t = $field->getTracker();
  318. $trackers[$t->getId()] = '<a href="'. TRACKER_BASE_URL.'/?tracker='. $t->getId() .'&func=admin-formElements">'. $t->getName() .' ('. $t->getProject()->getPublicName() .')</a>';
  319. }
  320. $html .= $GLOBALS['Language']->getText('plugin_tracker_include_type', 'field_copied_to');
  321. $html .= '<ul><li>';
  322. $html .= implode('</li><li>', $trackers);
  323. $html .= '</li></ul>';
  324. }
  325. return $html;
  326. }
  327. }
  328. ?>