N°2323.6 Reintegrate fixes in the new Symfony portal

This commit is contained in:
Molkobain
2019-07-12 10:17:58 +02:00
parent 38640b01a8
commit 5c0fc0bec5
4 changed files with 36 additions and 26 deletions

View File

@@ -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.

View File

@@ -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(),

View File

@@ -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());

View File

@@ -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');
}
}
}