diff --git a/datamodels/2.x/itop-portal-base/portal/config/services.yaml b/datamodels/2.x/itop-portal-base/portal/config/services.yaml index 07cebc2ff..455020169 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/services.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/services.yaml @@ -95,7 +95,7 @@ services: combodo.current_contact.photo_url: public: true class: Combodo\iTop\Portal\VariableAccessor\CombodoCurrentContactPhotoUrl - arguments: ['@combodo.current_user'] + arguments: ['@combodo.current_user', '@service_container'] # Note: This service is initialized with a UserLocal object as it needs a class that can be instantiated. # Anyway, it will be replaced with the real class by UserProvider in onKernelRequestEvent. # Note: Services relying on this one should use \User in their signature and not \UserLocal. diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php index 78db19de1..f88dc17aa 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php @@ -22,21 +22,21 @@ namespace Combodo\iTop\Portal\Controller; +use Combodo\iTop\Portal\Brick\UserProfileBrick; +use Combodo\iTop\Portal\Form\PasswordFormManager; +use Combodo\iTop\Portal\Form\PreferencesFormManager; use Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper; +use Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; use Exception; use FileUploadException; use IssueLog; +use MetaModel; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; -use utils; -use MetaModel; use UserRights; -use Symfony\Component\HttpFoundation\Request; -use Combodo\iTop\Portal\Brick\UserProfileBrick; -use Combodo\iTop\Portal\Form\PreferencesFormManager; -use Combodo\iTop\Portal\Form\PasswordFormManager; -use Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; +use utils; /** * Class UserProfileBrickController @@ -323,6 +323,8 @@ class UserProfileBrickController extends BrickController { /** @var \Combodo\iTop\Portal\Helper\RequestManipulatorHelper $oRequestManipulator */ $oRequestManipulator = $this->get('request_manipulator'); + /** @var \Combodo\iTop\Portal\Routing\UrlGenerator $oUrlGenerator */ + $oUrlGenerator = $this->get('url_generator'); $aFormData = array(); $sPictureAttCode = 'picture'; @@ -371,7 +373,8 @@ class UserProfileBrickController extends BrickController $aFormData['error'] = $e->GetMessage(); } - $aFormData['picture_url'] = $oImage->GetDownloadURL(get_class($oCurContact), $oCurContact->GetKey(), $sPictureAttCode); + // TODO: This should be changed when refactoring the ormDocument GetDisplayUrl() and GetDownloadUrl() in iTop 2.8 + $aFormData['picture_url'] = $oUrlGenerator->generate('p_object_document_display', array('sObjectClass' => get_class($oCurContact), 'sObjectId' => $oCurContact->GetKey(), 'sObjectField' => $sPictureAttCode, 'cache' => 86400, 't' => time())); $aFormData['validation'] = array( 'valid' => true, 'messages' => array(), diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index 85c56785b..4317d7ee7 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -864,11 +864,11 @@ class ObjectFormManager extends FormManager if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\BlobField', 'Combodo\\iTop\\Form\\Field\\ImageField'))) { // - Overriding attributes to display - if ($this->oApp !== null) + if ($this->oContainer !== null) { // Override hardcoded URLs in ormDocument pointing to back office console - $sDisplayUrl = $this->oApp['url_generator']->generate('p_object_document_display', array('sObjectClass' => get_class($this->oObject), 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, 'cache' => 86400)); - $sDownloadUrl = $this->oApp['url_generator']->generate('p_object_document_download', array('sObjectClass' => get_class($this->oObject), 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, 'cache' => 86400)); + $sDisplayUrl = $this->oContainer->get('url_generator')->generate('p_object_document_display', array('sObjectClass' => get_class($this->oObject), 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, 'cache' => 86400)); + $sDownloadUrl = $this->oContainer->get('url_generator')->generate('p_object_document_download', array('sObjectClass' => get_class($this->oObject), 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, 'cache' => 86400)); /** @var \Combodo\iTop\Form\Field\BlobField $oField */ $oField->SetDisplayUrl($sDisplayUrl) ->SetDownloadUrl($sDownloadUrl); @@ -895,14 +895,14 @@ class ObjectFormManager extends FormManager } // Checking dependencies to ensure that all needed fields are in the form - // (This is kind of a garbage collector for dependancies) - foreach ($oForm->GetDependencies() as $sImpactedFieldId => $aDependancies) + // (This is kind of a garbage collector for dependencies) + foreach ($oForm->GetDependencies() as $sImpactedFieldId => $aDependencies) { - foreach ($aDependancies as $sDependancyFieldId) + foreach ($aDependencies as $sDependencyFieldId) { - if (!$oForm->HasField($sDependancyFieldId)) + if (!$oForm->HasField($sDependencyFieldId)) { - $oAttDef = MetaModel::GetAttributeDef(get_class($this->oObject), $sDependancyFieldId); + $oAttDef = MetaModel::GetAttributeDef(get_class($this->oObject), $sDependencyFieldId); $oField = $oAttDef->MakeFormField($this->oObject); $oField->SetHidden(true); @@ -1145,7 +1145,7 @@ class ObjectFormManager extends FormManager $oAttDef = MetaModel::GetAttributeDef($sObjectClass, $sAttCode); if ($oAttDef->IsLinkSet()) { - /** @var \AttributeLinkedSet $oAttDef*/ + /** @var \AttributeLinkedSet $oAttDef */ // Parsing JSON value // @@ -1174,7 +1174,7 @@ class ObjectFormManager extends FormManager // Creating link when linkset is indirect... if ($oAttDef->IsIndirect()) { - /** @var \AttributeLinkedSetIndirect $oAttDef*/ + /** @var \AttributeLinkedSetIndirect $oAttDef */ $oLink = MetaModel::NewObject($sLinkedClass); $oLink->Set($oAttDef->GetExtKeyToRemote(), $iObjKey); $oLink->Set($oAttDef->GetExtKeyToMe(), $this->oObject->GetKey()); diff --git a/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php b/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php index f14b8a9cb..e2c7117d6 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php +++ b/datamodels/2.x/itop-portal-base/portal/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php @@ -24,6 +24,7 @@ namespace Combodo\iTop\Portal\VariableAccessor; use Exception; use MetaModel; +use Symfony\Component\DependencyInjection\ContainerInterface; use User; use UserRights; @@ -42,16 +43,20 @@ class CombodoCurrentContactPhotoUrl private $sCombodoPortalInstanceAbsoluteUrl; /** @var string|null $sContactPhotoUrl */ private $sContactPhotoUrl; + /** @var \Symfony\Component\DependencyInjection\ContainerInterface */ + private $oContainer; /** * CombodoCurrentContactPhotoUrl constructor. * - * @param \User $oUser - * @param string $sCombodoPortalInstanceAbsoluteUrl + * @param \User $oUser + * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer + * @param string $sCombodoPortalInstanceAbsoluteUrl */ - public function __construct(User $oUser, $sCombodoPortalInstanceAbsoluteUrl) + public function __construct(User $oUser, ContainerInterface $oContainer, $sCombodoPortalInstanceAbsoluteUrl) { $this->oUser = $oUser; + $this->oContainer = $oContainer; $this->sCombodoPortalInstanceAbsoluteUrl = $sCombodoPortalInstanceAbsoluteUrl; $this->sContactPhotoUrl = null; } @@ -101,17 +106,19 @@ class CombodoCurrentContactPhotoUrl // - Retrieving picture if ($oContact) { - if (MetaModel::IsValidAttCode(get_class($oContact), 'picture')) + $sPictureAttCode = 'picture'; + if (MetaModel::IsValidAttCode(get_class($oContact), $sPictureAttCode)) { /** @var \ormDocument $oImage */ - $oImage = $oContact->Get('picture'); + $oImage = $oContact->Get($sPictureAttCode); if (is_object($oImage) && !$oImage->IsEmpty()) { - $sContactPhotoUrl = $oImage->GetDownloadURL(get_class($oContact), $oContact->GetKey(), 'picture'); + // TODO: This should be changed when refactoring the ormDocument GetDisplayUrl() and GetDownloadUrl() in iTop 2.8 + $sContactPhotoUrl = $this->oContainer->get('url_generator')->generate('p_object_document_display', array('sObjectClass' => get_class($oContact), 'sObjectId' => $oContact->GetKey(), 'sObjectField' => $sPictureAttCode, 'cache' => 86400)); } else { - $sContactPhotoUrl = MetaModel::GetAttributeDef(get_class($oContact), 'picture')->Get('default_image'); + $sContactPhotoUrl = MetaModel::GetAttributeDef(get_class($oContact), $sPictureAttCode)->Get('default_image'); } } }