1
0

BxBaseModProfileFormEntry.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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 DolphinModules
  8. *
  9. * @{
  10. */
  11. bx_import('BxBaseModGeneralFormEntry');
  12. /**
  13. * Create/edit profile form.
  14. */
  15. class BxBaseModProfileFormEntry extends BxBaseModGeneralFormEntry
  16. {
  17. protected $_iAccountProfileId = 0;
  18. protected $_aImageFields = array ();
  19. public function __construct($aInfo, $oTemplate = false)
  20. {
  21. parent::__construct($aInfo, $oTemplate);
  22. $CNF = &$this->_oModule->_oConfig->CNF;
  23. if (!empty($CNF['FIELD_PICTURE'])) {
  24. $this->_aImageFields[$CNF['FIELD_PICTURE']] = array (
  25. 'storage_object' => $CNF['OBJECT_STORAGE'],
  26. 'images_transcoder' => $CNF['OBJECT_IMAGES_TRANSCODER_THUMB'],
  27. 'field_preview' => $CNF['FIELD_PICTURE_PREVIEW'],
  28. );
  29. }
  30. if (!empty($CNF['FIELD_COVER'])) {
  31. $this->_aImageFields[$CNF['FIELD_COVER']] = array (
  32. 'storage_object' => $CNF['OBJECT_STORAGE_COVER'],
  33. 'images_transcoder' => $CNF['OBJECT_IMAGES_TRANSCODER_COVER_THUMB'],
  34. 'field_preview' => $CNF['FIELD_COVER_PREVIEW'],
  35. );
  36. }
  37. if (!empty($CNF['FIELD_PICTURE_PREVIEW']))
  38. $this->_aImageFields[$CNF['FIELD_PICTURE_PREVIEW']] = $this->_aImageFields[$CNF['FIELD_PICTURE']];
  39. if (!empty($CNF['FIELD_COVER_PREVIEW']))
  40. $this->_aImageFields[$CNF['FIELD_COVER_PREVIEW']] = $this->_aImageFields[$CNF['FIELD_COVER']];
  41. $oAccountProfile = BxDolProfile::getInstanceAccountProfile();
  42. if ($oAccountProfile)
  43. $this->_iAccountProfileId = $oAccountProfile->id();
  44. }
  45. function initChecker ($aValues = array (), $aSpecificValues = array())
  46. {
  47. parent::initChecker($aValues, $aSpecificValues);
  48. $CNF = &$this->_oModule->_oConfig->CNF;
  49. foreach ($this->_aImageFields as $sField => $aVals) {
  50. if (!isset($this->aInputs[$sField]))
  51. continue;
  52. if ($aValues && !empty($aValues[$CNF['FIELD_ID']]))
  53. $this->aInputs[$sField]['content_id'] = $aValues[$CNF['FIELD_ID']];
  54. $sErrorString = '';
  55. $this->aInputs[$sField]['file_id'] = $this->_processFile ($sField, isset($aValues[$sField]) ? $aValues[$sField] : 0, $sErrorString);
  56. if ($sErrorString) {
  57. $this->aInputs[$sField]['error'] = $sErrorString;
  58. $this->setValid(false);
  59. }
  60. if (!isset($this->aInputs[$aVals['field_preview']]) || !empty($this->aInputs[$aVals['field_preview']]['content']))
  61. continue;
  62. $oTranscoder = BxDolImageTranscoder::getObjectInstance($aVals['images_transcoder']);
  63. $aVars = array (
  64. 'bx_if:picture' => array (
  65. 'condition' => $oTranscoder && isset($aValues[$sField]) && $aValues[$sField] ? true : false,
  66. 'content' => array (
  67. 'picture_url' => $oTranscoder && isset($aValues[$sField]) && $aValues[$sField] ? $oTranscoder->getImageUrl($aValues[$sField]) : '',
  68. ),
  69. ),
  70. 'bx_if:no_picture' => array (
  71. 'condition' => !$oTranscoder || !isset($aValues[$sField]) || !$aValues[$sField] ? true : false,
  72. 'content' => array (),
  73. ),
  74. );
  75. $this->aInputs[$aVals['field_preview']]['content'] = $this->_oModule->_oTemplate->parseHtmlByName('picture_preview.html', $aVars);
  76. }
  77. }
  78. public function insert ($aValsToAdd = array(), $isIgnore = false)
  79. {
  80. $CNF = &$this->_oModule->_oConfig->CNF;
  81. if (!empty($this->aInputs[$CNF['FIELD_PICTURE']])) {
  82. $aValsToAdd = array_merge($aValsToAdd, array (
  83. $CNF['FIELD_PICTURE'] => $this->aInputs[$CNF['FIELD_PICTURE']]['file_id'],
  84. ));
  85. }
  86. if (!empty($this->aInputs[$CNF['FIELD_COVER']])) {
  87. $aValsToAdd = array_merge($aValsToAdd, array (
  88. $CNF['FIELD_COVER'] => $this->aInputs[$CNF['FIELD_COVER']]['file_id'],
  89. ));
  90. }
  91. return parent::insert ($aValsToAdd, $isIgnore);
  92. }
  93. function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
  94. {
  95. $CNF = &$this->_oModule->_oConfig->CNF;
  96. if (!empty($this->aInputs[$CNF['FIELD_COVER']]))
  97. $aValsToAdd[$CNF['FIELD_COVER']] = $this->aInputs[$CNF['FIELD_COVER']]['file_id'];
  98. if (!empty($this->aInputs[$CNF['FIELD_PICTURE']]))
  99. $aValsToAdd[$CNF['FIELD_PICTURE']] = $this->aInputs[$CNF['FIELD_PICTURE']]['file_id'];
  100. return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
  101. }
  102. function delete ($iContentId, $aContentInfo = array())
  103. {
  104. $CNF = &$this->_oModule->_oConfig->CNF;
  105. foreach ($this->_aImageFields as $sField => $aVals) {
  106. if (isset($aContentInfo[$sField]) && $aContentInfo[$sField])
  107. $this->_deleteFile ($aContentInfo[$sField], $aVals['storage_object']);
  108. }
  109. bx_import('BxDolView');
  110. BxDolView::getObjectInstance($CNF['OBJECT_VIEWS'], $iContentId)->onObjectDelete();
  111. return parent::delete($iContentId);
  112. }
  113. function _processFile ($sField, $iFileIdOld, &$sErrorString)
  114. {
  115. if (empty($_FILES[$sField]['tmp_name']))
  116. return $iFileIdOld;
  117. $oStorage = BxDolStorage::getObjectInstance($this->_aImageFields[$sField]['storage_object']);
  118. if (!$oStorage)
  119. return $iFileIdOld;
  120. // delete previous file
  121. $this->_deleteFile($iFileIdOld, $this->_aImageFields[$sField]['storage_object']);
  122. // process new file and return new file id
  123. if (!($iFileId = $oStorage->storeFileFromForm($_FILES[$sField], false, $this->_iAccountProfileId))) {
  124. $sErrorString = $oStorage->getErrorString();
  125. return 0;
  126. }
  127. return $iFileId;
  128. }
  129. function _deleteFile ($iFileId, $sStorageObject)
  130. {
  131. if (!$iFileId)
  132. return true;
  133. if (!($oStorage = BxDolStorage::getObjectInstance($sStorageObject)))
  134. return false;
  135. if (!$oStorage->getFile($iFileId))
  136. return true;
  137. return $oStorage->deleteFile($iFileId, $this->_iAccountProfileId);
  138. }
  139. }
  140. /** @} */