mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
User picture: Update contact's image attribute with preferences' placeholder so it can be used elsewhere
This commit is contained in:
@@ -294,6 +294,7 @@ return array(
|
||||
'Combodo\\iTop\\Composer\\iTopComposer' => $baseDir . '/sources/Composer/iTopComposer.php',
|
||||
'Combodo\\iTop\\Controller\\AjaxRenderController' => $baseDir . '/sources/Controller/AjaxRenderController.php',
|
||||
'Combodo\\iTop\\Controller\\Base\\Layout\\ActivityPanelController' => $baseDir . '/sources/Controller/Base/Layout/ActivityPanelController.php',
|
||||
'Combodo\\iTop\\Controller\\PreferencesController' => $baseDir . '/sources/Controller/PreferencesController.php',
|
||||
'Combodo\\iTop\\DesignDocument' => $baseDir . '/core/designdocument.class.inc.php',
|
||||
'Combodo\\iTop\\DesignElement' => $baseDir . '/core/designdocument.class.inc.php',
|
||||
'Combodo\\iTop\\Form\\Field\\BlobField' => $baseDir . '/sources/Form/Field/BlobField.php',
|
||||
|
||||
@@ -524,6 +524,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
|
||||
'Combodo\\iTop\\Composer\\iTopComposer' => __DIR__ . '/../..' . '/sources/Composer/iTopComposer.php',
|
||||
'Combodo\\iTop\\Controller\\AjaxRenderController' => __DIR__ . '/../..' . '/sources/Controller/AjaxRenderController.php',
|
||||
'Combodo\\iTop\\Controller\\Base\\Layout\\ActivityPanelController' => __DIR__ . '/../..' . '/sources/Controller/Base/Layout/ActivityPanelController.php',
|
||||
'Combodo\\iTop\\Controller\\PreferencesController' => __DIR__ . '/../..' . '/sources/Controller/PreferencesController.php',
|
||||
'Combodo\\iTop\\DesignDocument' => __DIR__ . '/../..' . '/core/designdocument.class.inc.php',
|
||||
'Combodo\\iTop\\DesignElement' => __DIR__ . '/../..' . '/core/designdocument.class.inc.php',
|
||||
'Combodo\\iTop\\Form\\Field\\BlobField' => __DIR__ . '/../..' . '/sources/Form/Field/BlobField.php',
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
use Combodo\iTop\Controller\AjaxRenderController;
|
||||
use Combodo\iTop\Controller\Base\Layout\ActivityPanelController;
|
||||
use Combodo\iTop\Controller\PreferencesController;
|
||||
use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer;
|
||||
use Combodo\iTop\Renderer\Console\ConsoleFormRenderer;
|
||||
|
||||
@@ -2736,6 +2737,24 @@ EOF
|
||||
$oPage->add(json_encode($aResult));
|
||||
break;
|
||||
|
||||
//--------------------------------
|
||||
// Preferences
|
||||
//--------------------------------
|
||||
case 'preferences_set_user_picture':
|
||||
$oPage = new JsonPage();
|
||||
try {
|
||||
$aResult = PreferencesController::SetUserPicture();
|
||||
$aResult['success'] = true;
|
||||
}
|
||||
catch (Exception $oException) {
|
||||
$aResult = [
|
||||
'success' => false,
|
||||
'error_message' => $oException->getMessage(),
|
||||
];
|
||||
}
|
||||
$oPage->SetData($aResult);
|
||||
break;
|
||||
|
||||
//--------------------------------
|
||||
// Activity panel
|
||||
//--------------------------------
|
||||
|
||||
@@ -402,9 +402,28 @@ JS
|
||||
$oP->add_ready_script(
|
||||
<<<JS
|
||||
$('[data-role="ibo-preferences--user-preferences--picture-placeholder--image"]').on('click',function(){
|
||||
SetUserPreference('user_picture_placeholder', $(this).attr('data-image-name'), true);
|
||||
$('[data-role="ibo-preferences--user-preferences--picture-placeholder--image"]').removeClass('ibo-is-active');
|
||||
$(this).addClass('ibo-is-active');
|
||||
const me = this;
|
||||
|
||||
// Save new preference
|
||||
$.post(
|
||||
GetAbsoluteUrlAppRoot()+'pages/ajax.render.php',
|
||||
{
|
||||
'operation': 'preferences_set_user_picture',
|
||||
'image_filename': $(this).attr('data-image-name')
|
||||
}
|
||||
)
|
||||
.done(function(oData){
|
||||
if(false === oData.success){
|
||||
return;
|
||||
}
|
||||
|
||||
// Update selection
|
||||
$('[data-role="ibo-preferences--user-preferences--picture-placeholder--image"]').removeClass('ibo-is-active');
|
||||
$(me).addClass('ibo-is-active');
|
||||
|
||||
// Update navigation menu
|
||||
$('[data-role="ibo-navigation-menu--user-picture--image"]').attr('src', oData.data.image_url);
|
||||
});
|
||||
});
|
||||
JS
|
||||
);
|
||||
|
||||
67
sources/Controller/PreferencesController.php
Normal file
67
sources/Controller/PreferencesController.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*
|
||||
* @copyright Copyright (C) 2010-2021 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Controller;
|
||||
|
||||
use appUserPreferences;
|
||||
use Exception;
|
||||
use MetaModel;
|
||||
use ormDocument;
|
||||
use UserRights;
|
||||
use utils;
|
||||
|
||||
/**
|
||||
* Class PreferencesController
|
||||
*
|
||||
* @internal
|
||||
* @author Guillaume Lajarige <guillaume.lajarige@combodo.com>
|
||||
* @since 3.0.0
|
||||
* @package Combodo\iTop\Controller
|
||||
*/
|
||||
class PreferencesController
|
||||
{
|
||||
/**
|
||||
* @return string[]
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \MySQLException
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function SetUserPicture(): array
|
||||
{
|
||||
$sImageFilename = utils::ReadPostedParam('image_filename', null, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
|
||||
|
||||
// Set preference for the user
|
||||
appUserPreferences::SetPref('user_picture_placeholder', $sImageFilename);
|
||||
|
||||
$sUserPicturesFolder = 'images/user-pictures/';
|
||||
$sImageAbsPath = APPROOT.$sUserPicturesFolder.$sImageFilename;
|
||||
$sImageAbsUrl = utils::GetAbsoluteUrlAppRoot().$sUserPicturesFolder.$sImageFilename;
|
||||
|
||||
// Check file can be read
|
||||
$sImageData = file_get_contents($sImageAbsPath);
|
||||
if (false === $sImageData) {
|
||||
throw new Exception('Error while updating user image, could not open file "'.$sImageAbsPath.'"');
|
||||
}
|
||||
|
||||
// Check if user has a contact with an image attribute, so we put the image in it also
|
||||
$sPersonClass = 'Person';
|
||||
if (true === MetaModel::HasImageAttributeCode($sPersonClass)) {
|
||||
$oCurContact = UserRights::GetContactObject();
|
||||
if (null !== $oCurContact) {
|
||||
// Update contact
|
||||
$sImageMimeType = mime_content_type($sImageAbsPath);
|
||||
$oOrmImage = new ormDocument($sImageData, $sImageMimeType, $sImageFilename);
|
||||
|
||||
$sImageAttCode = MetaModel::GetImageAttributeCode($sPersonClass);
|
||||
$oCurContact->Set($sImageAttCode, $oOrmImage);
|
||||
$oCurContact->DBUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
return ['image_url' => $sImageAbsUrl];
|
||||
}
|
||||
}
|
||||
@@ -42,11 +42,12 @@
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="ibo-navigation-menu--user-info">
|
||||
<div class="ibo-navigation-menu--user-picture">
|
||||
<a data-role="ibo-navigation-menu--user-menu--toggler" href="#">
|
||||
<img class="ibo-navigation-menu--user-picture--image"
|
||||
src="{{ oUIBlock.GetUserData().sPictureUrl }}"
|
||||
<div class="ibo-navigation-menu--user-info">
|
||||
<div class="ibo-navigation-menu--user-picture">
|
||||
<a data-role="ibo-navigation-menu--user-menu--toggler" href="#">
|
||||
<img class="ibo-navigation-menu--user-picture--image"
|
||||
data-role="ibo-navigation-menu--user-picture--image"
|
||||
src="{{ oUIBlock.GetUserData().sPictureUrl }}"
|
||||
alt="{{ 'UI:Layout:NavigationMenu:UserInfo:Picture:AltText'|dict_format(oUIBlock.GetUserData().sFirstname) }}"
|
||||
data-tooltip-content="{{ oUIBlock.GetUserData().sLogonMessage }}"
|
||||
data-tooltip-placement="right"
|
||||
|
||||
Reference in New Issue
Block a user