diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Description.php b/lib/Alchemy/Phrasea/Controller/Admin/Description.php index 10c3c87d48..aac3883376 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Description.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Description.php @@ -36,153 +36,152 @@ class Description implements ControllerProviderInterface $controllers->post('/{sbas_id}/', function(Application $app, $sbas_id) - { - $Core = $app['Core']; - $user = $Core->getAuthenticatedUser(); - - $request = $app['request']; - - if (!$user->ACL()->has_right_on_sbas($sbas_id, 'bas_modify_struct')) - { - throw new \Exception_Forbidden('You are not allowed to access this zone'); - } - - $databox = \databox::get_instance((int) $sbas_id); - $fields = $databox->get_meta_structure(); - $available_fields = \databox::get_available_metadatas(); - $available_dc_fields = $databox->get_available_dcfields(); - - - $databox->get_connection()->beginTransaction(); - $error = false; - try - { - if (is_array($request->get('field_ids'))) - { - foreach ($request->get('field_ids') as $id) { + $Core = $app['Core']; + $user = $Core->getAuthenticatedUser(); + + $request = $app['request']; + + if (!$user->ACL()->has_right_on_sbas($sbas_id, 'bas_modify_struct')) + { + throw new \Exception_Forbidden('You are not allowed to access this zone'); + } + + $databox = \databox::get_instance((int) $sbas_id); + $fields = $databox->get_meta_structure(); + $available_fields = \databox::get_available_metadatas(); + $available_dc_fields = $databox->get_available_dcfields(); + + + $databox->get_connection()->beginTransaction(); + $error = false; try { - $field = \databox_field::get_instance($databox, $id); - - $field->set_name($request->get('name_' . $id)); - $field->set_thumbtitle($request->get('thumbtitle_' . $id)); - $field->set_source($request->get('src_' . $id)); - $field->set_multi($request->get('multi_' . $id)); - $field->set_indexable($request->get('indexable_' . $id)); - $field->set_required($request->get('required_' . $id)); - $field->set_separator($request->get('separator_' . $id)); - $field->set_readonly($request->get('readonly_' . $id)); - $field->set_type($request->get('type_' . $id)); - $field->set_tbranch($request->get('tbranch_' . $id)); - $field->set_report($request->get('report_' . $id)); - - $field->setVocabularyControl(null); - $field->setVocabularyRestricted(false); - - try - { - $vocabulary = \Alchemy\Phrasea\Vocabulary\Controller::get($request->get('vocabulary_' . $id)); - $field->setVocabularyControl($vocabulary); - $field->setVocabularyRestricted($request->get('vocabularyrestricted_' . $id)); - } - catch (\Exception $e) + if (is_array($request->get('field_ids'))) { + foreach ($request->get('field_ids') as $id) + { + try + { + $field = \databox_field::get_instance($databox, $id); + $field->set_name($request->get('name_' . $id)); + $field->set_thumbtitle($request->get('thumbtitle_' . $id)); + $field->set_source($request->get('src_' . $id)); + $field->set_multi($request->get('multi_' . $id)); + $field->set_indexable($request->get('indexable_' . $id)); + $field->set_required($request->get('required_' . $id)); + $field->set_separator($request->get('separator_' . $id)); + $field->set_readonly($request->get('readonly_' . $id)); + $field->set_type($request->get('type_' . $id)); + $field->set_tbranch($request->get('tbranch_' . $id)); + $field->set_report($request->get('report_' . $id)); + $field->setVocabularyControl(null); + $field->setVocabularyRestricted(false); + + try + { + $vocabulary = \Alchemy\Phrasea\Vocabulary\Controller::get($request->get('vocabulary_' . $id)); + $field->setVocabularyControl($vocabulary); + $field->setVocabularyRestricted($request->get('vocabularyrestricted_' . $id)); + } + catch (\Exception $e) + { + + } + + $dces_element = null; + + $class = 'databox_Field_DCES_' . $request->get('dces_' . $id); + if (class_exists($class)) + $dces_element = new $class(); + + $field->set_dces_element($dces_element); + $field->save(); + + if ($request->get('regname') == $field->get_id()) + { + $field->set_regname(); + } + if ($request->get('regdate') == $field->get_id()) + { + $field->set_regdate(); + } + if ($request->get('regdesc') == $field->get_id()) + { + $field->set_regdesc(); + } + } + catch (\Exception $e) + { + continue; + } + } } - $dces_element = null; - - $class = 'databox_Field_DCES_' . $request->get('dces_' . $id); - if (class_exists($class)) - $dces_element = new $class(); - - $field->set_dces_element($dces_element); - $field->save(); - - if ($request->get('regname') == $field->get_id()) + if ($request->get('newfield')) { - $field->set_regname(); + $field = \databox_field::create($databox, $request->get('newfield')); } - if ($request->get('regdate') == $field->get_id()) - { - $field->set_regdate(); - } - if ($request->get('regdesc') == $field->get_id()) - { - $field->set_regdesc(); - } - } - catch (Exception $e) - { - continue; - } - } - } - if ($request->get('newfield')) - { - \databox_field::create($databox, $request->get('newfield')); - } - - if (is_array($request->get('todelete_ids'))) - { - foreach ($request->get('todelete_ids') as $id) - { - try - { - $field = \databox_field::get_instance($databox, $id); - $field->delete(); + if (is_array($request->get('todelete_ids'))) + { + foreach ($request->get('todelete_ids') as $id) + { + try + { + $field = \databox_field::get_instance($databox, $id); + $field->delete(); + } + catch (\Exception $e) + { + + } + } + } } catch (\Exception $e) { - + $error = true; } - } - } - } - catch (\Exception $e) - { - $error = true; - } - if ($error) - $databox->get_connection()->rollBack(); - else - $databox->get_connection()->commit(); + if ($error) + $databox->get_connection()->rollBack(); + else + $databox->get_connection()->commit(); - return new RedirectResponse('/admin/databox/' . $sbas_id . '/description/'); - }); + return new RedirectResponse('/admin/databox/' . $sbas_id . '/description/'); + })->assert('sbas_id', '\d+'); $controllers->get('/{sbas_id}/', function(Application $app, $sbas_id) - { + { - $Core = $app['Core']; - $user = $Core->getAuthenticatedUser(); + $Core = $app['Core']; + $user = $Core->getAuthenticatedUser(); - $request = $app['request']; + $request = $app['request']; - if (!$user->ACL()->has_right_on_sbas($sbas_id, 'bas_modify_struct')) - { - throw new \Exception_Forbidden('You are not allowed to access this zone'); - } + if (!$user->ACL()->has_right_on_sbas($sbas_id, 'bas_modify_struct')) + { + throw new \Exception_Forbidden('You are not allowed to access this zone'); + } - $databox = \databox::get_instance((int) $sbas_id); - $fields = $databox->get_meta_structure(); - $available_fields = \databox::get_available_metadatas(); - $available_dc_fields = $databox->get_available_dcfields(); + $databox = \databox::get_instance((int) $sbas_id); + $fields = $databox->get_meta_structure(); + $available_fields = \databox::get_available_metadatas(); + $available_dc_fields = $databox->get_available_dcfields(); - $params = array( - 'databox' => $databox, - 'fields' => $fields, - 'available_fields' => $available_fields, - 'available_dc_fields' => $available_dc_fields, - 'vocabularies' => \Alchemy\Phrasea\Vocabulary\Controller::getAvailable(), - ); + $params = array( + 'databox' => $databox, + 'fields' => $fields, + 'available_fields' => $available_fields, + 'available_dc_fields' => $available_dc_fields, + 'vocabularies' => \Alchemy\Phrasea\Vocabulary\Controller::getAvailable(), + ); - return new Response($Core->getTwig()->render('admin/databox/doc_structure.twig', $params)); - }); + return new Response($Core->getTwig()->render('admin/databox/doc_structure.twig', $params)); + })->assert('sbas_id', '\d+'); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Fields.php b/lib/Alchemy/Phrasea/Controller/Admin/Fields.php index ac5948aace..55db4e0c16 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Fields.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Fields.php @@ -40,42 +40,42 @@ class Fields implements ControllerProviderInterface $multi = ($request->get('multi') === 'true'); - $metadata = \databox_field::load_class_from_xpath($request->get('source')); + $metadata = \databox_field::load_class_from_xpath($request->get('source')); - $datas = array( - 'result' => ($multi === $metadata->is_multi()) - , 'is_multi' => $metadata->is_multi() - ); + $datas = array( + 'result' => ($multi === $metadata->is_multi()) + , 'is_multi' => $metadata->is_multi() + ); - $Serializer = $app['Core']['Serializer']; + $Serializer = $app['Core']['Serializer']; - return new Response( - $Serializer->serialize($datas, 'json') - , 200 - , array('Content-Type' => 'application/json') - ); - }); + return new Response( + $Serializer->serialize($datas, 'json') + , 200 + , array('Content-Type' => 'application/json') + ); + }); $controllers->get('/checkreadonly/', function() use ($app, $appbox) - { - $request = $app['request']; - $readonly = ($request->get('readonly') === 'true'); + { + $request = $app['request']; + $readonly = ($request->get('readonly') === 'true'); - $metadata = \databox_field::load_class_from_xpath($request->get('source')); + $metadata = \databox_field::load_class_from_xpath($request->get('source')); - $datas = array( - 'result' => ($readonly === $metadata->is_readonly()) - , 'is_readonly' => $metadata->is_readonly() - ); + $datas = array( + 'result' => ($readonly === $metadata->is_readonly()) + , 'is_readonly' => $metadata->is_readonly() + ); - $Serializer = $app['Core']['Serializer']; + $Serializer = $app['Core']['Serializer']; - return new Response( - $Serializer->serialize($datas, 'json') - , 200 - , array('Content-Type' => 'application/json') - ); - }); + return new Response( + $Serializer->serialize($datas, 'json') + , 200 + , array('Content-Type' => 'application/json') + ); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Publications.php b/lib/Alchemy/Phrasea/Controller/Admin/Publications.php index 6dc3bcebfc..797c296a12 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Publications.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Publications.php @@ -78,7 +78,7 @@ class Publications implements ControllerProviderInterface , 'error' => $app['request']->get('error') ) ); - }); + })->assert('id', '\d+'); $controllers->post('/feed/{id}/update/', function($id) use ($app, $appbox) @@ -108,7 +108,7 @@ class Publications implements ControllerProviderInterface $feed->set_public($request->get('public')); return $app->redirect('/admin/publications/list/'); - }); + })->assert('id', '\d+'); $controllers->post('/feed/{id}/iconupload/', function($id) use ($app, $appbox) @@ -150,7 +150,7 @@ class Publications implements ControllerProviderInterface unlink($file->getPathname()); return new Response('FILEHREF:' . $feed->get_icon_url() . '?' . mt_rand(100000, 999999)); - }); + })->assert('id', '\d+'); $controllers->post('/feed/{id}/addpublisher/', function($id) use ($app, $appbox) { @@ -168,7 +168,7 @@ class Publications implements ControllerProviderInterface } return $app->redirect('/admin/publications/feed/' . $id . '/?err=' . $error); - }); + })->assert('id', '\d+'); $controllers->post('/feed/{id}/removepublisher/', function($id) use ($app, $appbox) @@ -189,7 +189,7 @@ class Publications implements ControllerProviderInterface } return $app->redirect('/admin/publications/feed/' . $id . '/?err=' . $error); - }); + })->assert('id', '\d+'); $controllers->post('/feed/{id}/delete/', function($id) use ($app, $appbox) { diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Root.php b/lib/Alchemy/Phrasea/Controller/Admin/Root.php index 2331e4a883..cfefd2d8ff 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Root.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Root.php @@ -39,73 +39,73 @@ class Root implements ControllerProviderInterface $controllers = new ControllerCollection(); $controllers->get('/', function(Application $app) - { + { - $Core = $app['Core']; - $appbox = \appbox::get_instance(); - $user = $Core->getAuthenticatedUser(); + $Core = $app['Core']; + $appbox = \appbox::get_instance(); + $user = $Core->getAuthenticatedUser(); - \User_Adapter::updateClientInfos(3); + \User_Adapter::updateClientInfos(3); - $section = $app['request']->get('section', false); + $section = $app['request']->get('section', false); - $available = array( - 'connected' - , 'registrations' - , 'taskmanager' - , 'base' - , 'bases' - , 'collection' - , 'user' - , 'users' - ); + $available = array( + 'connected' + , 'registrations' + , 'taskmanager' + , 'base' + , 'bases' + , 'collection' + , 'user' + , 'users' + ); - $feature = 'connected'; - $featured = false; - $position = explode(':', $section); - if (count($position) > 0) - { - if (in_array($position[0], $available)) - { - $feature = $position[0]; - if (isset($position[1])) - $featured = $position[1]; - } - } + $feature = 'connected'; + $featured = false; + $position = explode(':', $section); + if (count($position) > 0) + { + if (in_array($position[0], $available)) + { + $feature = $position[0]; + if (isset($position[1])) + $featured = $position[1]; + } + } - $databoxes = $off_databoxes = array(); - foreach ($appbox->get_databoxes() as $databox) - { - try - { - if (!$user->ACL()->has_access_to_sbas($databox->get_sbas_id())) - continue; + $databoxes = $off_databoxes = array(); + foreach ($appbox->get_databoxes() as $databox) + { + try + { + if (!$user->ACL()->has_access_to_sbas($databox->get_sbas_id())) + continue; - $connbas = $databox->get_connection(); - } - catch (\Exception $e) - { - $off_databoxes[] = $databox; - continue; - } - $databoxes[] = $databox; - } + $connbas = $databox->get_connection(); + } + catch (\Exception $e) + { + $off_databoxes[] = $databox; + continue; + } + $databoxes[] = $databox; + } - $twig = $Core->getTwig(); + $twig = $Core->getTwig(); - return new Response($twig->render('admin/index.html.twig', array( - 'module' => 'admin' - , 'events' => \eventsmanager_broker::getInstance($appbox, $Core) - , 'module_name' => 'Admin' - , 'feature' => $feature - , 'featured' => $featured - , 'databoxes' => $databoxes - , 'off_databoxes' => $off_databoxes - , 'tree' => \module_admin::getTree($section) - )) - ); - }); + return new Response($twig->render('admin/index.html.twig', array( + 'module' => 'admin' + , 'events' => \eventsmanager_broker::getInstance($appbox, $Core) + , 'module_name' => 'Admin' + , 'feature' => $feature + , 'featured' => $featured + , 'databoxes' => $databoxes + , 'off_databoxes' => $off_databoxes + , 'tree' => \module_admin::getTree($section) + )) + ); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Subdefs.php b/lib/Alchemy/Phrasea/Controller/Admin/Subdefs.php index d19e8c4798..90709f234a 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Subdefs.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Subdefs.php @@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\HttpFoundation\RedirectResponse; use Silex\Application; use Silex\ControllerProviderInterface; use Silex\ControllerCollection; @@ -34,104 +35,103 @@ class Subdefs implements ControllerProviderInterface $controllers = new ControllerCollection(); $controllers->get('/{sbas_id}/', function(Application $app, $sbas_id) - { - $databox = \databox::get_instance((int) $sbas_id); - - return new response($app['Core']->getTwig()->render( - 'admin/subdefs.twig', array( - 'databox' => $databox, - 'subdefs' => $databox->get_subdef_structure() - ) - ) - ); - }); - - $controllers->post('/{sbas_id}/', function(Application $app, $sbas_id) - { - $delete_subdef = $request->get('delete_subdef'); - $toadd_subdef = $request->get('add_subdef'); - $Parmsubdefs = $request->get('subdefs'); - - $databox = \databox::get_instance((int) $sbas_id); - - $add_subdef = array('class' => null, 'name' => null, 'group' => null); - foreach ($add_subdef as $k => $v) - { - if (!isset($toadd_subdef[$k]) || trim($toadd_subdef[$k]) === '') - unset($add_subdef[$k]); - else - $add_subdef[$k] = $toadd_subdef[$k]; - } - - if ($delete_subdef) - { - $delete_subef = explode('_', $delete_subdef); - $group = $delete_subef[0]; - $name = $delete_subef[1]; - - $subdefs = $databox->get_subdef_structure(); - $subdefs->delete_subdef($group, $name); - } - elseif (count($add_subdef) === 3) - { - $subdefs = $databox->get_subdef_structure(); - - $group = $add_subdef['group']; - $name = $add_subdef['name']; - $class = $add_subdef['class']; - - $subdefs->add_subdef($group, $name, $class); - } - else - { - $subdefs = $databox->get_subdef_structure(); - - $options = array(); - - foreach ($Parmsubdefs as $post_sub) - { - $post_sub_ex = explode('_', $post_sub); - $group = $post_sub_ex[0]; - $name = $post_sub_ex[1]; - - $parm_loc = $request->get_parms($post_sub . '_class', $post_sub . '_downloadable'); - - $class = $parm_loc[$post_sub . '_class']; - $downloadable = $parm_loc[$post_sub . '_downloadable']; - - $defaults = array('path', 'baseurl', 'meta', 'mediatype'); - foreach ($defaults as $def) { - $parm_loc = $request->get_parms($post_sub . '_' . $def); + $databox = \databox::get_instance((int) $sbas_id); - if ($def == 'meta' && !$parm_loc[$post_sub . '_' . $def]) + return new response($app['Core']->getTwig()->render( + 'admin/subdefs.twig', array( + 'databox' => $databox, + 'subdefs' => $databox->get_subdef_structure() + ) + ) + ); + })->assert('sbas_id', '\d+'); + + $controllers->post('/{sbas_id}/', function(Application $app, Request $request, $sbas_id) + { + $delete_subdef = $request->get('delete_subdef'); + $toadd_subdef = $request->get('add_subdef'); + $Parmsubdefs = $request->get('subdefs', array()); + + $databox = \databox::get_instance((int) $sbas_id); + + $add_subdef = array('class' => null, 'name' => null, 'group' => null); + foreach ($add_subdef as $k => $v) { - $parm_loc[$post_sub . '_' . $def] = "no"; + if (!isset($toadd_subdef[$k]) || trim($toadd_subdef[$k]) === '') + unset($add_subdef[$k]); + else + $add_subdef[$k] = $toadd_subdef[$k]; } - $options[$def] = $parm_loc[$post_sub . '_' . $def]; - } - - $parm_loc = $request->get_parms($post_sub . '_mediatype'); - $mediatype = $parm_loc[$post_sub . '_mediatype']; - $parm_loc = $request->get_parms($post_sub . '_' . $mediatype); - - if (isset($parm_loc[$post_sub . '_' . $mediatype])) - { - foreach ($parm_loc[$post_sub . '_' . $mediatype] as $option => $value) + if ($delete_subdef) { - if ($option == 'resolution' && $mediatype == 'image') - $option = 'dpi'; - $options[$option] = $value; - } - } - $subdefs->set_subdef($group, $name, $class, $downloadable, $options); - } - } + $delete_subef = explode('_', $delete_subdef); + $group = $delete_subef[0]; + $name = $delete_subef[1]; - return \phrasea::redirect('/admin/subdefs/' . $databox->get_sbas_id() . '/'); - }); + $subdefs = $databox->get_subdef_structure(); + $subdefs->delete_subdef($group, $name); + } + elseif (count($add_subdef) === 3) + { + $subdefs = $databox->get_subdef_structure(); + + $group = $add_subdef['group']; + $name = $add_subdef['name']; + $class = $add_subdef['class']; + + $subdefs->add_subdef($group, $name, $class); + } + else + { + $subdefs = $databox->get_subdef_structure(); + + $options = array(); + + foreach ($Parmsubdefs as $post_sub) + { + $post_sub_ex = explode('_', $post_sub); + + $group = $post_sub_ex[0]; + $name = $post_sub_ex[1]; + + $class = $request->get($post_sub . '_class'); + $downloadable = $request->get($post_sub . '_downloadable'); + + $defaults = array('path', 'baseurl', 'meta', 'mediatype'); + + foreach ($defaults as $def) + { + $parm_loc = $request->get($post_sub . '_' . $def); + + if ($def == 'meta' && !$parm_loc) + { + $parm_loc = "no"; + } + + $options[$def] = $parm_loc; + } + + $mediatype = $request->get($post_sub . '_mediatype'); + $media = $request->get($post_sub . '_' . $mediatype, array()); + + foreach ($media as $option => $value) + { + if ($option == 'resolution' && $mediatype == 'image') + { + $option = 'dpi'; + } + $options[$option] = $value; + } + $subdefs->set_subdef($group, $name, $class, $downloadable, $options); + } + } + + return new RedirectResponse('/admin/subdefs/' . $databox->get_sbas_id() . '/'); + })->assert('sbas_id', '\d+'); return $controllers; } + } diff --git a/lib/classes/databox/field.class.php b/lib/classes/databox/field.class.php index dee0925938..5ec3fedf95 100644 --- a/lib/classes/databox/field.class.php +++ b/lib/classes/databox/field.class.php @@ -124,29 +124,29 @@ class databox_field implements cache_cacheableInterface protected $Vocabulary; protected $VocabularyRestriction = false; - const TYPE_TEXT = "text"; - const TYPE_DATE = "date"; + const TYPE_TEXT = "text"; + const TYPE_DATE = "date"; const TYPE_STRING = "string"; const TYPE_NUMBER = "number"; /** * http://dublincore.org/documents/dces/ */ - const DCES_TITLE = 'Title'; - const DCES_CREATOR = 'Creator'; - const DCES_SUBJECT = 'Subject'; + const DCES_TITLE = 'Title'; + const DCES_CREATOR = 'Creator'; + const DCES_SUBJECT = 'Subject'; const DCES_DESCRIPTION = 'Description'; - const DCES_PUBLISHER = 'Publisher'; + const DCES_PUBLISHER = 'Publisher'; const DCES_CONTRIBUTOR = 'Contributor'; - const DCES_DATE = 'Date'; - const DCES_TYPE = 'Type'; - const DCES_FORMAT = 'Format'; - const DCES_IDENTIFIER = 'Identifier'; - const DCES_SOURCE = 'Source'; - const DCES_LANGUAGE = 'Language'; - const DCES_RELATION = 'Relation'; - const DCES_COVERAGE = 'Coverage'; - const DCES_RIGHTS = 'Rights'; + const DCES_DATE = 'Date'; + const DCES_TYPE = 'Type'; + const DCES_FORMAT = 'Format'; + const DCES_IDENTIFIER = 'Identifier'; + const DCES_SOURCE = 'Source'; + const DCES_LANGUAGE = 'Language'; + const DCES_RELATION = 'Relation'; + const DCES_COVERAGE = 'Coverage'; + const DCES_RIGHTS = 'Rights'; /** * @@ -169,7 +169,7 @@ class databox_field implements cache_cacheableInterface $stmt = $connbas->prepare($sql); $stmt->execute(array(':id' => $id)); - $row = $stmt->fetch(PDO::FETCH_ASSOC); + $row = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); $this->id = (int) $id; @@ -190,7 +190,7 @@ class databox_field implements cache_cacheableInterface } catch (Exception $e) { - + } if ($row['dces_element']) @@ -239,7 +239,7 @@ class databox_field implements cache_cacheableInterface */ public static function get_instance(databox &$databox, $id) { - $cache_key = 'field_' . $id; + $cache_key = 'field_' . $id; $instance_id = $databox->get_sbas_id() . '_' . $id; if (!isset(self::$_instance[$instance_id]) || (self::$_instance[$instance_id] instanceof self) === false) { @@ -289,16 +289,16 @@ class databox_field implements cache_cacheableInterface caption_field::delete_all_metadatas($this); $connbas = $this->get_connection(); - $sql = 'DELETE FROM metadatas_structure WHERE id = :id'; - $stmt = $connbas->prepare($sql); + $sql = 'DELETE FROM metadatas_structure WHERE id = :id'; + $stmt = $connbas->prepare($sql); $stmt->execute(array(':id' => $this->get_id())); $stmt->closeCursor(); $dom_struct = $this->databox->get_dom_structure(); - $xp_struct = $this->databox->get_xpath_structure(); + $xp_struct = $this->databox->get_xpath_structure(); $nodes = $xp_struct->query( - '/record/description/*[@meta_id=' . $this->id . ']' + '/record/description/*[@meta_id=' . $this->id . ']' ); foreach ($nodes as $node) @@ -338,35 +338,35 @@ class databox_field implements cache_cacheableInterface WHERE id = :id'; $params = array( - ':name' => $this->name, - ':source' => $this->source->get_source(), - ':indexable' => $this->indexable ? '1' : '0', - ':readonly' => $this->readonly ? '1' : '0', - ':required' => $this->required ? '1' : '0', - ':separator' => $this->separator, - ':multi' => $this->multi ? '1' : '0', - ':report' => $this->report ? '1' : '0', - ':type' => $this->type, - ':tbranch' => $this->tbranch, - ':thumbtitle' => $this->thumbtitle, - ':VocabularyControlType' => $this->Vocabulary ? $this->Vocabulary->getType() : null, - ':RestrictVocab' => $this->Vocabulary ? ($this->VocabularyRestriction ? '1' : '0') : '0', - ':id' => $this->id + ':name' => $this->name, + ':source' => $this->source->get_source(), + ':indexable' => $this->indexable ? '1' : '0', + ':readonly' => $this->readonly ? '1' : '0', + ':required' => $this->required ? '1' : '0', + ':separator' => $this->separator, + ':multi' => $this->multi ? '1' : '0', + ':report' => $this->report ? '1' : '0', + ':type' => $this->type, + ':tbranch' => $this->tbranch, + ':thumbtitle' => $this->thumbtitle, + ':VocabularyControlType' => $this->Vocabulary ? $this->Vocabulary->getType() : null, + ':RestrictVocab' => $this->Vocabulary ? ($this->VocabularyRestriction ? '1' : '0') : '0', + ':id' => $this->id ); $stmt = $connbas->prepare($sql); $stmt->execute($params); $dom_struct = $this->databox->get_dom_structure(); - $xp_struct = $this->databox->get_xpath_structure(); + $xp_struct = $this->databox->get_xpath_structure(); $nodes = $xp_struct->query( - '/record/description/*[@meta_id=' . $this->id . ']' + '/record/description/*[@meta_id=' . $this->id . ']' ); if ($nodes->length == 0) { - $meta = $dom_struct->createElement($this->name); + $meta = $dom_struct->createElement($this->name); $nodes_parent = $xp_struct->query('/record/description'); $nodes_parent->item(0)->appendChild($meta); } @@ -377,8 +377,8 @@ class databox_field implements cache_cacheableInterface $current_name = $meta->nodeName; if ($this->name != $meta->nodeName) { - $old_meta = $meta; - $meta = $dom_struct->createElement($this->name); + $old_meta = $meta; + $meta = $dom_struct->createElement($this->name); $nodes_parent = $xp_struct->query('/record/description'); $nodes_parent->item(0)->replaceChild($meta, $old_meta); } @@ -427,7 +427,7 @@ class databox_field implements cache_cacheableInterface $classname = 'metadata_description_nosource'; else $classname = 'metadata_description_' . str_replace( - array('/rdf:RDF/rdf:Description/', ':', '-'), array('', '_', ''), $xpath + array('/rdf:RDF/rdf:Description/', ':', '-'), array('', '_', ''), $xpath ); if (!class_exists($classname)) @@ -475,8 +475,8 @@ class databox_field implements cache_cacheableInterface $stmt = $connbas->prepare($sql); $stmt->execute(array( - ':dces_element' => $DCES_element ? $DCES_element->get_label() : null - , ':id' => $this->id + ':dces_element' => $DCES_element ? $DCES_element->get_label() : null + , ':id' => $this->id )); $stmt->closeCursor(); $this->dces_element = $DCES_element; @@ -667,7 +667,7 @@ class databox_field implements cache_cacheableInterface } catch (Exception $e) { - + } return $this; @@ -849,10 +849,10 @@ class databox_field implements cache_cacheableInterface { $sorter = 0; - $sql = 'SELECT (MAX(sorter) + 1) as sorter FROM metadatas_structure'; + $sql = 'SELECT (MAX(sorter) + 1) as sorter FROM metadatas_structure'; $stmt = $databox->get_connection()->prepare($sql); $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_ASSOC); + $row = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); if ($row) @@ -867,8 +867,8 @@ class databox_field implements cache_cacheableInterface 1, :sorter)"; $stmt = $databox->get_connection()->prepare($sql); - $stmt->execute(array(':name' => self::generateName($name), ':sorter' => $sorter)); - $id = $databox->get_connection()->lastInsertId(); + $stmt->execute(array(':name' => self::generateName($name), ':sorter' => $sorter)); + $id = $databox->get_connection()->lastInsertId(); $stmt->closeCursor(); $databox->delete_data_from_cache(databox::CACHE_META_STRUCT); @@ -876,7 +876,6 @@ class databox_field implements cache_cacheableInterface return self::get_instance($databox, $id); } - public static function generateName($name) { $unicode_processor = new unicode(); diff --git a/lib/classes/databox/subdefsStructure.class.php b/lib/classes/databox/subdefsStructure.class.php index 5eb5926bff..a081cf70b8 100644 --- a/lib/classes/databox/subdefsStructure.class.php +++ b/lib/classes/databox/subdefsStructure.class.php @@ -65,7 +65,6 @@ class databox_subdefsStructure implements IteratorAggregate ); if (!$sx_struct) - return $this; $subdefgroup = $sx_struct->subdefs[0]; @@ -129,8 +128,9 @@ class databox_subdefsStructure implements IteratorAggregate 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(); } @@ -146,9 +146,9 @@ class databox_subdefsStructure implements IteratorAggregate $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 . '"]' + '//record/subdefs/' + . 'subdefgroup[@name="' . $group . '"]/' + . 'subdef[@name="' . $name . '"]' ); if ($nodes->length > 0) @@ -173,7 +173,7 @@ class databox_subdefsStructure implements IteratorAggregate * @param string $class * @return databox_subdefsStructure */ - public function add_subdef($group, $name, $class) + public function add_subdef($groupname, $name, $class) { $dom_struct = $this->databox->get_dom_structure(); @@ -182,13 +182,13 @@ class databox_subdefsStructure implements IteratorAggregate $subdef->setAttribute('name', $name); $dom_xp = $this->databox->get_xpath_structure(); - $query = '//record/subdefs/subdefgroup[@name="' . $group . '"]'; + $query = '//record/subdefs/subdefgroup[@name="' . $groupname . '"]'; $groups = $dom_xp->query($query); if ($groups->length == 0) { $group = $dom_struct->createElement('subdefgroup'); - $group->setAttribute('name', $group); + $group->setAttribute('name', $groupname); $dom_xp->query('/record/subdefs')->item(0)->appendChild($group); } else @@ -233,7 +233,7 @@ class databox_subdefsStructure implements IteratorAggregate $dom_xp = $this->databox->get_xpath_structure(); $nodes = $dom_xp->query('//record/subdefs/' - . 'subdefgroup[@name="' . $group . '"]'); + . 'subdefgroup[@name="' . $group . '"]'); if ($nodes->length > 0) { $dom_group = $nodes->item(0); @@ -255,9 +255,9 @@ class databox_subdefsStructure implements IteratorAggregate } $nodes = $dom_xp->query( - '//record/subdefs/' - . 'subdefgroup[@name="' . $group . '"]/' - . 'subdef[@name="' . $name . '"]' + '//record/subdefs/' + . 'subdefgroup[@name="' . $group . '"]/' + . 'subdef[@name="' . $name . '"]' ); if ($nodes->length > 0) diff --git a/lib/unitTest/Alchemy/Phrasea/Controller/Admin/DescriptionTest.php b/lib/unitTest/Alchemy/Phrasea/Controller/Admin/DescriptionTest.php index 36faaabb98..ca349065a9 100644 --- a/lib/unitTest/Alchemy/Phrasea/Controller/Admin/DescriptionTest.php +++ b/lib/unitTest/Alchemy/Phrasea/Controller/Admin/DescriptionTest.php @@ -42,22 +42,247 @@ class DescriptionTest extends \PhraseanetWebTestCaseAuthenticatedAbstract /** * Default route test */ - public function testRouteSlash() + public function testRouteDescription() { - $this->markTestIncomplete(); - $appbox = appbox::get_instance(); $databox = array_shift($appbox->get_databoxes()); - $fields = $databox->get_meta_structure(); - - $fieldIds = array(); - - foreach($fields as $field) - { - $fieldIds[] = $field->get_id(); - } - - $this->client->request("POST", "/description/" . $databox->get_sbas_id()); + $name = "testtest" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array($id) + , 'name_' . $id => $name + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => '/rdf:RDF/rdf:Description/IPTC:SupplementalCategories' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'User' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + $field->delete(); } + public function testPostDelete() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'todelete_ids' => array($id) + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + + try + { + $field = \databox_field::get_instance($databox, $id); + $field->delete(); + $this->fail("should raise an exception"); + } + catch (\Exception $e) + { + + } + } + + public function testPostCreate() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + + $name = 'test' . uniqid(); + + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'newfield' => $name + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + + $fields = $databox->get_meta_structure(); + $find = false; + + foreach ($fields as $field) + { + if ($field->get_name() === databox_field::generateName($name)) + { + $field->delete(); + $find = true; + } + } + + if (!$find) + { + $this->fail("should have create a new field"); + } + } + + public function testPostDescriptionException() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'todelete_ids' => array('unknow_id') + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array($id) + , 'name_' . $id => $name + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => '/rdf:RDF/rdf:Description/IPTC:SupplementalCategories' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'Unknow_Vocabulary' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + $field->delete(); + + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array($id) + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => '/rdf:RDF/rdf:Description/IPTC:SupplementalCategories' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'Unknow_Vocabulary' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + $field->delete(); + + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $field->set_multi(false); + $field->set_indexable(false); + $field->set_required(true); + $field->set_readonly(true); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array($id) + , 'name_' . $id => $name + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => 'unknow_Source' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'Unknow_Vocabulary' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + $this->assertTrue($field->is_readonly()); + $this->assertTrue($field->is_required()); + $this->assertFalse($field->is_multi()); + $this->assertFalse($field->is_indexable()); + $field->delete(); + + + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array('unknow_id') + , 'name_' . $id => $name + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => '/rdf:RDF/rdf:Description/IPTC:SupplementalCategories' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'Unknow_Vocabulary' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + $field->delete(); + } + + public function testPostDescriptionRights() + { + $appbox = appbox::get_instance(); + + $session = $appbox->get_session(); + $auth = new Session_Authentication_None(self::$user_alt1); + $session->authenticate($auth); + + $databox = array_shift($appbox->get_databoxes()); + $name = "test" . uniqid(); + $field = \databox_field::create($databox, $name); + $id = $field->get_id(); + $this->client->request("POST", "/description/" . $databox->get_sbas_id() . "/", array( + 'field_ids' => array($id) + , 'name_' . $id => $name + , 'multi_' . $id => 1 + , 'indexable_' . $id => 1 + , 'src_' . $id => '/rdf:RDF/rdf:Description/IPTC:SupplementalCategories' + , 'required_' . $id => 0 + , 'readonly_' . $id => 0 + , 'type_' . $id => 'string' + , 'vocabulary_' . $id => 'User' + , 'regname' => $id + , 'regdate' => $id + , 'regdesc' => $id + )); + $this->assertTrue($this->client->getResponse()->isOk()); + $this->assertEquals("You are not allowed to access this zone", $this->client->getResponse()->getContent()); + $field->delete(); + } + + public function testGetDescriptionException() + { + $appbox = appbox::get_instance(); + + $session = $appbox->get_session(); + $auth = new Session_Authentication_None(self::$user_alt1); + $session->authenticate($auth); + + $databox = array_shift($appbox->get_databoxes()); + + $this->client->request("GET", "/description/" . $databox->get_sbas_id() . "/"); + $this->assertTrue($this->client->getResponse()->isOk()); + $this->assertEquals("You are not allowed to access this zone", $this->client->getResponse()->getContent()); + } + + public function testGetDescription() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + + $this->client->request("GET", "/description/" . $databox->get_sbas_id() . "/"); + $this->assertTrue($this->client->getResponse()->isOk()); + } + + } diff --git a/lib/unitTest/Alchemy/Phrasea/Controller/Admin/SubdefsTest.php b/lib/unitTest/Alchemy/Phrasea/Controller/Admin/SubdefsTest.php index 40f60d1796..2b8501d94e 100644 --- a/lib/unitTest/Alchemy/Phrasea/Controller/Admin/SubdefsTest.php +++ b/lib/unitTest/Alchemy/Phrasea/Controller/Admin/SubdefsTest.php @@ -9,11 +9,11 @@ require_once __DIR__ . '/../../../../PhraseanetWebTestCaseAuthenticatedAbstract. class ControllerSubdefsTest extends \PhraseanetWebTestCaseAuthenticatedAbstract { - /** * As controllers use WebTestCase, it requires a client */ protected $client; + /** * If the controller tests require some records, specify it her * @@ -42,11 +42,77 @@ class ControllerSubdefsTest extends \PhraseanetWebTestCaseAuthenticatedAbstract /** * Default route test */ - public function testRouteSlash() + public function testRouteGetSubdef() { - $this->markTestIncomplete( - 'This test has not been implemented yet.' + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + $this->client->request("GET", "/subdefs/" . $databox->get_sbas_id() . "/"); + $this->assertTrue($this->client->getResponse()->isOk()); + } + + public function testPostRouteAddSubdef() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + $this->client->request("POST", "/subdefs/" . $databox->get_sbas_id() . "/", array('add_subdef' => array( + 'class' => 'a_class', + 'name' => 'a_name', + 'group' => 'image' + ))); + $this->assertTrue($this->client->getResponse()->isRedirect()); + $subdefs = $databox->get_subdef_structure(); + $subdefs->get_subdef("image", "a_name"); + $subdefs->delete_subdef('image', 'a_name'); + } + + public function testPostRouteDeleteSubdef() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + $subdefs = $databox->get_subdef_structure(); + $subdefs->add_subdef("image", "name", "class"); + $this->client->request("POST", "/subdefs/" . $databox->get_sbas_id() . "/", array('delete_subdef' => 'group_name')); + $this->assertTrue($this->client->getResponse()->isRedirect()); + try + { + $subdefs->get_subdef("image", "name"); + $this->fail("should raise an exception"); + } + catch (\Exception $e) + { + + } + } + + public function testPostRouteAddSubdefWithNoParams() + { + $appbox = appbox::get_instance(); + $databox = array_shift($appbox->get_databoxes()); + $subdefs = $databox->get_subdef_structure(); + $subdefs->add_subdef("image", "name", "class"); + $this->client->request("POST", "/subdefs/" . $databox->get_sbas_id() . "/", array('subdefs' => array( + 'image_name' + ) + , 'image_name_class' => 'class' + , 'image_name_downloadable' => 0 + , 'image_name_mediatype' => 'image' + , 'image_name_image' => array( + 'size' => 400 + , 'resolution' => 83 + , 'strip' => 0 + , 'quality' => 90 + )) ); + $this->assertTrue($this->client->getResponse()->isRedirect()); + $subdef = $subdefs->get_subdef("image", "name"); + /* @var $subdef \databox_subdefAbstract */ + $this->assertFalse($subdef->is_downloadable()); + $options = $subdef->get_options(); + $this->assertEquals(400, $options["size"]); + $this->assertEquals(83, $options["resolution"]); + $this->assertEquals(90, $options["quality"]); + $this->assertFalse($options["strip"]); + $subdefs->delete_subdef("image", "name"); } }