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')
)),
new \Twig_SimpleFunction('record_flags', array($this, 'getRecordFlags'))
);
}
public function getRecordFlags(RecordInterface $record)
{
$recordStatuses = [];
$databox = $this->app['phraseanet.appbox']->get_databox($record->getDataboxId());
$structure = $databox->getStatusStructure()->toArray();
if (!$this->isGrantedOnCollection($record->getBaseId(), 'chgstatus')) {
$structure = array_filter($structure, function($status) {
return (bool) $status['printable'];
});
}
$bitValue = $record->getStatusBitField();
foreach ($structure as $status) {
$on = \databox_status::bitIsSet($bitValue, $status['bit']);
if (null === ($on ? $status['img_on'] : $status['img_off'])) {
continue;
}
$recordStatuses[] = [
'path' => ($on ? $status['img_on'] : $status['img_off']),
'labels' => ($on ? $status['labels_on_i18n'] : $status['labels_off_i18n'])
];
}
return $recordStatuses;
}
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(
'
',
\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('
', $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('
', $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('/skins/icons/substitution/%s.png',
str_replace('/', '_', $record->getMimeType())
);
return $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';
}
}