mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-17 15:03:25 +00:00
Add phraseanet twig extension
This commit is contained in:
@@ -128,6 +128,7 @@ use Alchemy\Phrasea\Twig\JSUniqueID;
|
||||
use Alchemy\Phrasea\Twig\Fit;
|
||||
use Alchemy\Phrasea\Twig\Camelize;
|
||||
use Alchemy\Phrasea\Twig\BytesConverter;
|
||||
use Alchemy\Phrasea\Twig\PhraseanetExtension;
|
||||
use Alchemy\Phrasea\Utilities\CachedTranslator;
|
||||
use FFMpeg\FFMpegServiceProvider;
|
||||
use Monolog\Logger;
|
||||
@@ -645,6 +646,7 @@ class Application extends SilexApplication
|
||||
$twig->addExtension(new Fit());
|
||||
$twig->addExtension(new Camelize());
|
||||
$twig->addExtension(new BytesConverter());
|
||||
$twig->addExtension(new PhraseanetExtension($app));
|
||||
|
||||
$twig->addFilter('serialize', new \Twig_Filter_Function('serialize'));
|
||||
$twig->addFilter('stristr', new \Twig_Filter_Function('stristr'));
|
||||
|
189
lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php
Normal file
189
lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php
Normal file
@@ -0,0 +1,189 @@
|
||||
<?php
|
||||
|
||||
namespace Alchemy\Phrasea\Twig;
|
||||
|
||||
use Alchemy\Phrasea\Model\Entities\ElasticsearchRecord;
|
||||
use Alchemy\Phrasea\Model\Entities\User;
|
||||
use Alchemy\Phrasea\Model\RecordInterface;
|
||||
|
||||
class PhraseanetExtension extends \Twig_Extension
|
||||
{
|
||||
private $app;
|
||||
|
||||
public function __construct(
|
||||
$app
|
||||
) {
|
||||
$this->app = $app;
|
||||
}
|
||||
|
||||
public function getFilters()
|
||||
{
|
||||
return array(
|
||||
);
|
||||
}
|
||||
|
||||
public function getFunctions()
|
||||
{
|
||||
return array(
|
||||
new \Twig_SimpleFunction('user_setting', array($this, 'getUserSetting')),
|
||||
new \Twig_SimpleFunction('record_thumbnail_url', array($this, 'getThumbnailUrl')),
|
||||
new \Twig_SimpleFunction('record_doctype_icon', array($this, 'getDoctypeIcon'), array(
|
||||
'is_safe' => array('html')
|
||||
)),
|
||||
new \Twig_SimpleFunction('has_access_subdef', array($this, 'hasAccessSubDefinition')),
|
||||
new \Twig_SimpleFunction('record_thumbnailgif_url', array($this, 'getThumbnailGifUrl')),
|
||||
new \Twig_SimpleFunction('granted_on_collection', array($this, 'isGrantedOnCollection')),
|
||||
new \Twig_SimpleFunction('granted_on_databox', array($this, 'isGrantedOnDatabox')),
|
||||
new \Twig_SimpleFunction('collection_logo', array($this, 'getCollectionLogo'), array(
|
||||
'is_safe' => array('html')
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
public function isGrantedOnDatabox($databoxId, $rights)
|
||||
{
|
||||
if (false === ($this->app['authentication']->getUser() instanceof User)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$rights = (array) $rights;
|
||||
foreach ($rights as $right) {
|
||||
if (false === $this->app['acl']->get($this->app['authentication']->getUser())->has_right_on_sbas($databoxId, $right)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isGrantedOnCollection($baseId, $rights)
|
||||
{
|
||||
if (false === ($this->app['authentication']->getUser() instanceof User)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$rights = (array) $rights;
|
||||
foreach ($rights as $right) {
|
||||
if (false === $this->app['acl']->get($this->app['authentication']->getUser())->has_right_on_base($baseId, $right)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getCollectionLogo($baseId)
|
||||
{
|
||||
if (false === $this->app['filesystem']->exists(sprintf('%s/config/minilogos/%s', $this->app['root.path'], $baseId))) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'<img title="%s" src="/custom/minilogos/%s" />',
|
||||
\phrasea::bas_labels($baseId, $this->app),
|
||||
$baseId
|
||||
);
|
||||
}
|
||||
|
||||
public function hasAccessSubDefinition(RecordInterface $record, $subDefinition)
|
||||
{
|
||||
if (false === ($this->app['authentication']->getUser() instanceof User)) {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->app['acl']->get($this->app['authentication']->getUser())->has_access_to_subdef($record, $subDefinition);
|
||||
}
|
||||
|
||||
public function getDoctypeIcon(RecordInterface $record)
|
||||
{
|
||||
$src = $title = '';
|
||||
if ($record->isStory()) {
|
||||
$src = '/skins/icons/icon_story.gif';
|
||||
$title = $this->app['translator']->trans('reportage');
|
||||
|
||||
return sprintf('<img src="%s" title="%s" />', $src, $title);
|
||||
}
|
||||
|
||||
switch ($record->getType()) {
|
||||
case 'image':
|
||||
$src = '/skins/icons/icon_image.gif';
|
||||
$title = $this->app['translator']->trans('image');
|
||||
break;
|
||||
case 'document':
|
||||
$src = '/skins/icons/icon_document.gif';
|
||||
$title = $this->app['translator']->trans('document');
|
||||
break;
|
||||
case 'video':
|
||||
$src = '/skins/icons/icon_video.gif';
|
||||
$title = $this->app['translator']->trans('reportage');
|
||||
break;
|
||||
case 'audio':
|
||||
$src = '/skins/icons/icon_audio.gif';
|
||||
$title = $this->app['translator']->trans('audio');
|
||||
break;
|
||||
case 'flash':
|
||||
$src = '/skins/icons/icon_flash.gif';
|
||||
$title = $this->app['translator']->trans('flash');
|
||||
break;
|
||||
}
|
||||
|
||||
return sprintf('<img src="%s" title="%s" />', $src, $title);
|
||||
}
|
||||
|
||||
public function getThumbnailUrl(RecordInterface $record)
|
||||
{
|
||||
return $this->getSubdefUrl($record, 'thumbnail');
|
||||
}
|
||||
|
||||
public function getThumbnailGifUrl(RecordInterface $record)
|
||||
{
|
||||
return $this->getSubdefUrl($record, 'thumbnailgif');
|
||||
}
|
||||
|
||||
public function getSubdefUrl(RecordInterface $record, $subdefName)
|
||||
{
|
||||
if ($record instanceof ElasticsearchRecord) {
|
||||
if ($record->getSubdefs()->containsKey($subdefName)) {
|
||||
$thumbnail = $record->getSubdefs()->get($subdefName);
|
||||
if (null !== $path = $thumbnail['path']) {
|
||||
if (is_string($path) && '' !== $path) {
|
||||
return $this->app['phraseanet.static-file']->getUrl($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif ($record instanceof \record_adapter) {
|
||||
if (null !== $thumbnail = $record->get_subdef($subdefName)) {
|
||||
if ('' !== $path = $thumbnail->get_pathfile()) {
|
||||
return $this->app['phraseanet.static-file']->getUrl($path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$path = sprintf('%s/www/skins/icons/substitution/%s.png',
|
||||
$this->app['root.path'],
|
||||
str_replace('/', '_', $record->getMimeType())
|
||||
);
|
||||
|
||||
return $this->app['phraseanet.static-file']->getUrl($path);
|
||||
}
|
||||
|
||||
public function getUserSetting($setting, $default = null)
|
||||
{
|
||||
if (false === ($this->app['authentication']->getUser() instanceof User)) {
|
||||
|
||||
return $default;
|
||||
}
|
||||
|
||||
return $this->app['settings']->getUserSetting($this->app['authentication']->getUser(), $setting, $default);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'phraseanet';
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user