BxBaseModProfileFormEntry.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  4. * CC-BY License - http://creativecommons.org/licenses/by/3.0/
  5. *
  6. * @defgroup BaseProfile Base classes for profile modules
  7. * @ingroup TridentModules
  8. *
  9. * @{
  10. */
  11. /**
  12. * Create/edit profile form.
  13. */
  14. class BxBaseModProfileFormEntry extends BxBaseModGeneralFormEntry
  15. {
  16. protected $_iAccountProfileId = 0;
  17. protected $_aImageFields = array ();
  18. public function __construct($aInfo, $oTemplate = false)
  19. {
  20. parent::__construct($aInfo, $oTemplate);
  21. $CNF = &$this->_oModule->_oConfig->CNF;
  22. if (isset($this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]) && $oPrivacy = BxDolPrivacy::getObjectInstance($CNF['OBJECT_PRIVACY_VIEW'])) {
  23. $sInfo = $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['info'];
  24. $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']] = $oPrivacy->getGroupChooser($CNF['OBJECT_PRIVACY_VIEW']);
  25. $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['db']['pass'] = 'Xss';
  26. $this->aInputs[$CNF['FIELD_ALLOW_VIEW_TO']]['info'] = $sInfo;
  27. }
  28. if (!empty($CNF['FIELD_PICTURE'])) {
  29. $this->_aImageFields[$CNF['FIELD_PICTURE']] = array (
  30. 'storage_object' => $CNF['OBJECT_STORAGE'],
  31. 'images_transcoder' => $CNF['OBJECT_IMAGES_TRANSCODER_THUMB'],
  32. 'field_preview' => $CNF['FIELD_PICTURE_PREVIEW'],
  33. );
  34. }
  35. if (!empty($CNF['FIELD_COVER'])) {
  36. $this->_aImageFields[$CNF['FIELD_COVER']] = array (
  37. 'storage_object' => $CNF['OBJECT_STORAGE_COVER'],
  38. 'images_transcoder' => $CNF['OBJECT_IMAGES_TRANSCODER_COVER_THUMB'],
  39. 'field_preview' => $CNF['FIELD_COVER_PREVIEW'],
  40. );
  41. }
  42. if (!empty($CNF['FIELD_PICTURE_PREVIEW']))
  43. $this->_aImageFields[$CNF['FIELD_PICTURE_PREVIEW']] = $this->_aImageFields[$CNF['FIELD_PICTURE']];
  44. if (!empty($CNF['FIELD_COVER_PREVIEW']))
  45. $this->_aImageFields[$CNF['FIELD_COVER_PREVIEW']] = $this->_aImageFields[$CNF['FIELD_COVER']];
  46. $oAccountProfile = BxDolProfile::getInstanceAccountProfile();
  47. if ($oAccountProfile)
  48. $this->_iAccountProfileId = $oAccountProfile->id();
  49. }
  50. function initChecker ($aValues = array (), $aSpecificValues = array())
  51. {
  52. $CNF = &$this->_oModule->_oConfig->CNF;
  53. if (!empty($aValues[$CNF['FIELD_PICTURE']]) && $aValues[$CNF['FIELD_PICTURE']] && isset($this->aInputs[$CNF['FIELD_PICTURE']]) && $this->aInputs[$CNF['FIELD_PICTURE']]) {
  54. $this->aInputs[$CNF['FIELD_PICTURE']]['required'] = false;
  55. unset($this->aInputs[$CNF['FIELD_PICTURE']]['checker']);
  56. }
  57. parent::initChecker($aValues, $aSpecificValues);
  58. foreach ($this->_aImageFields as $sField => $aVals) {
  59. if (!isset($this->aInputs[$sField]))
  60. continue;
  61. if ($aValues && !empty($aValues[$CNF['FIELD_ID']]))
  62. $this->aInputs[$sField]['content_id'] = $aValues[$CNF['FIELD_ID']];
  63. $sErrorString = '';
  64. $this->aInputs[$sField]['file_id'] = $this->_processFile (!empty($aValues[$CNF['FIELD_ID']]) ? $aValues[$CNF['FIELD_ID']] : 0, $sField, isset($aValues[$sField]) ? $aValues[$sField] : 0, $sErrorString);
  65. if ($sErrorString) {
  66. $this->aInputs[$sField]['error'] = $sErrorString;
  67. $this->setValid(false);
  68. }
  69. if (!isset($this->aInputs[$aVals['field_preview']]) || !empty($this->aInputs[$aVals['field_preview']]['content']))
  70. continue;
  71. $oTranscoder = BxDolTranscoderImage::getObjectInstance($aVals['images_transcoder']);
  72. $aVars = array (
  73. 'bx_if:picture' => array (
  74. 'condition' => $oTranscoder && isset($aValues[$sField]) && $aValues[$sField] ? true : false,
  75. 'content' => array (
  76. 'picture_url' => $oTranscoder && isset($aValues[$sField]) && $aValues[$sField] ? $oTranscoder->getFileUrl($aValues[$sField]) : '',
  77. ),
  78. ),
  79. 'bx_if:no_picture' => array (
  80. 'condition' => !$oTranscoder || !isset($aValues[$sField]) || !$aValues[$sField] ? true : false,
  81. 'content' => array (),
  82. ),
  83. 'bx_if:delete' => array (
  84. 'condition' => $oTranscoder && isset($aValues[$sField]) && $aValues[$sField] && $sField == $CNF['FIELD_COVER'] ? true : false,
  85. 'content' => array ('action_ajax' => isset($aValues[$sField]) ? BX_DOL_URL_ROOT . $this->_oModule->_oConfig->getBaseUri() . 'delete_profile_img/' . $aValues[$sField] . '/' . (!empty($aValues[$CNF['FIELD_ID']]) ? $aValues[$CNF['FIELD_ID']] : 0) . '/' . $sField : ''),
  86. ),
  87. );
  88. $this->aInputs[$aVals['field_preview']]['content'] = $this->_oModule->_oTemplate->parseHtmlByName('picture_preview.html', $aVars);
  89. }
  90. }
  91. public function insert ($aValsToAdd = array(), $isIgnore = false)
  92. {
  93. $CNF = &$this->_oModule->_oConfig->CNF;
  94. if (!empty($this->aInputs[$CNF['FIELD_PICTURE']]) && !empty($this->aInputs[$CNF['FIELD_PICTURE']]['file_id'])) {
  95. $aValsToAdd = array_merge($aValsToAdd, array (
  96. $CNF['FIELD_PICTURE'] => $this->aInputs[$CNF['FIELD_PICTURE']]['file_id'],
  97. ));
  98. }
  99. if (!empty($this->aInputs[$CNF['FIELD_COVER']]) && !empty($this->aInputs[$CNF['FIELD_COVER']]['file_id'])) {
  100. $aValsToAdd = array_merge($aValsToAdd, array (
  101. $CNF['FIELD_COVER'] => $this->aInputs[$CNF['FIELD_COVER']]['file_id'],
  102. ));
  103. }
  104. return parent::insert ($aValsToAdd, $isIgnore);
  105. }
  106. function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
  107. {
  108. $CNF = &$this->_oModule->_oConfig->CNF;
  109. if (!empty($this->aInputs[$CNF['FIELD_COVER']]) && !empty($this->aInputs[$CNF['FIELD_COVER']]['file_id']))
  110. $aValsToAdd[$CNF['FIELD_COVER']] = $this->aInputs[$CNF['FIELD_COVER']]['file_id'];
  111. if (!empty($this->aInputs[$CNF['FIELD_PICTURE']]) && !empty($this->aInputs[$CNF['FIELD_PICTURE']]['file_id']))
  112. $aValsToAdd[$CNF['FIELD_PICTURE']] = $this->aInputs[$CNF['FIELD_PICTURE']]['file_id'];
  113. return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
  114. }
  115. function delete ($iContentId, $aContentInfo = array())
  116. {
  117. $CNF = &$this->_oModule->_oConfig->CNF;
  118. foreach ($this->_aImageFields as $sField => $aVals) {
  119. if (isset($aContentInfo[$sField]) && $aContentInfo[$sField])
  120. $this->_deleteFile ($iContentId, $sField, $aContentInfo[$sField]);
  121. }
  122. return parent::delete($iContentId, $aContentInfo);
  123. }
  124. function _processFile ($iContentId, $sField, $iFileIdOld, &$sErrorString)
  125. {
  126. if (empty($_FILES[$sField]['tmp_name']))
  127. return $iFileIdOld;
  128. $oStorage = BxDolStorage::getObjectInstance($this->_aImageFields[$sField]['storage_object']);
  129. if (!$oStorage)
  130. return $iFileIdOld;
  131. // delete previous file
  132. $this->_deleteFile($iContentId, $sField, $iFileIdOld);
  133. // process new file and return new file id
  134. if (!($iFileId = $oStorage->storeFileFromForm($_FILES[$sField], false, $this->_iAccountProfileId))) {
  135. $sErrorString = $oStorage->getErrorString();
  136. return 0;
  137. }
  138. return $iFileId;
  139. }
  140. function _deleteFile ($iContentId, $sFieldPicture, $iFileId, $bForceFieldUpdate = false)
  141. {
  142. if (!$iFileId)
  143. return true;
  144. if (!$this->_aImageFields[$sFieldPicture]['storage_object'])
  145. return false;
  146. if (!($oStorage = BxDolStorage::getObjectInstance($this->_aImageFields[$sFieldPicture]['storage_object'])))
  147. return false;
  148. if (!$oStorage->getFile($iFileId))
  149. return true;
  150. if (($bRet = $oStorage->deleteFile($iFileId, $this->_iAccountProfileId)) && $bForceFieldUpdate) {
  151. $this->_oModule->_oDb->updateContentPictureById($iContentId, 0, 0, $sFieldPicture);
  152. }
  153. return $bRet;
  154. }
  155. }
  156. /** @} */