BxClssFormEntry.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup Classes Classes
  7. * @ingroup UnaModules
  8. *
  9. * @{
  10. */
  11. /**
  12. * Create/Edit entry form
  13. */
  14. class BxClssFormEntry extends BxBaseModTextFormEntry
  15. {
  16. protected $_sGhostTemplateCover = 'form_ghost_template_cover.html';
  17. protected $_oProfileContext = null;
  18. public function __construct($aInfo, $oTemplate = false)
  19. {
  20. $this->MODULE = 'bx_classes';
  21. parent::__construct($aInfo, $oTemplate);
  22. $CNF = &$this->_oModule->_oConfig->CNF;
  23. if(isset($CNF['FIELD_COVER']) && isset($this->aInputs[$CNF['FIELD_COVER']])) {
  24. if($this->_oModule->checkAllowedSetThumb() === CHECK_ACTION_RESULT_ALLOWED) {
  25. $this->aInputs[$CNF['FIELD_COVER']]['storage_object'] = $CNF['OBJECT_STORAGE'];
  26. $this->aInputs[$CNF['FIELD_COVER']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_COVER']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_COVER']]['value']) : $CNF['OBJECT_UPLOADERS'];
  27. $this->aInputs[$CNF['FIELD_COVER']]['upload_buttons_titles'] = array(
  28. 'Simple' => _t('_bx_classes_form_entry_input_covers_uploader_simple_title'),
  29. 'HTML5' => _t('_bx_classes_form_entry_input_covers_uploader_html5_title')
  30. );
  31. $this->aInputs[$CNF['FIELD_COVER']]['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW'];
  32. $this->aInputs[$CNF['FIELD_COVER']]['storage_private'] = 0;
  33. $this->aInputs[$CNF['FIELD_COVER']]['multiple'] = false;
  34. $this->aInputs[$CNF['FIELD_COVER']]['content_id'] = 0;
  35. $this->aInputs[$CNF['FIELD_COVER']]['ghost_template'] = '';
  36. }
  37. else
  38. unset($this->aInputs[$CNF['FIELD_COVER']]);
  39. }
  40. if(isset($CNF['FIELD_PHOTO']) && isset($this->aInputs[$CNF['FIELD_PHOTO']])) {
  41. $this->aInputs[$CNF['FIELD_PHOTO']]['storage_object'] = $CNF['OBJECT_STORAGE_PHOTOS'];
  42. $this->aInputs[$CNF['FIELD_PHOTO']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_PHOTO']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_PHOTO']]['value']) : $CNF['OBJECT_UPLOADERS'];
  43. $this->aInputs[$CNF['FIELD_PHOTO']]['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW_PHOTOS'];
  44. $this->aInputs[$CNF['FIELD_PHOTO']]['storage_private'] = 0;
  45. $this->aInputs[$CNF['FIELD_PHOTO']]['multiple'] = true;
  46. $this->aInputs[$CNF['FIELD_PHOTO']]['content_id'] = 0;
  47. $this->aInputs[$CNF['FIELD_PHOTO']]['ghost_template'] = '';
  48. $this->aInputs[$CNF['FIELD_PHOTO']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
  49. }
  50. if(isset($this->aInputs[$CNF['FIELD_VIDEO']])) {
  51. $this->aInputs[$CNF['FIELD_VIDEO']]['storage_object'] = $CNF['OBJECT_STORAGE_VIDEOS'];
  52. $this->aInputs[$CNF['FIELD_VIDEO']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_VIDEO']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_VIDEO']]['value']) : $CNF['OBJECT_UPLOADERS'];
  53. $this->aInputs[$CNF['FIELD_VIDEO']]['images_transcoder'] = $CNF['OBJECT_VIDEOS_TRANSCODERS']['poster_preview'];
  54. $this->aInputs[$CNF['FIELD_VIDEO']]['storage_private'] = 0;
  55. $this->aInputs[$CNF['FIELD_VIDEO']]['multiple'] = true;
  56. $this->aInputs[$CNF['FIELD_VIDEO']]['content_id'] = 0;
  57. $this->aInputs[$CNF['FIELD_VIDEO']]['ghost_template'] = '';
  58. $this->aInputs[$CNF['FIELD_VIDEO']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
  59. }
  60. if (isset($CNF['FIELD_FILE']) && isset($this->aInputs[$CNF['FIELD_FILE']])) {
  61. $this->aInputs[$CNF['FIELD_FILE']]['storage_object'] = $CNF['OBJECT_STORAGE_FILES'];
  62. $this->aInputs[$CNF['FIELD_FILE']]['uploaders'] = !empty($this->aInputs[$CNF['FIELD_FILE']]['value']) ? unserialize($this->aInputs[$CNF['FIELD_FILE']]['value']) : $CNF['OBJECT_UPLOADERS'];
  63. $this->aInputs[$CNF['FIELD_FILE']]['images_transcoder'] = $CNF['OBJECT_IMAGES_TRANSCODER_PREVIEW_FILES'];
  64. $this->aInputs[$CNF['FIELD_FILE']]['storage_private'] = 0;
  65. $this->aInputs[$CNF['FIELD_FILE']]['multiple'] = true;
  66. $this->aInputs[$CNF['FIELD_FILE']]['content_id'] = 0;
  67. $this->aInputs[$CNF['FIELD_FILE']]['ghost_template'] = '';
  68. $this->aInputs[$CNF['FIELD_FILE']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
  69. }
  70. if(isset($this->aInputs[$CNF['FIELD_POLL']])) {
  71. $this->aInputs[$CNF['FIELD_POLL']]['tr_attrs'] = array('class'=> 'bx-base-text-attachment-item');
  72. }
  73. }
  74. function initChecker ($aValues = array (), $aSpecificValues = array())
  75. {
  76. $CNF = &$this->_oModule->_oConfig->CNF;
  77. $bValues = $aValues && !empty($aValues['id']);
  78. $aContentInfo = $bValues ? $this->_oModule->_oDb->getContentInfoById($aValues['id']) : false;
  79. if($this->aParams['display'] == $CNF['OBJECT_FORM_ENTRY_DISPLAY_EDIT'] && isset($CNF['FIELD_PUBLISHED']) && isset($this->aInputs[$CNF['FIELD_PUBLISHED']]))
  80. if($bValues && in_array($aValues[$CNF['FIELD_STATUS']], array('active', 'hidden')))
  81. unset($this->aInputs[$CNF['FIELD_PUBLISHED']]);
  82. if (isset($CNF['FIELD_COVER']) && isset($this->aInputs[$CNF['FIELD_COVER']])) {
  83. if($bValues)
  84. $this->aInputs[$CNF['FIELD_COVER']]['content_id'] = $aValues['id'];
  85. $this->aInputs[$CNF['FIELD_COVER']]['ghost_template'] = $this->_oModule->_oTemplate->parseHtmlByName($this->_sGhostTemplateCover, $this->_getCoverGhostTmplVars($aContentInfo));
  86. }
  87. parent::initChecker ($aValues, $aSpecificValues);
  88. if (isset($this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']])) {
  89. // try to get context from form POST
  90. $iProfileId = bx_get($CNF['FIELD_ALLOW_VIEW_TO']);
  91. // try to get context from the form saved value (in case of "edit" form)
  92. if ($iProfileId >= 0 && $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['value'] < 0)
  93. $iProfileId = $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['value'];
  94. // try to get context from GET param (in case of "create" form)
  95. if ($iProfileId >= 0)
  96. $iProfileId = bx_get('profile_id');
  97. $iProfileId = abs($iProfileId);
  98. $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['value'] = -$iProfileId;
  99. $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['type'] = 'hidden';
  100. if ($iProfileId)
  101. $this->_oProfileContext = BxDolProfile::getInstance($iProfileId);
  102. if (isset($this->aInputs[$CNF['FIELD_MODULE']]) && $this->_oProfileContext) {
  103. $this->aInputs[$CNF['FIELD_MODULE']]['values'] = $this->_oModule->_oDb->getEntriesModulesByContext($this->_oProfileContext->id(), true);
  104. }
  105. }
  106. }
  107. public function insert ($aValsToAdd = array(), $isIgnore = false)
  108. {
  109. $CNF = &$this->_oModule->_oConfig->CNF;
  110. if(isset($CNF['FIELD_ADDED']) && empty($aValsToAdd[$CNF['FIELD_ADDED']])) {
  111. $iAdded = 0;
  112. if(isset($this->aInputs[$CNF['FIELD_ADDED']]))
  113. $iAdded = $this->getCleanValue($CNF['FIELD_ADDED']);
  114. if(empty($iAdded))
  115. $iAdded = time();
  116. $aValsToAdd[$CNF['FIELD_ADDED']] = $iAdded;
  117. }
  118. if(empty($aValsToAdd[$CNF['FIELD_PUBLISHED']])) {
  119. $iPublished = 0;
  120. if(isset($this->aInputs[$CNF['FIELD_PUBLISHED']]))
  121. $iPublished = $this->getCleanValue($CNF['FIELD_PUBLISHED']);
  122. if(empty($iPublished))
  123. $iPublished = time();
  124. $aValsToAdd[$CNF['FIELD_PUBLISHED']] = $iPublished;
  125. }
  126. $aValsToAdd[$CNF['FIELD_STATUS']] = $aValsToAdd[$CNF['FIELD_PUBLISHED']] > $aValsToAdd[$CNF['FIELD_ADDED']] ? 'awaiting' : 'active';
  127. $aValsToAdd['order'] = $this->_oModule->_oDb->getClassMaxOrder(abs($this->getCleanValue($CNF['FIELD_ALLOW_VIEW_TO'])), $this->getCleanValue($CNF['FIELD_MODULE']));
  128. $iContentId = parent::insert ($aValsToAdd, $isIgnore);
  129. if(!empty($iContentId)){
  130. $this->processFiles($CNF['FIELD_COVER'], $iContentId, true);
  131. }
  132. return $iContentId;
  133. }
  134. function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
  135. {
  136. $CNF = &$this->_oModule->_oConfig->CNF;
  137. if(empty($aValsToAdd[$CNF['FIELD_PUBLISHED']]) && isset($this->aInputs[$CNF['FIELD_PUBLISHED']])) {
  138. $iPublished = $this->getCleanValue($CNF['FIELD_PUBLISHED']);
  139. if(empty($iPublished))
  140. $iPublished = time();
  141. $aValsToAdd[$CNF['FIELD_PUBLISHED']] = $iPublished;
  142. }
  143. $iResult = parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
  144. $this->processFiles($CNF['FIELD_COVER'], $iContentId, false);
  145. return $iResult;
  146. }
  147. protected function _getCoverGhostTmplVars($aContentInfo = array())
  148. {
  149. $CNF = &$this->_oModule->_oConfig->CNF;
  150. return array (
  151. 'name' => $this->aInputs[$CNF['FIELD_COVER']]['name'],
  152. 'content_id' => $this->aInputs[$CNF['FIELD_COVER']]['content_id'],
  153. 'editor_id' => isset($CNF['FIELD_TEXT_ID']) ? $CNF['FIELD_TEXT_ID'] : '',
  154. 'thumb_id' => isset($CNF['FIELD_THUMB']) && isset($aContentInfo[$CNF['FIELD_THUMB']]) ? $aContentInfo[$CNF['FIELD_THUMB']] : 0,
  155. 'name_thumb' => isset($CNF['FIELD_THUMB']) ? $CNF['FIELD_THUMB'] : ''
  156. );
  157. }
  158. protected function _getPhotoGhostTmplVars($aContentInfo = array())
  159. {
  160. $CNF = &$this->_oModule->_oConfig->CNF;
  161. return array (
  162. 'name' => $this->aInputs[$CNF['FIELD_PHOTO']]['name'],
  163. 'content_id' => (int)$this->aInputs[$CNF['FIELD_PHOTO']]['content_id'],
  164. 'editor_id' => isset($CNF['FIELD_TEXT_ID']) ? $CNF['FIELD_TEXT_ID'] : ''
  165. );
  166. }
  167. function getCode($bDynamicMode = false)
  168. {
  169. if (!$this->_bViewMode && !$this->_oProfileContext)
  170. return MsgBox(_t('_bx_classes_txt_err_cant_add_class_without_context'));
  171. // TODO: check permission for adding to context
  172. return parent::getCode($bDynamicMode);
  173. }
  174. protected function genCustomViewRowValueCompletedWhen($aInput)
  175. {
  176. unset($aInput['values_list_name']);
  177. return $aInput['value'] ? '<div class="bx-classes-field-view-completed-when">' . $this->genViewRowValueForSelect($aInput) . '</div>' : '';
  178. }
  179. protected function genCustomViewRowValueModuleId($aInput)
  180. {
  181. return $aInput['value'] ? '<div class="bx-classes-field-view-module">' . bx_process_output($this->_oModule->_oDb->getClassModuleTitleById ($aInput['value'])) . '</div>' : '';
  182. }
  183. protected function genCustomViewRowValueStartDate($aInput)
  184. {
  185. return $this->_genCustomViewRowValue($aInput, 'col-green1-dark');
  186. }
  187. protected function genCustomViewRowValueEndDate($aInput)
  188. {
  189. return $this->_genCustomViewRowValue($aInput, 'col-red1');
  190. }
  191. protected function _genCustomViewRowValue($aInput, $sClassAdd = '')
  192. {
  193. $sClass = "bx-classes-field-view-" . str_replace('_', '-', $aInput['name']) . ' ' . $sClassAdd;
  194. $sClass .= ' ' . $sClassAdd;
  195. $aInput['name'] .= '!';
  196. return '<div class="' . $sClass . '">' . parent::genViewRowValue($aInput) . '</div>';
  197. }
  198. }
  199. /** @} */