Files
Phraseanet/lib/classes/databox/subdefsStructure.php
Romain Neutron e233e5afa6 Merge branch '3.8'
Conflicts:
	lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php
	lib/Alchemy/Phrasea/Controller/Prod/Basket.php
	lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php
	lib/classes/Exception/Feed/ItemNotFound.php
	lib/classes/Exception/Feed/PublisherNotFound.php
	lib/classes/Feed/Abstract.php
	lib/classes/Feed/Adapter.php
	lib/classes/Feed/Aggregate.php
	lib/classes/Feed/Collection.php
	lib/classes/Feed/CollectionInterface.php
	lib/classes/Feed/Entry/Adapter.php
	lib/classes/Feed/Entry/Collection.php
	lib/classes/Feed/Entry/Interface.php
	lib/classes/Feed/Entry/Item.php
	lib/classes/Feed/Entry/ItemInterface.php
	lib/classes/Feed/Interface.php
	lib/classes/Feed/Link.php
	lib/classes/Feed/LinkInterface.php
	lib/classes/Feed/Publisher/Adapter.php
	lib/classes/Feed/Publisher/Interface.php
	lib/classes/Feed/Token.php
	lib/classes/Feed/TokenAggregate.php
	lib/classes/Feed/XML/Abstract.php
	lib/classes/Feed/XML/Atom.php
	lib/classes/Feed/XML/Cooliris.php
	lib/classes/Feed/XML/Interface.php
	lib/classes/Feed/XML/RSS.php
	lib/classes/Feed/XML/RSS/ImageInterface.php
	lib/classes/http/request.php
	lib/classes/module/console/schedulerStart.php
	lib/classes/module/console/schedulerState.php
	lib/classes/module/console/schedulerStop.php
	lib/classes/module/console/taskState.php
	lib/classes/module/console/tasklist.php
	lib/classes/module/console/taskrun.php
	lib/classes/registry.php
	lib/classes/registryInterface.php
	lib/classes/set/order.php
	lib/classes/system/url.php
	lib/classes/task/Scheduler.php
	lib/classes/task/appboxAbstract.php
	lib/classes/task/databoxAbstract.php
	lib/classes/task/manager.php
	lib/classes/task/period/RecordMover.php
	lib/classes/task/period/apibridge.php
	lib/classes/task/period/archive.php
	lib/classes/task/period/cindexer.php
	lib/classes/task/period/emptyColl.php
	lib/classes/task/period/ftp.php
	lib/classes/task/period/ftpPull.php
	lib/classes/task/period/subdef.php
	lib/classes/task/period/test.php
	lib/classes/task/period/writemeta.php
	lib/conf.d/PhraseaFixture/AbstractWZ.php
	lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php
	lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php
	lib/conf.d/PhraseaFixture/Story/LoadOneStory.php
	lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrList.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php
	lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php
2014-01-06 15:38:14 +01:00

