diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/userprofilebrickcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/userprofilebrickcontroller.class.inc.php index a5b64263d..270efb5e8 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/userprofilebrickcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/userprofilebrickcontroller.class.inc.php @@ -21,6 +21,7 @@ namespace Combodo\iTop\Portal\Controller; use \Exception; use \IssueLog; +use \utils; use \MetaModel; use \UserRights; use \Silex\Application; @@ -34,6 +35,7 @@ use \Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; class UserProfileBrickController extends BrickController { + const ENUM_FORM_TYPE_PICTURE = 'picture'; public function DisplayAction(Request $oRequest, Application $oApp, $sBrickId) { @@ -79,6 +81,10 @@ class UserProfileBrickController extends BrickController { $aData['form'] = $this->HandlePasswordForm($oRequest, $oApp); } + elseif ($sFormType === static::ENUM_FORM_TYPE_PICTURE) + { + $aData['form'] = $this->HandlePictureForm($oRequest, $oApp, $sFormMode); + } else { throw new Exception('Unknown form type.'); @@ -235,6 +241,66 @@ class UserProfileBrickController extends BrickController return $aFormData; } + public function HandlePictureForm(Request $oRequest, Application $oApp, $sFormMode) + { + $aFormData = array(); + $oRequestParams = $oRequest->request; + $sPictureAttCode = 'picture'; + + // Handling form + $sOperation = $oRequestParams->get('operation'); + // - No operation specified + if ($sOperation === null) + { + IssueLog::Error(__METHOD__ . ' at line ' . __LINE__ . ' : Operation parameter must be specified.'); + $oApp->abort(500, 'Operation parameter must be specified.'); + } + // - Submit + else if ($sOperation === 'submit') + { + $oRequestFiles = $oRequest->files; + $oPictureFile = $oRequestFiles->get($sPictureAttCode); + if ($oPictureFile === null) + { + IssueLog::Error(__METHOD__ . ' at line ' . __LINE__ . ' : Parameter picture must be defined.'); + $oApp->abort(500, 'Parameter picture must be defined.'); + } + + try + { + // Retrieving image as an ORMDocument + $oImage = utils::ReadPostedDocument($sPictureAttCode); + // Retrieving current contact + $oCurContact = UserRights::GetContactObject(); + // Resizing image + $oAttDef = MetaModel::GetAttributeDef(get_class($oCurContact), $sPictureAttCode); + $aSize = utils::GetImageSize($oImage->GetData()); + $oImage = utils::ResizeImageToFit($oImage, $aSize[0], $aSize[1], $oAttDef->Get('storage_max_width'), $oAttDef->Get('storage_max_height')); + // Setting it to the contact + $oCurContact->Set($sPictureAttCode, $oImage); + // Forcing allowed writing on the object if necessary. + $oCurContact->AllowWrite(true); + $oCurContact->DBUpdate(); + } + catch (FileUploadException $e) + { + $aFormData['error'] = $e->GetMessage(); + } + + $aFormData['picture_url'] = $oImage->GetDownloadURL(get_class($oCurContact), $oCurContact->GetKey(), $sPictureAttCode); + $aFormData['validation'] = array( + 'valid' => true, + 'messages' => array() + ); + } + else + { + // Else, submit from another form + } + + return $aFormData; + } + } ?> \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/routers/userprofilebrickrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/routers/userprofilebrickrouter.class.inc.php index c97e8eed5..1d4a840de 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/routers/userprofilebrickrouter.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/routers/userprofilebrickrouter.class.inc.php @@ -29,7 +29,8 @@ class UserProfileRouter extends AbstractRouter 'bind' => 'p_user_profile_brick', 'values' => array( 'sBrickId' => null - )) + ) + ) ); } diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/user-profile/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/user-profile/layout.html.twig index 3ead8d969..e37610889 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/user-profile/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/user-profile/layout.html.twig @@ -41,17 +41,37 @@
-
+