302 lines
8.6 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Symfony\Component\Translation\TranslatorInterface;
class databox_subdefsStructure implements IteratorAggregate, Countable
{
/**
*
* @var Array
*/
protected $AvSubdefs = [];
/**
* @var TranslatorInterface
*/
private $translator;
/**
*
* @return ArrayIterator
*/
public function getIterator()
{
return new ArrayIterator($this->AvSubdefs);
}
public function count()
{
$n = 0;
foreach ($this->AvSubdefs as $subdefs) {
$n += count($subdefs);
}
return $n;
}
/**
*
* @param databox $databox
* @return Array
*/
public function __construct(databox $databox, TranslatorInterface $translator)
{
$this->databox = $databox;
$this->translator = $translator;
$this->load_subdefs();
return $this->AvSubdefs;
}
public function getSubdefGroup($searchGroup)
{
$searchGroup = strtolower($searchGroup);
foreach ($this->AvSubdefs as $groupname => $subdefgroup) {
if ($searchGroup == $groupname) {
return $subdefgroup;
}
}
return null;
}
/**
*
* @return databox_subdefsStructure
*/
protected function load_subdefs()
{
$sx_struct = $this->databox->get_sxml_structure();
$this->AvSubdefs = [
'image' => [],
'video' => [],
'audio' => [],
'document' => [],
'flash' => []
];
if (! $sx_struct) {
return $this;
}
$subdefgroup = $sx_struct->subdefs[0];
foreach ($subdefgroup as $k => $subdefs) {
$subdefgroup_name = strtolower($subdefs->attributes()->name);
if ( ! isset($AvSubdefs[$subdefgroup_name])) {
$AvSubdefs[$subdefgroup_name] = [];
}
foreach ($subdefs as $sd) {
$subdef_name = strtolower($sd->attributes()->name);
switch ($subdefgroup_name) {
case 'audio':
$type = new \Alchemy\Phrasea\Media\Type\Audio();
break;
case 'image':
$type = new \Alchemy\Phrasea\Media\Type\Image();
break;
case 'video':
$type = new \Alchemy\Phrasea\Media\Type\Video();
break;
case 'document':
$type = new \Alchemy\Phrasea\Media\Type\Document();
break;
case 'flash':
$type = new \Alchemy\Phrasea\Media\Type\Flash();
break;
default:
continue;
break;
}
$AvSubdefs[$subdefgroup_name][$subdef_name] = new databox_subdef($type, $sd, $this->translator);
}
}
$this->AvSubdefs = $AvSubdefs;
return $this;
}
/**
*
* @param type $subdef_type
* @param type $subdef_name
* @return databox_subdef
*/
public function get_subdef($subdef_type, $subdef_name)
{
if (isset($this->AvSubdefs[$subdef_type]) && isset($this->AvSubdefs[$subdef_type][$subdef_name])) {
return $this->AvSubdefs[$subdef_type][$subdef_name];
}
throw new Exception_Databox_SubdefNotFound(sprintf('Databox subdef name `%s` of type `%s` not found', $subdef_name, $subdef_type));
}
/**
*
* @param string $group
* @param string $name
* @return databox_subdefsStructure
*/
public function delete_subdef($group, $name)
{
$dom_struct = $this->databox->get_dom_structure();
$dom_xp = $this->databox->get_xpath_structure();
$nodes = $dom_xp->query(
'//record/subdefs/'
. 'subdefgroup[@name="' . $group . '"]/'
. 'subdef[@name="' . $name . '"]'
);
for ($i = 0; $i < $nodes->length; $i++) {
$node = $nodes->item($i);
$parent = $node->parentNode;
$parent->removeChild($node);
}
if (isset($AvSubdefs[$group]) && isset($AvSubdefs[$group][$name])) {
unset($AvSubdefs[$group][$name]);
}
$this->databox->saveStructure($dom_struct);
return $this;
}
/**
*
* @param string $groupname
* @param string $name
* @param string $class
* @return databox_subdefsStructure
*/
public function add_subdef($groupname, $name, $class)
{
$dom_struct = $this->databox->get_dom_structure();
$subdef = $dom_struct->createElement('subdef');
$subdef->setAttribute('class', $class);
$subdef->setAttribute('name', mb_strtolower($name));
$dom_xp = $this->databox->get_xpath_structure();
$query = '//record/subdefs/subdefgroup[@name="' . $groupname . '"]';
$groups = $dom_xp->query($query);
if ($groups->length == 0) {
$group = $dom_struct->createElement('subdefgroup');
$group->setAttribute('name', $groupname);
$dom_xp->query('/record/subdefs')->item(0)->appendChild($group);
} else {
$group = $groups->item(0);
}
$group->appendChild($subdef);
$this->databox->saveStructure($dom_struct);
$this->load_subdefs();
return $this;
}
/**
*
* @param string $group
* @param string $name
* @param string $class
* @param boolean $downloadable
* @param Array $options
* @return databox_subdefsStructure
*/
public function set_subdef($group, $name, $class, $downloadable, $options, $labels)
{
$dom_struct = $this->databox->get_dom_structure();
$subdef = $dom_struct->createElement('subdef');
$subdef->setAttribute('class', $class);
$subdef->setAttribute('name', mb_strtolower($name));
$subdef->setAttribute('downloadable', ($downloadable ? 'true' : 'false'));
foreach ($labels as $code => $label) {
$child = $dom_struct->createElement('label');
$child->appendChild($dom_struct->createTextNode($label));
$lang = $child->appendChild($dom_struct->createAttribute('lang'));
$lang->value = $code;
$subdef->appendChild($child);
}
foreach ($options as $option => $value) {
if (is_scalar($value)) {
$child = $dom_struct->createElement($option);
$child->appendChild($dom_struct->createTextNode($value));
$subdef->appendChild($child);
} elseif (is_array($value)) {
foreach ($value as $v) {
$child = $dom_struct->createElement($option);
$child->appendChild($dom_struct->createTextNode($v));
$subdef->appendChild($child);
}
}
}
$dom_xp = $this->databox->get_xpath_structure();
$nodes = $dom_xp->query('//record/subdefs/'
. 'subdefgroup[@name="' . $group . '"]');
if ($nodes->length > 0) {
$dom_group = $nodes->item(0);
} else {
$dom_group = $dom_struct->createElement('subdefgroup');
$dom_group->setAttribute('name', $group);
$nodes = $dom_xp->query('//record/subdefs');
if ($nodes->length > 0) {
$nodes->item(0)->appendChild($dom_group);
} else {
throw new Exception('Unable to find /record/subdefs xquery');
}
}
$nodes = $dom_xp->query(
'//record/subdefs/'
. 'subdefgroup[@name="' . $group . '"]/'
. 'subdef[@name="' . $name . '"]'
);
$refNode = null;
if ($nodes->length > 0) {
for ($i = 0; $i < $nodes->length; $i ++) {
$refNode = $nodes->item($i)->nextSibling;
$dom_group->removeChild($nodes->item($i));
}
}
$dom_group->insertBefore($subdef, $refNode);
$this->databox->saveStructure($dom_struct);
$this->load_subdefs();
return $this;
}
}