diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Basket.php b/lib/Alchemy/Phrasea/Controller/Prod/Basket.php index ccb70bfe3a..a59cbbf77e 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Basket.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Basket.php @@ -34,7 +34,7 @@ class Basket implements ControllerProviderInterface $controllers->before(function(Request $request) use ($app) { $response = $app['firewall']->requireAuthentication(); - if($response instanceof Response) { + if ($response instanceof Response) { return $response; } }); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Bridge.php b/lib/Alchemy/Phrasea/Controller/Prod/Bridge.php index 2554ab5706..e3dc05fa9b 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Bridge.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Bridge.php @@ -41,394 +41,385 @@ class Bridge implements ControllerProviderInterface }); $app['require_connection'] = $app->protect(function(\Bridge_Account $account) use ($app) { - $app['current_account'] = function() use ($account) { - return $account; - }; + $app['current_account'] = function() use ($account) { + return $account; + }; - if (!$account->get_api()->get_connector()->is_configured()) - throw new \Bridge_Exception_ApiConnectorNotConfigured("Bridge API Connector is not configured"); - if (!$account->get_api()->get_connector()->is_connected()) - throw new \Bridge_Exception_ApiConnectorNotConnected("Bridge API Connector is not connected"); + if (!$account->get_api()->get_connector()->is_configured()) + throw new \Bridge_Exception_ApiConnectorNotConfigured("Bridge API Connector is not configured"); + if (!$account->get_api()->get_connector()->is_connected()) + throw new \Bridge_Exception_ApiConnectorNotConnected("Bridge API Connector is not connected"); - return; - }); + return; + }); - $controllers->post('/manager/' - , function(Application $app) { - $route = new RecordHelper\Bridge($app, $app['request']); - $appbox = $app['phraseanet.appbox']; - $user = $app['phraseanet.user']; + $controllers->post('/manager/', function(Application $app) { + $route = new RecordHelper\Bridge($app, $app['request']); + $appbox = $app['phraseanet.appbox']; + $user = $app['phraseanet.user']; - $params = array( - 'user_accounts' => \Bridge_Account::get_accounts_by_user($app, $user) - , 'available_apis' => \Bridge_Api::get_availables($app) - , 'route' => $route - , 'current_account_id' => '' - ); + $params = array( + 'user_accounts' => \Bridge_Account::get_accounts_by_user($app, $user) + , 'available_apis' => \Bridge_Api::get_availables($app) + , 'route' => $route + , 'current_account_id' => '' + ); - return new Response($app['twig']->render('prod/actions/Bridge/index.html.twig', $params) - ); - }); + return $app['twig']->render('prod/actions/Bridge/index.html.twig', $params); + }); $controllers->get('/login/{api_name}/', function(Application $app, $api_name) { - $appbox = $app['phraseanet.appbox']; - $connector = \Bridge_Api::get_connector_by_name($appbox->get_registry(), $api_name); + $appbox = $app['phraseanet.appbox']; + $connector = \Bridge_Api::get_connector_by_name($appbox->get_registry(), $api_name); - return $app->redirect($connector->get_auth_url()); - }); + return $app->redirect($connector->get_auth_url()); + }); $controllers->get('/callback/{api_name}/', function(Application $app, $api_name) { - $error_message = ''; + $error_message = ''; + try { + $appbox = $app['phraseanet.appbox']; + $user = $app['phraseanet.user']; + $api = \Bridge_Api::get_by_api_name($app, $api_name); + $connector = $api->get_connector(); + + $response = $connector->connect(); + + $user_id = $connector->get_user_id(); + try { - $appbox = $app['phraseanet.appbox']; - $user = $app['phraseanet.user']; - $api = \Bridge_Api::get_by_api_name($app, $api_name); - $connector = $api->get_connector(); - - $response = $connector->connect(); - - $user_id = $connector->get_user_id(); - - try { - $account = \Bridge_Account::load_account_from_distant_id($app, $api, $user, $user_id); - } catch (\Bridge_Exception_AccountNotFound $e) { - $account = \Bridge_Account::create($app, $api, $user, $user_id, $connector->get_user_name()); - } - $settings = $account->get_settings(); - - if (isset($response['auth_token'])) - $settings->set('auth_token', $response['auth_token']); - if (isset($response['refresh_token'])) - $settings->set('refresh_token', $response['refresh_token']); - - $connector->set_auth_settings($settings); - - $connector->reconnect(); - } catch (\Exception $e) { - $error_message = $e->getMessage(); + $account = \Bridge_Account::load_account_from_distant_id($app, $api, $user, $user_id); + } catch (\Bridge_Exception_AccountNotFound $e) { + $account = \Bridge_Account::create($app, $api, $user, $user_id, $connector->get_user_name()); } + $settings = $account->get_settings(); - $params = array('error_message' => $error_message); + if (isset($response['auth_token'])) + $settings->set('auth_token', $response['auth_token']); + if (isset($response['refresh_token'])) + $settings->set('refresh_token', $response['refresh_token']); - return new Response($app['twig']->render('prod/actions/Bridge/callback.html.twig', $params)); - }); + $connector->set_auth_settings($settings); + + $connector->reconnect(); + } catch (\Exception $e) { + $error_message = $e->getMessage(); + } + + $params = array('error_message' => $error_message); + + return $app['twig']->render('prod/actions/Bridge/callback.html.twig', $params); + }); $controllers->get('/adapter/{account_id}/logout/', function(Application $app, $account_id) { - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); - $app['require_connection']($account); - $account->get_api()->get_connector()->disconnect(); + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); + $app['require_connection']($account); + $account->get_api()->get_connector()->disconnect(); - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-elements/' . $account->get_api()->get_connector()->get_default_element_type() . '/'); - })->assert('account_id', '\d+'); + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-elements/' . $account->get_api()->get_connector()->get_default_element_type() . '/'); + })->assert('account_id', '\d+'); $controllers->get('/adapter/{account_id}/load-records/', function(Application $app, $account_id) { - $page = max((int) $app['request']->query->get('page'), 0); - $quantity = 10; - $offset_start = max(($page - 1) * $quantity, 0); - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); - $elements = \Bridge_Element::get_elements_by_account($app, $account, $offset_start, $quantity); + $page = max((int) $app['request']->query->get('page'), 0); + $quantity = 10; + $offset_start = max(($page - 1) * $quantity, 0); + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); + $elements = \Bridge_Element::get_elements_by_account($app, $account, $offset_start, $quantity); - $app['require_connection']($account); + $app['require_connection']($account); - $params = array( - 'adapter_action' => 'load-records' - , 'account' => $account - , 'elements' => $elements - , 'error_message' => $app['request']->query->get('error') - , 'notice_message' => $app['request']->query->get('notice') - ); + $params = array( + 'adapter_action' => 'load-records' + , 'account' => $account + , 'elements' => $elements + , 'error_message' => $app['request']->query->get('error') + , 'notice_message' => $app['request']->query->get('notice') + ); - return new Response($app['twig']->render('prod/actions/Bridge/records_list.html.twig', $params)); - }) - ->assert('account_id', '\d+'); + return $app['twig']->render('prod/actions/Bridge/records_list.html.twig', $params); + })->assert('account_id', '\d+'); - $controllers->get('/adapter/{account_id}/load-elements/{type}/' - , function($account_id, $type) use ($app) { - $page = max((int) $app['request']->query->get('page'), 0); - $quantity = 5; - $offset_start = max(($page - 1) * $quantity, 0); - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); + $controllers->get('/adapter/{account_id}/load-elements/{type}/', function($account_id, $type) use ($app) { + $page = max((int) $app['request']->query->get('page'), 0); + $quantity = 5; + $offset_start = max(($page - 1) * $quantity, 0); + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); - $app['require_connection']($account); + $app['require_connection']($account); - $elements = $account->get_api()->list_elements($type, $offset_start, $quantity); + $elements = $account->get_api()->list_elements($type, $offset_start, $quantity); - $params = array( - 'action_type' => $type - , 'adapter_action' => 'load-elements' - , 'account' => $account - , 'elements' => $elements - , 'error_message' => $app['request']->query->get('error') - , 'notice_message' => $app['request']->query->get('notice') - ); + $params = array( + 'action_type' => $type + , 'adapter_action' => 'load-elements' + , 'account' => $account + , 'elements' => $elements + , 'error_message' => $app['request']->query->get('error') + , 'notice_message' => $app['request']->query->get('notice') + ); - return new Response($app['twig']->render('prod/actions/Bridge/element_list.html.twig', $params)); - }) - ->assert('account_id', '\d+'); + return $app['twig']->render('prod/actions/Bridge/element_list.html.twig', $params); + })->assert('account_id', '\d+'); - $controllers->get('/adapter/{account_id}/load-containers/{type}/' - , function(Application $app, $account_id, $type) { + $controllers->get('/adapter/{account_id}/load-containers/{type}/', function(Application $app, $account_id, $type) { - $page = max((int) $app['request']->query->get('page'), 0); - $quantity = 5; - $offset_start = max(($page - 1) * $quantity, 0); - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); + $page = max((int) $app['request']->query->get('page'), 0); + $quantity = 5; + $offset_start = max(($page - 1) * $quantity, 0); + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); - $app['require_connection']($account); - $elements = $account->get_api()->list_containers($type, $offset_start, $quantity); + $app['require_connection']($account); + $elements = $account->get_api()->list_containers($type, $offset_start, $quantity); - $params = array( - 'action_type' => $type - , 'adapter_action' => 'load-containers' - , 'account' => $account - , 'elements' => $elements - , 'error_message' => $app['request']->query->get('error') - , 'notice_message' => $app['request']->query->get('notice') - ); + $params = array( + 'action_type' => $type + , 'adapter_action' => 'load-containers' + , 'account' => $account + , 'elements' => $elements + , 'error_message' => $app['request']->query->get('error') + , 'notice_message' => $app['request']->query->get('notice') + ); - return new Response($app['twig']->render('prod/actions/Bridge/element_list.html.twig', $params)); - }) - ->assert('account_id', '\d+'); + return $app['twig']->render('prod/actions/Bridge/element_list.html.twig', $params); + })->assert('account_id', '\d+'); - $controllers->get('/action/{account_id}/{action}/{element_type}/' - , function(Application $app, $account_id, $action, $element_type) { + $controllers->get('/action/{account_id}/{action}/{element_type}/', function(Application $app, $account_id, $action, $element_type) { - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); - $app['require_connection']($account); - $request = $app['request']; - $elements = $request->query->get('elements_list', array()); - $elements = is_array($elements) ? $elements : explode(';', $elements); + $app['require_connection']($account); + $request = $app['request']; + $elements = $request->query->get('elements_list', array()); + $elements = is_array($elements) ? $elements : explode(';', $elements); - $destination = $request->query->get('destination'); - $route_params = array(); - $class = $account->get_api()->get_connector()->get_object_class_from_type($element_type); + $destination = $request->query->get('destination'); + $route_params = array(); + $class = $account->get_api()->get_connector()->get_object_class_from_type($element_type); - switch ($action) { - case 'createcontainer': - break; + switch ($action) { + case 'createcontainer': + break; - case 'modify': - if (count($elements) != 1) { - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-elements/' . $element_type . '/?page=&error=' . _('Vous ne pouvez pas editer plusieurs elements simultanement')); + case 'modify': + if (count($elements) != 1) { + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-elements/' . $element_type . '/?page=&error=' . _('Vous ne pouvez pas editer plusieurs elements simultanement')); + } + foreach ($elements as $element_id) { + if ($class === \Bridge_Api_Interface::OBJECT_CLASS_ELEMENT) { + $route_params = array('element' => $account->get_api()->get_element_from_id($element_id, $element_type)); } + if ($class === \Bridge_Api_Interface::OBJECT_CLASS_CONTAINER) { + $route_params = array('element' => $account->get_api()->get_container_from_id($element_id, $element_type)); + } + } + break; + + case 'moveinto': + + $route_params = array('containers' => $account->get_api()->list_containers($destination, 0, 0)); + break; + + case 'deleteelement': + + break; + + default: + throw new \Exception(_('Vous essayez de faire une action que je ne connais pas !')); + break; + } + + $params = array( + 'account' => $account + , 'destination' => $destination + , 'element_type' => $element_type + , 'action' => $action + , 'constraint_errors' => null + , 'adapter_action' => $action + , 'elements' => $elements + , 'error_message' => $app['request']->query->get('error') + , 'notice_message' => $app['request']->query->get('notice') + ); + + $params = array_merge($params, $route_params); + + $template = 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/' . $element_type . '_' . $action . ($destination ? '_' . $destination : '') . '.html.twig'; + + return $app['twig']->render($template, $params); + })->assert('account_id', '\d+'); + + $controllers->post('/action/{account_id}/{action}/{element_type}/', function(Application $app, $account_id, $action, $element_type) { + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $account_id); + + $app['require_connection']($account); + + $request = $app['request']; + $elements = $request->request->get('elements_list', array()); + $elements = is_array($elements) ? $elements : explode(';', $elements); + + $destination = $request->request->get('destination'); + + $class = $account->get_api()->get_connector()->get_object_class_from_type($element_type); + $html = ''; + switch ($action) { + case 'modify': + if (count($elements) != 1) { + return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?elements_list=' . implode(';', $elements) . '&error=' . _('Vous ne pouvez pas editer plusieurs elements simultanement')); + } + try { foreach ($elements as $element_id) { - if ($class === \Bridge_Api_Interface::OBJECT_CLASS_ELEMENT) { - $route_params = array('element' => $account->get_api()->get_element_from_id($element_id, $element_type)); - } - if ($class === \Bridge_Api_Interface::OBJECT_CLASS_CONTAINER) { - $route_params = array('element' => $account->get_api()->get_container_from_id($element_id, $element_type)); - } - } - break; - - case 'moveinto': - - $route_params = array('containers' => $account->get_api()->list_containers($destination, 0, 0)); - break; - - case 'deleteelement': - - break; - - default: - throw new \Exception(_('Vous essayez de faire une action que je ne connais pas !')); - break; - } - - $params = array( - 'account' => $account - , 'destination' => $destination - , 'element_type' => $element_type - , 'action' => $action - , 'constraint_errors' => null - , 'adapter_action' => $action - , 'elements' => $elements - , 'error_message' => $app['request']->query->get('error') - , 'notice_message' => $app['request']->query->get('notice') - ); - - $params = array_merge($params, $route_params); - - $template = 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/' . $element_type . '_' . $action . ($destination ? '_' . $destination : '') . '.html.twig'; - - return new Response($app['twig']->render($template, $params)); - })->assert('account_id', '\d+'); - - $controllers->post('/action/{account_id}/{action}/{element_type}/' - , function(Application $app, $account_id, $action, $element_type) { - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $account_id); - - $app['require_connection']($account); - - $request = $app['request']; - $elements = $request->request->get('elements_list', array()); - $elements = is_array($elements) ? $elements : explode(';', $elements); - - $destination = $request->request->get('destination'); - - $class = $account->get_api()->get_connector()->get_object_class_from_type($element_type); - $html = ''; - switch ($action) { - case 'modify': - if (count($elements) != 1) { - return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?elements_list=' . implode(';', $elements) . '&error=' . _('Vous ne pouvez pas editer plusieurs elements simultanement')); - } - try { - foreach ($elements as $element_id) { - $datas = $account->get_api()->get_connector()->get_update_datas($app['request']); - $errors = $account->get_api()->get_connector()->check_update_constraints($datas); - } - - if (count($errors) > 0) { - $params = array( - 'element' => $account->get_api()->get_element_from_id($element_id, $element_type) - , 'account' => $account - , 'destination' => $destination - , 'element_type' => $element_type - , 'action' => $action - , 'elements' => $elements - , 'adapter_action' => $action - , 'error_message' => _('Request contains invalid datas') - , 'constraint_errors' => $errors - , 'notice_message' => $app['request']->request->get('notice') - ); - - $template = 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/' . $element_type . '_' . $action . ($destination ? '_' . $destination : '') . '.html.twig'; - - return new Response($app['twig']->render($template, $params)); - } - - foreach ($elements as $element_id) { - $datas = $account->get_api()->get_connector()->get_update_datas($app['request']); - $account->get_api()->update_element($element_type, $element_id, $datas); - } - } catch (\Exception $e) { - return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?elements_list[]=' . $element_id . '&error=' . get_class($e) . ' : ' . $e->getMessage()); + $datas = $account->get_api()->get_connector()->get_update_datas($app['request']); + $errors = $account->get_api()->get_connector()->check_update_constraints($datas); } - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/?page=&update=success#anchor'); + if (count($errors) > 0) { + $params = array( + 'element' => $account->get_api()->get_element_from_id($element_id, $element_type) + , 'account' => $account + , 'destination' => $destination + , 'element_type' => $element_type + , 'action' => $action + , 'elements' => $elements + , 'adapter_action' => $action + , 'error_message' => _('Request contains invalid datas') + , 'constraint_errors' => $errors + , 'notice_message' => $app['request']->request->get('notice') + ); - break; - case 'createcontainer': - try { + $template = 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/' . $element_type . '_' . $action . ($destination ? '_' . $destination : '') . '.html.twig'; - $container_type = $request->request->get('f_container_type'); - - $account->get_api()->create_container($container_type, $app['request']); - } catch (\Exception $e) { - - return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . ' : ' . $e->getMessage()); + return $app['twig']->render($template, $params); } - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/?page=&update=success#anchor'); - - break; - case 'moveinto': - try { - $container_id = $request->request->get('container_id'); - foreach ($elements as $element_id) { - $account->get_api()->add_element_to_container($element_type, $element_id, $destination, $container_id); - } - } catch (\Exception $e) { - return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . ' : ' . $e->getMessage()); + foreach ($elements as $element_id) { + $datas = $account->get_api()->get_connector()->get_update_datas($app['request']); + $account->get_api()->update_element($element_type, $element_id, $datas); } + } catch (\Exception $e) { + return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?elements_list[]=' . $element_id . '&error=' . get_class($e) . ' : ' . $e->getMessage()); + } - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-containers/' . $destination . '/?page=&update=success#anchor'); + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/?page=&update=success#anchor'); - break; + break; + case 'createcontainer': + try { - case 'deleteelement': - try { - foreach ($elements as $element_id) { - $account->get_api()->delete_object($element_type, $element_id); - } - } catch (\Exception $e) { - return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . $e->getMessage()); + $container_type = $request->request->get('f_container_type'); + + $account->get_api()->create_container($container_type, $app['request']); + } catch (\Exception $e) { + + return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . ' : ' . $e->getMessage()); + } + + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/?page=&update=success#anchor'); + + break; + case 'moveinto': + try { + $container_id = $request->request->get('container_id'); + foreach ($elements as $element_id) { + $account->get_api()->add_element_to_container($element_type, $element_id, $destination, $container_id); } + } catch (\Exception $e) { + return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . ' : ' . $e->getMessage()); + } - return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/'); - break; - default: - throw new \Exception('Unknown action'); - break; - } + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-containers/' . $destination . '/?page=&update=success#anchor'); - return new Response($html); - })->assert('account_id', '\d+'); + break; + + case 'deleteelement': + try { + foreach ($elements as $element_id) { + $account->get_api()->delete_object($element_type, $element_id); + } + } catch (\Exception $e) { + return $app->redirect('/prod/bridge/action/' . $account_id . '/' . $action . '/' . $element_type . '/?error=' . get_class($e) . $e->getMessage()); + } + + return $app->redirect('/prod/bridge/adapter/' . $account_id . '/load-' . $class . 's/' . $element_type . '/'); + break; + default: + throw new \Exception('Unknown action'); + break; + } + + return new Response($html); + })->assert('account_id', '\d+'); $controllers->get('/upload/', function(Application $app) { - $request = $app['request']; - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $request->query->get('account_id')); - $app['require_connection']($account); + $request = $app['request']; + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $request->query->get('account_id')); + $app['require_connection']($account); - $route = new RecordHelper\Bridge($app, $app['request']); + $route = new RecordHelper\Bridge($app, $app['request']); - $route->grep_records($account->get_api()->acceptable_records()); + $route->grep_records($account->get_api()->acceptable_records()); + + $params = array( + 'route' => $route + , 'account' => $account + , 'error_message' => $app['request']->query->get('error') + , 'notice_message' => $app['request']->query->get('notice') + , 'constraint_errors' => null + , 'adapter_action' => 'upload' + ); + + return $app['twig']->render( + 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/upload.html.twig', $params + ); + }); + + $controllers->post('/upload/', function(Application $app) { + $errors = array(); + $request = $app['request']; + $appbox = $app['phraseanet.appbox']; + $account = \Bridge_Account::load_account($app, $request->request->get('account_id')); + $app['require_connection']($account); + + $route = new RecordHelper\Bridge($app, $app['request']); + $route->grep_records($account->get_api()->acceptable_records()); + $connector = $account->get_api()->get_connector(); + + /** + * check constraints + */ + foreach ($route->get_elements() as $record) { + $datas = $connector->get_upload_datas($request, $record); + $errors = array_merge($errors, $connector->check_upload_constraints($datas, $record)); + } + + if (count($errors) > 0) { $params = array( 'route' => $route , 'account' => $account - , 'error_message' => $app['request']->query->get('error') - , 'notice_message' => $app['request']->query->get('notice') - , 'constraint_errors' => null + , 'error_message' => _('Request contains invalid datas') + , 'constraint_errors' => $errors + , 'notice_message' => $app['request']->request->get('notice') , 'adapter_action' => 'upload' ); - return new Response($app['twig']->render( - 'prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/upload.html.twig', $params - )); - }); + return $app['twig']->render('prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/upload.html.twig', $params); + } - $controllers->post('/upload/', function(Application $app) { - $errors = array(); - $request = $app['request']; - $appbox = $app['phraseanet.appbox']; - $account = \Bridge_Account::load_account($app, $request->request->get('account_id')); - $app['require_connection']($account); + foreach ($route->get_elements() as $record) { + $datas = $connector->get_upload_datas($request, $record); + $title = isset($datas["title"]) ? $datas["title"] : ''; + $default_type = $connector->get_default_element_type(); + \Bridge_Element::create($app, $account, $record, $title, \Bridge_Element::STATUS_PENDING, $default_type, $datas); + } - $route = new RecordHelper\Bridge($app, $app['request']); - $route->grep_records($account->get_api()->acceptable_records()); - $connector = $account->get_api()->get_connector(); - - /** - * check constraints - */ - foreach ($route->get_elements() as $record) { - $datas = $connector->get_upload_datas($request, $record); - $errors = array_merge($errors, $connector->check_upload_constraints($datas, $record)); - } - - if (count($errors) > 0) { - - $params = array( - 'route' => $route - , 'account' => $account - , 'error_message' => _('Request contains invalid datas') - , 'constraint_errors' => $errors - , 'notice_message' => $app['request']->request->get('notice') - , 'adapter_action' => 'upload' - ); - - return new Response($app['twig']->render('prod/actions/Bridge/' . $account->get_api()->get_connector()->get_name() . '/upload.html.twig', $params)); - } - - foreach ($route->get_elements() as $record) { - $datas = $connector->get_upload_datas($request, $record); - $title = isset($datas["title"]) ? $datas["title"] : ''; - $default_type = $connector->get_default_element_type(); - \Bridge_Element::create($app, $account, $record, $title, \Bridge_Element::STATUS_PENDING, $default_type, $datas); - } - - return $app->redirect('/prod/bridge/adapter/' . $account->get_id() . '/load-records/?notice=' . sprintf(_('%d elements en attente'), count($route->get_elements()))); - }); + return $app->redirect('/prod/bridge/adapter/' . $account->get_id() . '/load-records/?notice=' . sprintf(_('%d elements en attente'), count($route->get_elements()))); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Edit.php b/lib/Alchemy/Phrasea/Controller/Prod/Edit.php index 27630edcec..d4eec3e888 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Edit.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Edit.php @@ -43,377 +43,374 @@ class Edit implements ControllerProviderInterface $controllers->post('/', function(Application $app, Request $request) { - $records = RecordsRequest::fromRequest($app, $request, true, array('canmodifrecord')); + $records = RecordsRequest::fromRequest($app, $request, true, array('canmodifrecord')); - $thesaurus = $multipleDataboxes = false; - $status = $ids = $elements = $suggValues = - $fields = $JSFields = array(); + $thesaurus = $multipleDataboxes = false; + $status = $ids = $elements = $suggValues = + $fields = $JSFields = array(); - $databox = null; + $databox = null; - $multipleDataboxes = count($records->databoxes()) > 1; - - if (!$multipleDataboxes) { - $databoxes = $records->databoxes(); - $databox = array_pop($databoxes); - - /** - * generate javascript fields - */ - foreach ($databox->get_meta_structure() as $meta) { - $fields[] = $meta; - - $separator = $meta->get_separator(); - - $JSFields[$meta->get_id()] = array( - 'meta_struct_id' => $meta->get_id() - , 'name' => $meta->get_name() - , '_status' => 0 - , '_value' => '' - , '_sgval' => array() - , 'required' => $meta->is_required() - , 'readonly' => $meta->is_readonly() - , 'type' => $meta->get_type() - , 'format' => '' - , 'explain' => '' - , 'tbranch' => $meta->get_tbranch() - , 'maxLength' => $meta->get_tag()->getMaxLength() - , 'minLength' => $meta->get_tag()->getMinLength() - , 'multi' => $meta->is_multi() - , 'separator' => $separator - , 'vocabularyControl' => $meta->getVocabularyControl() ? $meta->getVocabularyControl()->getType() : null - , 'vocabularyRestricted' => $meta->getVocabularyControl() ? $meta->isVocabularyRestricted() : false - ); - - if (trim($meta->get_tbranch()) !== '') { - $thesaurus = true; - } - } - - - /** - * generate javascript sugg values - */ - foreach ($records->collections() as $collection) { - /* @var $record record_adapter */ - - $suggValues['b' . $collection->get_base_id()] = array(); - - if ($sxe = simplexml_load_string($collection->get_prefs())) { - $z = $sxe->xpath('/baseprefs/sugestedValues'); - - if (!$z || !is_array($z)) { - continue; - } - - foreach ($z[0] as $ki => $vi) { // les champs - $field = $databox->get_meta_structure()->get_element_by_name($ki); - if (!$field || !$vi) { - continue; - } - - $suggValues['b' . $collection->get_base_id()][$field->get_id()] = array(); - - foreach ($vi->value as $oneValue) { - $suggValues['b' . $collection->get_base_id()][$field->get_id()][] = (string) $oneValue; - } - } - } - unset($collection); - } - - - /** - * generate javascript status - */ - if ($app['phraseanet.user']->ACL()->has_right('changestatus')) { - $dbstatus = \databox_status::getDisplayStatus($app); - if (isset($dbstatus[$databox->get_sbas_id()])) { - foreach ($dbstatus[$databox->get_sbas_id()] as $n => $statbit) { - $status[$n] = array(); - $status[$n]['label0'] = $statbit['labeloff']; - $status[$n]['label1'] = $statbit['labelon']; - $status[$n]['img_off'] = $statbit['img_off']; - $status[$n]['img_on'] = $statbit['img_on']; - $status[$n]['_value'] = 0; - } - } - } - - /** - * generate javascript elements - */ - foreach ($databox->get_meta_structure() as $field) { - $databox_fields[$field->get_id()] = array( - 'dirty' => false, - 'meta_struct_id' => $field->get_id(), - 'values' => array() - ); - } - - foreach ($records as $record) { - $indice = $record->get_number(); - $elements[$indice] = array( - 'bid' => $record->get_base_id(), - 'rid' => $record->get_record_id(), - 'sselcont_id' => null, - '_selected' => false, - 'fields' => $databox_fields - ); - - $elements[$indice]['statbits'] = array(); - if ($app['phraseanet.user']->ACL()->has_right_on_base($record->get_base_id(), 'chgstatus')) { - foreach ($status as $n => $s) { - $tmp_val = substr(strrev($record->get_status()), $n, 1); - $elements[$indice]['statbits'][$n]['value'] = ($tmp_val == '1') ? '1' : '0'; - $elements[$indice]['statbits'][$n]['dirty'] = false; - } - } - - $elements[$indice]['originalname'] = $record->get_original_name(); - - foreach ($record->get_caption()->get_fields(null, true) as $field) { - $meta_struct_id = $field->get_meta_struct_id(); - if (!isset($JSFields[$meta_struct_id])) { - continue; - } - - $values = array(); - foreach ($field->get_values() as $value) { - $type = $id = null; - - if ($value->getVocabularyType()) { - $type = $value->getVocabularyType()->getType(); - $id = $value->getVocabularyId(); - } - - $values[$value->getId()] = array( - 'meta_id' => $value->getId(), - 'value' => $value->getValue(), - 'vocabularyId' => $id, - 'vocabularyType' => $type - ); - } - - $elements[$indice]['fields'][$meta_struct_id] = array( - 'dirty' => false, - 'meta_struct_id' => $meta_struct_id, - 'values' => $values - ); - } - - $elements[$indice]['subdefs'] = array(); - - $thumbnail = $record->get_thumbnail(); - - $elements[$indice]['subdefs']['thumbnail'] = array( - 'url' => $thumbnail->get_url() - , 'w' => $thumbnail->get_width() - , 'h' => $thumbnail->get_height() - ); - - $elements[$indice]['preview'] = $app['twig']->render('common/preview.html.twig', array('record' => $record)); - - $elements[$indice]['type'] = $record->get_type(); - } - } - - $params = array( - 'multipleDataboxes' => $multipleDataboxes, - 'recordsRequest' => $records, - 'databox' => $databox, - 'JSonStatus' => json_encode($status), - 'JSonRecords' => json_encode($elements), - 'JSonFields' => json_encode($JSFields), - 'JSonIds' => json_encode(array_keys($elements)), - 'status' => $status, - 'fields' => $fields, - 'JSonSuggValues' => json_encode($suggValues), - 'thesaurus' => $thesaurus, - ); - - return $app['twig']->render('prod/actions/edit_default.html.twig', $params); - } - ); - - $controllers->get('/vocabulary/{vocabulary}/', function(Application $app, Request $request, $vocabulary) { - $datas = array('success' => false, 'message' => '', 'results' => array()); - - $sbas_id = (int) $request->query->get('sbas_id'); - - try { - if ($sbas_id === 0) { - throw new \Exception('Invalid sbas_id'); - } - - $VC = VocabularyController::get($app, $vocabulary); - $databox = $app['phraseanet.appbox']->get_databox($sbas_id); - } catch (\Exception $e) { - $datas['message'] = _('Vocabulary not found'); - - return $app->json($datas); - } - - $query = $request->query->get('query'); - - $results = $VC->find($query, $app['phraseanet.user'], $databox); - - $list = array(); - - foreach ($results as $Term) { - /* @var $Term \Alchemy\Phrasea\Vocabulary\Term */ - $list[] = array( - 'id' => $Term->getId(), - 'context' => $Term->getContext(), - 'value' => $Term->getValue(), - ); - } - - $datas['success'] = true; - $datas['results'] = $list; - - return $app->json($datas); - } - ); - - $controllers->post('/apply/', function(Application $app, Request $request) { - - $records = RecordsRequest::fromRequest($app, $request, true, array('canmodifrecord')); - - if (count($records->databoxes()) !== 1) { - throw new \Exception('Unable to edit on multiple databoxes'); - } - - if ($request->request->get('act_option') == 'SAVEGRP' - && $request->request->get('newrepresent') - && $records->isSingleStory()) { - try { - $reg_record = $records->singleStory(); - - $newsubdef_reg = new \record_adapter($app, $reg_record->get_sbas_id(), $request->request->get('newrepresent')); - - if ($newsubdef_reg->get_type() !== 'image') { - throw new \Exception('A reg image must come from image data'); - } - - foreach ($newsubdef_reg->get_subdefs() as $name => $value) { - if (!in_array($name, array('thumbnail', 'preview'))) { - continue; - } - $media = $app['mediavorus']->guess($value->get_pathfile()); - $reg_record->substitute_subdef($name, $media, $app); - } - } catch (\Exception $e) { - - } - } - - if (!is_array($request->get('mds'))) { - return; - } + $multipleDataboxes = count($records->databoxes()) > 1; + if (!$multipleDataboxes) { $databoxes = $records->databoxes(); $databox = array_pop($databoxes); - $meta_struct = $databox->get_meta_structure(); - $write_edit_el = false; - $date_obj = new \DateTime(); - foreach ($meta_struct->get_elements() as $meta_struct_el) { - if ($meta_struct_el->get_tag() instanceof TfEditdate) { - $write_edit_el = $meta_struct_el; + /** + * generate javascript fields + */ + foreach ($databox->get_meta_structure() as $meta) { + $fields[] = $meta; + + $separator = $meta->get_separator(); + + $JSFields[$meta->get_id()] = array( + 'meta_struct_id' => $meta->get_id() + , 'name' => $meta->get_name() + , '_status' => 0 + , '_value' => '' + , '_sgval' => array() + , 'required' => $meta->is_required() + , 'readonly' => $meta->is_readonly() + , 'type' => $meta->get_type() + , 'format' => '' + , 'explain' => '' + , 'tbranch' => $meta->get_tbranch() + , 'maxLength' => $meta->get_tag()->getMaxLength() + , 'minLength' => $meta->get_tag()->getMinLength() + , 'multi' => $meta->is_multi() + , 'separator' => $separator + , 'vocabularyControl' => $meta->getVocabularyControl() ? $meta->getVocabularyControl()->getType() : null + , 'vocabularyRestricted' => $meta->getVocabularyControl() ? $meta->isVocabularyRestricted() : false + ); + + if (trim($meta->get_tbranch()) !== '') { + $thesaurus = true; } } - $elements = $records->toArray(); - foreach ($request->get('mds') as $rec) { - try { - $record = $databox->get_record($rec['record_id']); - } catch (\Exception $e) { - continue; - } + /** + * generate javascript sugg values + */ + foreach ($records->collections() as $collection) { + /* @var $record record_adapter */ - $key = $record->get_serialize_key(); + $suggValues['b' . $collection->get_base_id()] = array(); - if (!array_key_exists($key, $elements)) { - continue; - } + if ($sxe = simplexml_load_string($collection->get_prefs())) { + $z = $sxe->xpath('/baseprefs/sugestedValues'); - $statbits = $rec['status']; - $editDirty = $rec['edit']; - - if ($editDirty == '0') { - $editDirty = false; - } else { - $editDirty = true; - } - - if (is_array($rec['metadatas'])) { - $record->set_metadatas($rec['metadatas']); - } - - /** - * todo : this should not work - */ - if ($write_edit_el instanceof \databox_field) { - $fields = $record->get_caption()->get_fields(array($write_edit_el->get_name()), true); - $field = array_pop($fields); - - $meta_id = null; - - if ($field && !$field->is_multi()) { - $values = $field->get_values(); - $meta_id = array_pop($values)->getId(); + if (!$z || !is_array($z)) { + continue; } - $metas = array( - array( - 'meta_struct_id' => $write_edit_el->get_id(), - 'meta_id' => $meta_id, - 'value' => $date_obj->format('Y-m-d h:i:s'), - ) + foreach ($z[0] as $ki => $vi) { // les champs + $field = $databox->get_meta_structure()->get_element_by_name($ki); + if (!$field || !$vi) { + continue; + } + + $suggValues['b' . $collection->get_base_id()][$field->get_id()] = array(); + + foreach ($vi->value as $oneValue) { + $suggValues['b' . $collection->get_base_id()][$field->get_id()][] = (string) $oneValue; + } + } + } + unset($collection); + } + + + /** + * generate javascript status + */ + if ($app['phraseanet.user']->ACL()->has_right('changestatus')) { + $dbstatus = \databox_status::getDisplayStatus($app); + if (isset($dbstatus[$databox->get_sbas_id()])) { + foreach ($dbstatus[$databox->get_sbas_id()] as $n => $statbit) { + $status[$n] = array(); + $status[$n]['label0'] = $statbit['labeloff']; + $status[$n]['label1'] = $statbit['labelon']; + $status[$n]['img_off'] = $statbit['img_off']; + $status[$n]['img_on'] = $statbit['img_on']; + $status[$n]['_value'] = 0; + } + } + } + + /** + * generate javascript elements + */ + foreach ($databox->get_meta_structure() as $field) { + $databox_fields[$field->get_id()] = array( + 'dirty' => false, + 'meta_struct_id' => $field->get_id(), + 'values' => array() + ); + } + + foreach ($records as $record) { + $indice = $record->get_number(); + $elements[$indice] = array( + 'bid' => $record->get_base_id(), + 'rid' => $record->get_record_id(), + 'sselcont_id' => null, + '_selected' => false, + 'fields' => $databox_fields + ); + + $elements[$indice]['statbits'] = array(); + if ($app['phraseanet.user']->ACL()->has_right_on_base($record->get_base_id(), 'chgstatus')) { + foreach ($status as $n => $s) { + $tmp_val = substr(strrev($record->get_status()), $n, 1); + $elements[$indice]['statbits'][$n]['value'] = ($tmp_val == '1') ? '1' : '0'; + $elements[$indice]['statbits'][$n]['dirty'] = false; + } + } + + $elements[$indice]['originalname'] = $record->get_original_name(); + + foreach ($record->get_caption()->get_fields(null, true) as $field) { + $meta_struct_id = $field->get_meta_struct_id(); + if (!isset($JSFields[$meta_struct_id])) { + continue; + } + + $values = array(); + foreach ($field->get_values() as $value) { + $type = $id = null; + + if ($value->getVocabularyType()) { + $type = $value->getVocabularyType()->getType(); + $id = $value->getVocabularyId(); + } + + $values[$value->getId()] = array( + 'meta_id' => $value->getId(), + 'value' => $value->getValue(), + 'vocabularyId' => $id, + 'vocabularyType' => $type + ); + } + + $elements[$indice]['fields'][$meta_struct_id] = array( + 'dirty' => false, + 'meta_struct_id' => $meta_struct_id, + 'values' => $values ); - - $record->set_metadatas($metas, true); } - $newstat = $record->get_status(); - $statbits = ltrim($statbits, 'x'); - if (!in_array($statbits, array('', 'null'))) { - $mask_and = ltrim(str_replace(array('x', '0', '1', 'z'), array('1', 'z', '0', '1'), $statbits), '0'); - if ($mask_and != '') { - $newstat = \databox_status::operation_and_not($app, $newstat, $mask_and); - } + $elements[$indice]['subdefs'] = array(); - $mask_or = ltrim(str_replace('x', '0', $statbits), '0'); + $thumbnail = $record->get_thumbnail(); - if ($mask_or != '') { - $newstat = \databox_status::operation_or($app, $newstat, $mask_or); - } + $elements[$indice]['subdefs']['thumbnail'] = array( + 'url' => $thumbnail->get_url() + , 'w' => $thumbnail->get_width() + , 'h' => $thumbnail->get_height() + ); - $record->set_binary_status($newstat); - } + $elements[$indice]['preview'] = $app['twig']->render('common/preview.html.twig', array('record' => $record)); - $record - ->get_collection() - ->reset_stamp($record->get_record_id()) - ->write_metas(); + $elements[$indice]['type'] = $record->get_type(); + } + } - if ($statbits != '') { - $app['phraseanet.logger']($record->get_databox()) - ->log($record, \Session_Logger::EVENT_STATUS, '', ''); - } - if ($editDirty) { - $app['phraseanet.logger']($record->get_databox()) - ->log($record, \Session_Logger::EVENT_EDIT, '', ''); - } + $params = array( + 'multipleDataboxes' => $multipleDataboxes, + 'recordsRequest' => $records, + 'databox' => $databox, + 'JSonStatus' => json_encode($status), + 'JSonRecords' => json_encode($elements), + 'JSonFields' => json_encode($JSFields), + 'JSonIds' => json_encode(array_keys($elements)), + 'status' => $status, + 'fields' => $fields, + 'JSonSuggValues' => json_encode($suggValues), + 'thesaurus' => $thesaurus, + ); + + return $app['twig']->render('prod/actions/edit_default.html.twig', $params); + }); + + $controllers->get('/vocabulary/{vocabulary}/', function(Application $app, Request $request, $vocabulary) { + $datas = array('success' => false, 'message' => '', 'results' => array()); + + $sbas_id = (int) $request->query->get('sbas_id'); + + try { + if ($sbas_id === 0) { + throw new \Exception('Invalid sbas_id'); } + $VC = VocabularyController::get($app, $vocabulary); + $databox = $app['phraseanet.appbox']->get_databox($sbas_id); + } catch (\Exception $e) { + $datas['message'] = _('Vocabulary not found'); - - return $app['twig']->render('prod/actions/edit_default.html.twig', array('edit' => $editing, 'message' => '')); + return $app->json($datas); } - ); + + $query = $request->query->get('query'); + + $results = $VC->find($query, $app['phraseanet.user'], $databox); + + $list = array(); + + foreach ($results as $Term) { + /* @var $Term \Alchemy\Phrasea\Vocabulary\Term */ + $list[] = array( + 'id' => $Term->getId(), + 'context' => $Term->getContext(), + 'value' => $Term->getValue(), + ); + } + + $datas['success'] = true; + $datas['results'] = $list; + + return $app->json($datas); + }); + + $controllers->post('/apply/', function(Application $app, Request $request) { + + $records = RecordsRequest::fromRequest($app, $request, true, array('canmodifrecord')); + + if (count($records->databoxes()) !== 1) { + throw new \Exception('Unable to edit on multiple databoxes'); + } + + if ($request->request->get('act_option') == 'SAVEGRP' + && $request->request->get('newrepresent') + && $records->isSingleStory()) { + try { + $reg_record = $records->singleStory(); + + $newsubdef_reg = new \record_adapter($app, $reg_record->get_sbas_id(), $request->request->get('newrepresent')); + + if ($newsubdef_reg->get_type() !== 'image') { + throw new \Exception('A reg image must come from image data'); + } + + foreach ($newsubdef_reg->get_subdefs() as $name => $value) { + if (!in_array($name, array('thumbnail', 'preview'))) { + continue; + } + $media = $app['mediavorus']->guess($value->get_pathfile()); + $reg_record->substitute_subdef($name, $media, $app); + } + } catch (\Exception $e) { + + } + } + + if (!is_array($request->get('mds'))) { + return; + } + + $databoxes = $records->databoxes(); + $databox = array_pop($databoxes); + + $meta_struct = $databox->get_meta_structure(); + $write_edit_el = false; + $date_obj = new \DateTime(); + foreach ($meta_struct->get_elements() as $meta_struct_el) { + if ($meta_struct_el->get_tag() instanceof TfEditdate) { + $write_edit_el = $meta_struct_el; + } + } + + $elements = $records->toArray(); + + foreach ($request->get('mds') as $rec) { + try { + $record = $databox->get_record($rec['record_id']); + } catch (\Exception $e) { + continue; + } + + $key = $record->get_serialize_key(); + + if (!array_key_exists($key, $elements)) { + continue; + } + + $statbits = $rec['status']; + $editDirty = $rec['edit']; + + if ($editDirty == '0') { + $editDirty = false; + } else { + $editDirty = true; + } + + if (is_array($rec['metadatas'])) { + $record->set_metadatas($rec['metadatas']); + } + + /** + * todo : this should not work + */ + if ($write_edit_el instanceof \databox_field) { + $fields = $record->get_caption()->get_fields(array($write_edit_el->get_name()), true); + $field = array_pop($fields); + + $meta_id = null; + + if ($field && !$field->is_multi()) { + $values = $field->get_values(); + $meta_id = array_pop($values)->getId(); + } + + $metas = array( + array( + 'meta_struct_id' => $write_edit_el->get_id(), + 'meta_id' => $meta_id, + 'value' => $date_obj->format('Y-m-d h:i:s'), + ) + ); + + $record->set_metadatas($metas, true); + } + + $newstat = $record->get_status(); + $statbits = ltrim($statbits, 'x'); + if (!in_array($statbits, array('', 'null'))) { + $mask_and = ltrim(str_replace(array('x', '0', '1', 'z'), array('1', 'z', '0', '1'), $statbits), '0'); + if ($mask_and != '') { + $newstat = \databox_status::operation_and_not($app, $newstat, $mask_and); + } + + $mask_or = ltrim(str_replace('x', '0', $statbits), '0'); + + if ($mask_or != '') { + $newstat = \databox_status::operation_or($app, $newstat, $mask_or); + } + + $record->set_binary_status($newstat); + } + + $record + ->get_collection() + ->reset_stamp($record->get_record_id()) + ->write_metas(); + + if ($statbits != '') { + $app['phraseanet.logger']($record->get_databox()) + ->log($record, \Session_Logger::EVENT_STATUS, '', ''); + } + if ($editDirty) { + $app['phraseanet.logger']($record->get_databox()) + ->log($record, \Session_Logger::EVENT_EDIT, '', ''); + } + } + + + + return $app['twig']->render('prod/actions/edit_default.html.twig', array('edit' => $editing, 'message' => '')); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Feed.php b/lib/Alchemy/Phrasea/Controller/Prod/Feed.php index 719599b1df..33499535ba 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Feed.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Feed.php @@ -33,44 +33,64 @@ class Feed implements ControllerProviderInterface * I got a selection of docs, which publications are available forthese docs ? */ $controllers->post('/requestavailable/', function(Application $app, Request $request) { - $user = $app['phraseanet.user']; - $feeds = \Feed_Collection::load_all($app, $user); - $publishing = RecordsRequest::fromRequest($app, $request, true, array(), array('bas_chupub')); + $user = $app['phraseanet.user']; + $feeds = \Feed_Collection::load_all($app, $user); + $publishing = RecordsRequest::fromRequest($app, $request, true, array(), array('bas_chupub')); - return new Response($app['twig']->render('prod/actions/publish/publish.html.twig', array('publishing' => $publishing, 'feeds' => $feeds))); - }); + return $app['twig']->render('prod/actions/publish/publish.html.twig', array('publishing' => $publishing, 'feeds' => $feeds)); + }); /** - * I've selected a publication for my ocs, let's publish them + * I've selected a publication for my docs, let's publish them */ $controllers->post('/entry/create/', function(Application $app, Request $request) { - try { - $user = $app['phraseanet.user']; - $feed = new \Feed_Adapter($app, $request->request->get('feed_id')); - $publisher = \Feed_Publisher_Adapter::getPublisher($app['phraseanet.appbox'], $feed, $user); + try { + $user = $app['phraseanet.user']; + $feed = new \Feed_Adapter($app, $request->request->get('feed_id')); + $publisher = \Feed_Publisher_Adapter::getPublisher($app['phraseanet.appbox'], $feed, $user); - $title = $request->request->get('title'); - $subtitle = $request->request->get('subtitle'); - $author_name = $request->request->get('author_name'); - $author_mail = $request->request->get('author_mail'); + $title = $request->request->get('title'); + $subtitle = $request->request->get('subtitle'); + $author_name = $request->request->get('author_name'); + $author_mail = $request->request->get('author_mail'); - $entry = \Feed_Entry_Adapter::create($app, $feed, $publisher, $title, $subtitle, $author_name, $author_mail); + $entry = \Feed_Entry_Adapter::create($app, $feed, $publisher, $title, $subtitle, $author_name, $author_mail); - $publishing = RecordsRequest::fromRequest($app, $request, true, array(), array('bas_chupub')); + $publishing = RecordsRequest::fromRequest($app, $request, true, array(), array('bas_chupub')); - foreach ($publishing as $record) { - $item = \Feed_Entry_Item::create($app['phraseanet.appbox'], $entry, $record); - } - $datas = array('error' => false, 'message' => false); - } catch (\Exception $e) { - $datas = array('error' => true, 'message' => _('An error occured'), 'details' => $e->getMessage()); + foreach ($publishing as $record) { + $item = \Feed_Entry_Item::create($app['phraseanet.appbox'], $entry, $record); } + $datas = array('error' => false, 'message' => false); + } catch (\Exception $e) { + $datas = array('error' => true, 'message' => _('An error occured'), 'details' => $e->getMessage()); + } - return $app->json($datas); - }); + return $app->json($datas); + }); $controllers->get('/entry/{id}/edit/', function(Application $app, Request $request, $id) { + $user = $app['phraseanet.user']; + + $entry = \Feed_Entry_Adapter::load_from_id($app, $id); + + if ($entry->get_publisher()->get_user()->get_id() !== $user->get_id()) { + throw new \Exception_UnauthorizedAction(); + } + + $feeds = \Feed_Collection::load_all($app, $user); + + $datas = $app['twig']->render('prod/actions/publish/publish_edit.html.twig', array('entry' => $entry, 'feeds' => $feeds)); + + return new Response($datas); + })->assert('id', '\d+'); + + $controllers->post('/entry/{id}/update/', function(Application $app, Request $request, $id) { + $datas = array('error' => true, 'message' => '', 'datas' => ''); + try { + $app['phraseanet.appbox']->get_connection()->beginTransaction(); + $user = $app['phraseanet.user']; $entry = \Feed_Entry_Adapter::load_from_id($app, $id); @@ -79,182 +99,162 @@ class Feed implements ControllerProviderInterface throw new \Exception_UnauthorizedAction(); } - $feeds = \Feed_Collection::load_all($app, $user); + $title = $request->request->get('title'); + $subtitle = $request->request->get('subtitle'); + $author_name = $request->request->get('author_name'); + $author_mail = $request->request->get('author_mail'); - $datas = $app['twig']->render('prod/actions/publish/publish_edit.html.twig', array('entry' => $entry, 'feeds' => $feeds)); + $entry->set_author_email($author_mail) + ->set_author_name($author_name) + ->set_title($title) + ->set_subtitle($subtitle); - return new Response($datas); - })->assert('id', '\d+'); - - $controllers->post('/entry/{id}/update/', function(Application $app, Request $request, $id) { - $datas = array('error' => true, 'message' => '', 'datas' => ''); - try { - $app['phraseanet.appbox']->get_connection()->beginTransaction(); - - $user = $app['phraseanet.user']; - - $entry = \Feed_Entry_Adapter::load_from_id($app, $id); - - if ($entry->get_publisher()->get_user()->get_id() !== $user->get_id()) { - throw new \Exception_UnauthorizedAction(); + $current_feed_id = $entry->get_feed()->get_id(); + $new_feed_id = $request->request->get('feed_id', $current_feed_id); + if ($current_feed_id != $new_feed_id) { + try { + $new_feed = \Feed_Adapter::load_with_user($app, $user, $new_feed_id); + } catch (\Exception_NotFound $e) { + throw new \Exception_Forbidden('You have no access to this feed'); } - $title = $request->request->get('title'); - $subtitle = $request->request->get('subtitle'); - $author_name = $request->request->get('author_name'); - $author_mail = $request->request->get('author_mail'); - - $entry->set_author_email($author_mail) - ->set_author_name($author_name) - ->set_title($title) - ->set_subtitle($subtitle); - - $current_feed_id = $entry->get_feed()->get_id(); - $new_feed_id = $request->request->get('feed_id', $current_feed_id); - if ($current_feed_id != $new_feed_id) { - try { - $new_feed = \Feed_Adapter::load_with_user($app, $user, $new_feed_id); - } catch (\Exception_NotFound $e) { - throw new \Exception_Forbidden('You have no access to this feed'); - } - - if ( ! $new_feed->is_publisher($user)) { - throw new \Exception_Forbidden('You are not publisher of this feed'); - } - - $entry->set_feed($new_feed); + if (!$new_feed->is_publisher($user)) { + throw new \Exception_Forbidden('You are not publisher of this feed'); } - $items = explode(';', $request->request->get('sorted_lst')); - - foreach ($items as $item_sort) { - $item_sort_datas = explode('_', $item_sort); - if (count($item_sort_datas) != 2) { - continue; - } - - $item = new \Feed_Entry_Item($app['phraseanet.appbox'], $entry, $item_sort_datas[0]); - - $item->set_ord($item_sort_datas[1]); - } - $app['phraseanet.appbox']->get_connection()->commit(); - - $entry = $app['twig']->render('prod/feeds/entry.html.twig', array('entry' => $entry)); - - $datas = array('error' => false, 'message' => 'succes', 'datas' => $entry); - } catch (\Exception_Feed_EntryNotFound $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = _('Feed entry not found'); - } catch (\Exception_NotFound $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = _('Feed not found'); - } catch (\Exception_Forbidden $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = _('You are not authorized to access this feed'); - } catch (\Exception $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = $e->getMessage(); + $entry->set_feed($new_feed); } - return $app->json($datas); - })->assert('id', '\d+'); + $items = explode(';', $request->request->get('sorted_lst')); + + foreach ($items as $item_sort) { + $item_sort_datas = explode('_', $item_sort); + if (count($item_sort_datas) != 2) { + continue; + } + + $item = new \Feed_Entry_Item($app['phraseanet.appbox'], $entry, $item_sort_datas[0]); + + $item->set_ord($item_sort_datas[1]); + } + $app['phraseanet.appbox']->get_connection()->commit(); + + $entry = $app['twig']->render('prod/feeds/entry.html.twig', array('entry' => $entry)); + + $datas = array('error' => false, 'message' => 'succes', 'datas' => $entry); + } catch (\Exception_Feed_EntryNotFound $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = _('Feed entry not found'); + } catch (\Exception_NotFound $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = _('Feed not found'); + } catch (\Exception_Forbidden $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = _('You are not authorized to access this feed'); + } catch (\Exception $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = $e->getMessage(); + } + + return $app->json($datas); + })->assert('id', '\d+'); $controllers->post('/entry/{id}/delete/', function(Application $app, Request $request, $id) { - $datas = array('error' => true, 'message' => ''); - try { - $app['phraseanet.appbox']->get_connection()->beginTransaction(); + $datas = array('error' => true, 'message' => ''); + try { + $app['phraseanet.appbox']->get_connection()->beginTransaction(); - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $entry = \Feed_Entry_Adapter::load_from_id($app, $id); + $entry = \Feed_Entry_Adapter::load_from_id($app, $id); - if ($entry->get_publisher()->get_user()->get_id() !== $user->get_id() - && $entry->get_feed()->is_owner($user) === false) { - throw new \Exception_UnauthorizedAction(_('Action Forbidden : You are not the publisher')); - } - - $entry->delete(); - - $app['phraseanet.appbox']->get_connection()->commit(); - $datas = array('error' => false, 'message' => 'succes'); - } catch (\Exception_Feed_EntryNotFound $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = _('Feed entry not found'); - } catch (\Exception $e) { - $app['phraseanet.appbox']->get_connection()->rollBack(); - $datas['message'] = $e->getMessage(); + if ($entry->get_publisher()->get_user()->get_id() !== $user->get_id() + && $entry->get_feed()->is_owner($user) === false) { + throw new \Exception_UnauthorizedAction(_('Action Forbidden : You are not the publisher')); } - return $app->json($datas); - })->assert('id', '\d+'); + $entry->delete(); + + $app['phraseanet.appbox']->get_connection()->commit(); + $datas = array('error' => false, 'message' => 'succes'); + } catch (\Exception_Feed_EntryNotFound $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = _('Feed entry not found'); + } catch (\Exception $e) { + $app['phraseanet.appbox']->get_connection()->rollBack(); + $datas['message'] = $e->getMessage(); + } + + return $app->json($datas); + })->assert('id', '\d+'); $controllers->get('/', function(Application $app, Request $request) { - $request = $app['request']; - $page = (int) $request->query->get('page'); - $page = $page > 0 ? $page : 1; + $request = $app['request']; + $page = (int) $request->query->get('page'); + $page = $page > 0 ? $page : 1; - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $feeds = \Feed_Collection::load_all($app, $user); + $feeds = \Feed_Collection::load_all($app, $user); - $datas = $app['twig']->render('prod/feeds/feeds.html.twig' - , array( - 'feeds' => $feeds - , 'feed' => $feeds->get_aggregate() - , 'page' => $page - ) - ); + $datas = $app['twig']->render('prod/feeds/feeds.html.twig' + , array( + 'feeds' => $feeds + , 'feed' => $feeds->get_aggregate() + , 'page' => $page + ) + ); - return new Response($datas); - }); + return new Response($datas); + }); $controllers->get('/feed/{id}/', function(Application $app, Request $request, $id) { - $page = (int) $request->query->get('page'); - $page = $page > 0 ? $page : 1; + $page = (int) $request->query->get('page'); + $page = $page > 0 ? $page : 1; - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $feed = \Feed_Adapter::load_with_user($app, $user, $id); - $feeds = \Feed_Collection::load_all($app, $user); + $feed = \Feed_Adapter::load_with_user($app, $user, $id); + $feeds = \Feed_Collection::load_all($app, $user); - $datas = $app['twig']->render('prod/feeds/feeds.html.twig', array('feed' => $feed, 'feeds' => $feeds, 'page' => $page)); + $datas = $app['twig']->render('prod/feeds/feeds.html.twig', array('feed' => $feed, 'feeds' => $feeds, 'page' => $page)); - return new Response($datas); - })->assert('id', '\d+'); + return new Response($datas); + })->assert('id', '\d+'); $controllers->get('/subscribe/aggregated/', function(Application $app, Request $request) { - $renew = ($request->query->get('renew') === 'true'); + $renew = ($request->query->get('renew') === 'true'); - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $feeds = \Feed_Collection::load_all($app, $user); - $registry = $app['phraseanet.appbox']->get_registry(); + $feeds = \Feed_Collection::load_all($app, $user); + $registry = $app['phraseanet.appbox']->get_registry(); - $output = array( - 'texte' => '
' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') - . '
' . _('publications::Ne le partagez pas, il est strictement confidentiel') . '
- ', - 'titre' => _('publications::votre rss personnel') - ); + $output = array( + 'texte' => '' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') + . '
' . _('publications::Ne le partagez pas, il est strictement confidentiel') . '
+ ', + 'titre' => _('publications::votre rss personnel') + ); - return $app->json($output); - }); + return $app->json($output); + }); $controllers->get('/subscribe/{id}/', function(Application $app, Request $request, $id) { - $renew = ($request->query->get('renew') === 'true'); - $user = $app['phraseanet.user']; - $feed = \Feed_Adapter::load_with_user($app, $user, $id); - $registry = $app['phraseanet.appbox']->get_registry(); + $renew = ($request->query->get('renew') === 'true'); + $user = $app['phraseanet.user']; + $feed = \Feed_Adapter::load_with_user($app, $user, $id); + $registry = $app['phraseanet.appbox']->get_registry(); - $output = array( - 'texte' => '' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') - . '
' . _('publications::Ne le partagez pas, il est strictement confidentiel') . '
- ', - 'titre' => _('publications::votre rss personnel') - ); + $output = array( + 'texte' => '' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') + . '
' . _('publications::Ne le partagez pas, il est strictement confidentiel') . '
+ ', + 'titre' => _('publications::votre rss personnel') + ); - return $app->json($output); - })->assert('id', '\d+'); + return $app->json($output); + })->assert('id', '\d+'); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Language.php b/lib/Alchemy/Phrasea/Controller/Prod/Language.php index c0b7c980f2..d4d093b2b1 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Language.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Language.php @@ -27,84 +27,84 @@ class Language implements ControllerProviderInterface $controller = $app['controllers_factory']; $controller->get("/", function(Application $app) { - $registry = $app['phraseanet.registry']; + $registry = $app['phraseanet.registry']; - $out = array(); - $out['thesaurusBasesChanged'] = _('prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee.'); - $out['confirmDel'] = _('paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ?'); - $out['serverError'] = _('phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique'); - $out['serverName'] = $registry->get('GV_ServerName'); - $out['serverTimeout'] = _('phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible'); - $out['serverDisconnected'] = _('phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier'); - $out['hideMessage'] = _('phraseanet::Ne plus afficher ce message'); - $out['confirmGroup'] = _('Supprimer egalement les documents rattaches a ces regroupements'); - $out['confirmDelete'] = _('reponses:: Ces enregistrements vont etre definitivement supprimes et ne pourront etre recuperes. Etes vous sur ?'); - $out['cancel'] = _('boutton::annuler'); - $out['deleteTitle'] = _('boutton::supprimer'); - $out['edit_hetero'] = _('prod::editing valeurs heterogenes, choisir \'remplacer\', \'ajouter\' ou \'annuler\''); - $out['confirm_abandon'] = _('prod::editing::annulation: abandonner les modification ?'); - $out['loading'] = _('phraseanet::chargement'); - $out['valider'] = _('boutton::valider'); - $out['annuler'] = _('boutton::annuler'); - $out['create'] = _('boutton::creer'); - $out['rechercher'] = _('boutton::rechercher'); - $out['renewRss'] = _('boutton::renouveller'); - $out['candeletesome'] = _('Vous n\'avez pas les droits pour supprimer certains documents'); - $out['candeletedocuments'] = _('Vous n\'avez pas les droits pour supprimer ces documents'); - $out['needTitle'] = _('Vous devez donner un titre'); - $out['newPreset'] = _('Nouveau modele'); - $out['fermer'] = _('boutton::fermer'); - $out['feed_require_fields'] = _('Vous n\'avez pas rempli tous les champ requis'); - $out['feed_require_feed'] = _('Vous n\'avez pas selectionne de fil de publication'); - $out['removeTitle'] = _('panier::Supression d\'un element d\'un reportage'); - $out['confirmRemoveReg'] = _('panier::Attention, vous etes sur le point de supprimer un element du reportage. Merci de confirmer votre action.'); - $out['advsearch_title'] = _('phraseanet::recherche avancee'); - $out['bask_rename'] = _('panier:: renommer le panier'); - $out['reg_wrong_sbas'] = _('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre'); - $out['error'] = _('phraseanet:: Erreur'); - $out['warningDenyCgus'] = _('cgus :: Attention, si vous refuser les CGUs de cette base, vous n\'y aures plus acces'); - $out['cgusRelog'] = _('cgus :: Vous devez vous reauthentifier pour que vos parametres soient pris en compte.'); - $out['editDelMulti'] = _('edit:: Supprimer %s du champ dans les records selectionnes'); - $out['editAddMulti'] = _('edit:: Ajouter %s au champ courrant pour les records selectionnes'); - $out['editDelSimple'] = _('edit:: Supprimer %s du champ courrant'); - $out['editAddSimple'] = _('edit:: Ajouter %s au champ courrant'); - $out['cantDeletePublicOne'] = _('panier:: vous ne pouvez pas supprimer un panier public'); - $out['wrongsbas'] = _('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre'); - $out['max_record_selected'] = _('Vous ne pouvez pas selectionner plus de 800 enregistrements'); - $out['confirmRedirectAuth'] = _('invite:: Redirection vers la zone d\'authentification, cliquez sur OK pour continuer ou annulez'); - $out['error_test_publi'] = _('Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas'); - $out['test_publi_ok'] = _('Les parametres sont corrects, le serveur distant est operationnel'); - $out['some_not_published'] = _('Certaines publications n\'ont pu etre effectuees, verifiez vos parametres'); - $out['error_not_published'] = _('Aucune publication effectuee, verifiez vos parametres'); - $out['warning_delete_publi'] = _('Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci'); - $out['some_required_fields'] = _('edit::certains documents possedent des champs requis non remplis. Merci de les remplir pour valider votre editing'); - $out['nodocselected'] = _('Aucun document selectionne'); - $out['sureToRemoveList'] = _('Are you sure you want to delete this list ?'); - $out['newListName'] = _('New list name ?'); - $out['listNameCannotBeEmpty'] = _('List name can not be empty'); - $out['FeedBackName'] = _('Name'); - $out['FeedBackMessage'] = _('Message'); - $out['FeedBackDuration'] = _('Time for feedback (days)'); - $out['send'] = _('Send'); - $out['Recept'] = _('Accuse de reception'); - $out['nFieldsChanged'] = _('%d fields have been updated'); - $out['FeedBackNoUsersSelected'] = _('No users selected'); - $out['errorFileApi'] = _('An error occurred reading this file'); - $out['errorFileApiTooBig'] = _('This file is too big'); - $out['selectOneRecord'] = _('Please select one record'); - $out['onlyOneRecord'] = _('You can choose only one record'); - $out['errorAjaxRequest'] = _('An error occured, please retry'); - $out['fileBeingDownloaded'] = _('Some files are being downloaded'); - $out['warning'] = _('Attention'); - $out['browserFeatureSupport'] = _('This feature is not supported by your browser'); - $out['noActiveBasket'] = _('No active basket'); - $out['pushUserCanDownload'] = _('User can download HD'); - $out['feedbackCanContribute'] = _('User contribute to the feedback'); - $out['feedbackCanSeeOthers'] = _('User can see others choices'); - $out['forceSendDocument'] = _('Force sending of the document ?'); + $out = array(); + $out['thesaurusBasesChanged'] = _('prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee.'); + $out['confirmDel'] = _('paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ?'); + $out['serverError'] = _('phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique'); + $out['serverName'] = $registry->get('GV_ServerName'); + $out['serverTimeout'] = _('phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible'); + $out['serverDisconnected'] = _('phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier'); + $out['hideMessage'] = _('phraseanet::Ne plus afficher ce message'); + $out['confirmGroup'] = _('Supprimer egalement les documents rattaches a ces regroupements'); + $out['confirmDelete'] = _('reponses:: Ces enregistrements vont etre definitivement supprimes et ne pourront etre recuperes. Etes vous sur ?'); + $out['cancel'] = _('boutton::annuler'); + $out['deleteTitle'] = _('boutton::supprimer'); + $out['edit_hetero'] = _('prod::editing valeurs heterogenes, choisir \'remplacer\', \'ajouter\' ou \'annuler\''); + $out['confirm_abandon'] = _('prod::editing::annulation: abandonner les modification ?'); + $out['loading'] = _('phraseanet::chargement'); + $out['valider'] = _('boutton::valider'); + $out['annuler'] = _('boutton::annuler'); + $out['create'] = _('boutton::creer'); + $out['rechercher'] = _('boutton::rechercher'); + $out['renewRss'] = _('boutton::renouveller'); + $out['candeletesome'] = _('Vous n\'avez pas les droits pour supprimer certains documents'); + $out['candeletedocuments'] = _('Vous n\'avez pas les droits pour supprimer ces documents'); + $out['needTitle'] = _('Vous devez donner un titre'); + $out['newPreset'] = _('Nouveau modele'); + $out['fermer'] = _('boutton::fermer'); + $out['feed_require_fields'] = _('Vous n\'avez pas rempli tous les champ requis'); + $out['feed_require_feed'] = _('Vous n\'avez pas selectionne de fil de publication'); + $out['removeTitle'] = _('panier::Supression d\'un element d\'un reportage'); + $out['confirmRemoveReg'] = _('panier::Attention, vous etes sur le point de supprimer un element du reportage. Merci de confirmer votre action.'); + $out['advsearch_title'] = _('phraseanet::recherche avancee'); + $out['bask_rename'] = _('panier:: renommer le panier'); + $out['reg_wrong_sbas'] = _('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre'); + $out['error'] = _('phraseanet:: Erreur'); + $out['warningDenyCgus'] = _('cgus :: Attention, si vous refuser les CGUs de cette base, vous n\'y aures plus acces'); + $out['cgusRelog'] = _('cgus :: Vous devez vous reauthentifier pour que vos parametres soient pris en compte.'); + $out['editDelMulti'] = _('edit:: Supprimer %s du champ dans les records selectionnes'); + $out['editAddMulti'] = _('edit:: Ajouter %s au champ courrant pour les records selectionnes'); + $out['editDelSimple'] = _('edit:: Supprimer %s du champ courrant'); + $out['editAddSimple'] = _('edit:: Ajouter %s au champ courrant'); + $out['cantDeletePublicOne'] = _('panier:: vous ne pouvez pas supprimer un panier public'); + $out['wrongsbas'] = _('panier:: Un reportage ne peux recevoir que des elements provenants de la base ou il est enregistre'); + $out['max_record_selected'] = _('Vous ne pouvez pas selectionner plus de 800 enregistrements'); + $out['confirmRedirectAuth'] = _('invite:: Redirection vers la zone d\'authentification, cliquez sur OK pour continuer ou annulez'); + $out['error_test_publi'] = _('Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas'); + $out['test_publi_ok'] = _('Les parametres sont corrects, le serveur distant est operationnel'); + $out['some_not_published'] = _('Certaines publications n\'ont pu etre effectuees, verifiez vos parametres'); + $out['error_not_published'] = _('Aucune publication effectuee, verifiez vos parametres'); + $out['warning_delete_publi'] = _('Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci'); + $out['some_required_fields'] = _('edit::certains documents possedent des champs requis non remplis. Merci de les remplir pour valider votre editing'); + $out['nodocselected'] = _('Aucun document selectionne'); + $out['sureToRemoveList'] = _('Are you sure you want to delete this list ?'); + $out['newListName'] = _('New list name ?'); + $out['listNameCannotBeEmpty'] = _('List name can not be empty'); + $out['FeedBackName'] = _('Name'); + $out['FeedBackMessage'] = _('Message'); + $out['FeedBackDuration'] = _('Time for feedback (days)'); + $out['send'] = _('Send'); + $out['Recept'] = _('Accuse de reception'); + $out['nFieldsChanged'] = _('%d fields have been updated'); + $out['FeedBackNoUsersSelected'] = _('No users selected'); + $out['errorFileApi'] = _('An error occurred reading this file'); + $out['errorFileApiTooBig'] = _('This file is too big'); + $out['selectOneRecord'] = _('Please select one record'); + $out['onlyOneRecord'] = _('You can choose only one record'); + $out['errorAjaxRequest'] = _('An error occured, please retry'); + $out['fileBeingDownloaded'] = _('Some files are being downloaded'); + $out['warning'] = _('Attention'); + $out['browserFeatureSupport'] = _('This feature is not supported by your browser'); + $out['noActiveBasket'] = _('No active basket'); + $out['pushUserCanDownload'] = _('User can download HD'); + $out['feedbackCanContribute'] = _('User contribute to the feedback'); + $out['feedbackCanSeeOthers'] = _('User can see others choices'); + $out['forceSendDocument'] = _('Force sending of the document ?'); - return $app->json($out); - }); + return $app->json($out); + }); return $controller; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Lazaret.php b/lib/Alchemy/Phrasea/Controller/Prod/Lazaret.php index 0e2c10dd78..485a13bd75 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Lazaret.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Lazaret.php @@ -183,11 +183,9 @@ class Lazaret implements ControllerProviderInterface ); } - $html = $app['twig']->render( + return $app['twig']->render( 'prod/upload/lazaret.html.twig', array('lazaretFiles' => $lazaretFiles) ); - - return new Response($html); } /** @@ -242,7 +240,7 @@ class Lazaret implements ControllerProviderInterface $ret = array('success' => false, 'message' => '', 'result' => array()); //Optional parameter - $keepAttributes = ! ! $request->request->get('keep_attributes', false); + $keepAttributes = !!$request->request->get('keep_attributes', false); $attributesToKeep = $request->request->get('attributes', array()); //Mandatory parameter @@ -288,8 +286,8 @@ class Lazaret implements ControllerProviderInterface foreach ($lazaretFile->getAttributes() as $attr) { //Check which ones to keep - if ( ! ! count($attributesToKeep)) { - if ( ! in_array($attr->getId(), $attributesToKeep)) { + if (!!count($attributesToKeep)) { + if (!in_array($attr->getId(), $attributesToKeep)) { continue; } } @@ -460,7 +458,7 @@ class Lazaret implements ControllerProviderInterface break; } - if ( ! $found) { + if (!$found) { $ret['message'] = _('The destination record provided is not allowed'); return $app->json($ret); @@ -514,11 +512,9 @@ class Lazaret implements ControllerProviderInterface $lazaretThumbFileName = $app['phraseanet.registry']->get('GV_RootPath') . 'tmp/lazaret/' . $lazaretFile->getThumbFilename(); - $response = \set_export::stream_file( + return \set_export::stream_file( $app['phraseanet.registry'], $lazaretThumbFileName, $lazaretFile->getOriginalName(), 'image/jpeg', 'inline' ); - - return $response; } /** diff --git a/lib/Alchemy/Phrasea/Controller/Prod/MoveCollection.php b/lib/Alchemy/Phrasea/Controller/Prod/MoveCollection.php index 0a476e9a84..11d33553b1 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/MoveCollection.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/MoveCollection.php @@ -71,7 +71,7 @@ class MoveCollection implements ControllerProviderInterface return $app->json($datas); } - if ( ! $user->ACL()->has_right_on_base($request->request->get('base_id'), 'canaddrecord')) { + if (!$user->ACL()->has_right_on_base($request->request->get('base_id'), 'canaddrecord')) { $datas['message'] = sprintf(_("You do not have the permission to move records to %s"), \phrasea::bas_names($move->getBaseIdDestination(), $app)); return $app->json($datas); } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/MustacheLoader.php b/lib/Alchemy/Phrasea/Controller/Prod/MustacheLoader.php index 8acf98262f..1cb3ab5e77 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/MustacheLoader.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/MustacheLoader.php @@ -28,20 +28,20 @@ class MustacheLoader implements ControllerProviderInterface $controllers = $app['controllers_factory']; $controllers->get('/', function(Application $app, Request $request) { - $template_name = $request->query->get('template'); + $template_name = $request->query->get('template'); - if ( ! preg_match('/^[a-zA-Z0-9-_]+$/', $template_name)) { - throw new \Exception_BadRequest('Wrong template name : ' . $template_name); - } + if (!preg_match('/^[a-zA-Z0-9-_]+$/', $template_name)) { + throw new \Exception_BadRequest('Wrong template name : ' . $template_name); + } - $template_path = realpath(__DIR__ . '/../../../../../templates/web/Mustache/Prod/' . $template_name . '.Mustache.html'); + $template_path = realpath(__DIR__ . '/../../../../../templates/web/Mustache/Prod/' . $template_name . '.Mustache.html'); - if ( ! file_exists($template_path)) { - throw new \Exception_NotFound('Template does not exists : ' . $template_path); - } + if (!file_exists($template_path)) { + throw new \Exception_NotFound('Template does not exists : ' . $template_path); + } - return new \Symfony\Component\HttpFoundation\Response(file_get_contents($template_path)); - }); + return new \Symfony\Component\HttpFoundation\Response(file_get_contents($template_path)); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Order.php b/lib/Alchemy/Phrasea/Controller/Prod/Order.php index 1f96bafff0..a07c817632 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Order.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Order.php @@ -153,24 +153,24 @@ class Order implements ControllerProviderInterface foreach ($records as $key => $record) { if ($collectionHasOrderAdmins->containsKey($record->get_base_id())) { - if ( ! $collectionHasOrderAdmins->get($record->get_base_id())) { + if (!$collectionHasOrderAdmins->get($record->get_base_id())) { $records->remove($key); } } - $hasOneAdmin = ! ! count($query->on_base_ids(array($record->get_base_id())) + $hasOneAdmin = !!count($query->on_base_ids(array($record->get_base_id())) ->who_have_right(array('order_master')) ->execute()->get_results()); $collectionHasOrderAdmins->set($record->get_base_id(), $hasOneAdmin); - if ( ! $hasOneAdmin) { + if (!$hasOneAdmin) { $toRemove[] = $key; } } foreach ($toRemove as $key) { - if($records->containsKey($key)) { + if ($records->containsKey($key)) { $records->remove($key); } } @@ -200,15 +200,15 @@ class Order implements ControllerProviderInterface if ('json' === $app['request']->getRequestFormat()) { return $app->json(array( - 'success' => $success, - 'msg' => $msg, - )); + 'success' => $success, + 'msg' => $msg, + )); } return $app->redirect($app['url_generator']->generate('prod_orders', array( - 'success' => (int) $success, - 'action' => 'send' - ))); + 'success' => (int) $success, + 'action' => 'send' + ))); } /** @@ -232,13 +232,13 @@ class Order implements ControllerProviderInterface $total = \set_order::countTotalOrder($app['phraseanet.appbox'], $baseIds); return $app['twig']->render('prod/orders/order_box.html.twig', array( - 'page' => $page, - 'perPage' => $perPage, - 'total' => $total, - 'previousPage' => $page < 2 ? false : ($page - 1), - 'nextPage' => $page >= ceil($total / $perPage) ? false : $page + 1, - 'orders' => new ArrayCollection($ordersList) - )); + 'page' => $page, + 'perPage' => $perPage, + 'total' => $total, + 'previousPage' => $page < 2 ? false : ($page - 1), + 'nextPage' => $page >= ceil($total / $perPage) ? false : $page + 1, + 'orders' => new ArrayCollection($ordersList) + )); } /** @@ -258,8 +258,8 @@ class Order implements ControllerProviderInterface } return $app['twig']->render('prod/orders/order_item.html.twig', array( - 'order' => $order - )); + 'order' => $order + )); } /** @@ -281,7 +281,7 @@ class Order implements ControllerProviderInterface } try { - $order->send_elements($app, $request->request->get('elements', array()), ! ! $request->request->get('force', false)); + $order->send_elements($app, $request->request->get('elements', array()), !!$request->request->get('force', false)); $success = true; } catch (\Exception $e) { @@ -290,16 +290,16 @@ class Order implements ControllerProviderInterface if ('json' === $app['request']->getRequestFormat()) { return $app->json(array( - 'success' => $success, - 'msg' => $success ? _('Order has been sent') : _('An error occured while sending, please retry or contact an admin if problem persists'), - 'order_id' => $order_id - )); + 'success' => $success, + 'msg' => $success ? _('Order has been sent') : _('An error occured while sending, please retry or contact an admin if problem persists'), + 'order_id' => $order_id + )); } return $app->redirect($app['url_generator']->generate('prod_orders', array( - 'success' => (int) $success, - 'action' => 'send' - ))); + 'success' => (int) $success, + 'action' => 'send' + ))); } /** @@ -330,16 +330,16 @@ class Order implements ControllerProviderInterface if ('json' === $app['request']->getRequestFormat()) { return $app->json(array( - 'success' => $success, - 'msg' => $success ? _('Order has been denied') : _('An error occured while denying, please retry or contact an admin if problem persists'), - 'order_id' => $order_id - )); + 'success' => $success, + 'msg' => $success ? _('Order has been denied') : _('An error occured while denying, please retry or contact an admin if problem persists'), + 'order_id' => $order_id + )); } return $app->redirect($app['url_generator']->generate('prod_orders', array( - 'success' => (int) $success, - 'action' => 'send' - ))); + 'success' => (int) $success, + 'action' => 'send' + ))); } /** diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Printer.php b/lib/Alchemy/Phrasea/Controller/Prod/Printer.php index 8d019bd662..d3d2864cca 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Printer.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Printer.php @@ -37,34 +37,33 @@ class Printer implements ControllerProviderInterface ); $controllers->post('/print.pdf', function(Application $app) { - $printer = new RecordHelper\Printer($app, $app['request']); + $printer = new RecordHelper\Printer($app, $app['request']); - $request = $app['request']; + $request = $app['request']; - $layout = $request->request->get('lay'); + $layout = $request->request->get('lay'); - foreach ($printer->get_elements() as $record) { - $app['phraseanet.logger']($record->get_databox()) - ->log($record, \Session_Logger::EVENT_PRINT, $layout, ''); - } - $PDF = new PDFExport($app, $printer->get_elements(), $layout); - - /** - * - * Header "Pragma: public" SHOULD be present. - * In case it is not present, download on IE 8 and previous over HTTPS - * will fail. - * - * @todo : merge this shitty fix with Response object. - * - */ - if ( ! headers_sent()) { - header("Pragma: public"); - } - - return new Response($PDF->render(), 200, array('Content-Type' => 'application/pdf')); + foreach ($printer->get_elements() as $record) { + $app['phraseanet.logger']($record->get_databox()) + ->log($record, \Session_Logger::EVENT_PRINT, $layout, ''); } - ); + $PDF = new PDFExport($app, $printer->get_elements(), $layout); + + /** + * + * Header "Pragma: public" SHOULD be present. + * In case it is not present, download on IE 8 and previous over HTTPS + * will fail. + * + * @todo : merge this shitty fix with Response object. + * + */ + if (!headers_sent()) { + header("Pragma: public"); + } + + return new Response($PDF->render(), 200, array('Content-Type' => 'application/pdf')); + }); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Push.php b/lib/Alchemy/Phrasea/Controller/Prod/Push.php index b2ceef538f..512e9db176 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Push.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Push.php @@ -29,15 +29,15 @@ class Push implements ControllerProviderInterface protected function getUserFormatter() { return function(\User_Adapter $user) { - return array( - 'type' => 'USER' - , 'usr_id' => $user->get_id() - , 'firstname' => $user->get_firstname() - , 'lastname' => $user->get_lastname() - , 'email' => $user->get_email() - , 'display_name' => $user->get_display_name() - ); - }; + return array( + 'type' => 'USER' + , 'usr_id' => $user->get_id() + , 'firstname' => $user->get_firstname() + , 'lastname' => $user->get_lastname() + , 'email' => $user->get_email() + , 'display_name' => $user->get_display_name() + ); + }; } protected function getListFormatter() @@ -45,50 +45,50 @@ class Push implements ControllerProviderInterface $userFormatter = $this->getUserFormatter(); return function(\Entities\UsrList $List) use ($userFormatter) { - $entries = array(); + $entries = array(); - foreach ($List->getEntries() as $entry) { - /* @var $entry \Entities\UsrListEntry */ - $entries[] = array( - 'Id' => $entry->getId(), - 'User' => $userFormatter($entry->getUser($app)) - ); - } - - return array( - 'type' => 'LIST' - , 'list_id' => $List->getId() - , 'name' => $List->getName() - , 'length' => count($entries) - , 'entries' => $entries + foreach ($List->getEntries() as $entry) { + /* @var $entry \Entities\UsrListEntry */ + $entries[] = array( + 'Id' => $entry->getId(), + 'User' => $userFormatter($entry->getUser($app)) ); - }; + } + + return array( + 'type' => 'LIST' + , 'list_id' => $List->getId() + , 'name' => $List->getName() + , 'length' => count($entries) + , 'entries' => $entries + ); + }; } protected function getUsersInSelectionExtractor() { return function(array $selection) { - $Users = new \Doctrine\Common\Collections\ArrayCollection(); + $Users = new \Doctrine\Common\Collections\ArrayCollection(); - foreach ($selection as $record) { - /* @var $record record_adapter */ - foreach ($record->get_caption()->get_fields() as $caption_field) { - foreach ($caption_field->get_values() as $value) { - if (!$value->getVocabularyType()) - continue; + foreach ($selection as $record) { + /* @var $record record_adapter */ + foreach ($record->get_caption()->get_fields() as $caption_field) { + foreach ($caption_field->get_values() as $value) { + if (!$value->getVocabularyType()) + continue; - if ($value->getVocabularyType()->getType() !== 'User') - continue; + if ($value->getVocabularyType()->getType() !== 'User') + continue; - $user = $value->getRessource(); + $user = $value->getRessource(); - $Users->set($user->get_id(), $user); - } + $Users->set($user->get_id(), $user); } } + } - return $Users; - }; + return $Users; + }; } public function connect(Application $app) @@ -102,591 +102,584 @@ class Push implements ControllerProviderInterface $userSelection = $this->getUsersInSelectionExtractor(); $controllers->post('/sendform/', function(Application $app) use ($userSelection) { - $push = new RecordHelper\Push($app, $app['request']); + $push = new RecordHelper\Push($app, $app['request']); - $repository = $app['EM']->getRepository('\Entities\UsrList'); + $repository = $app['EM']->getRepository('\Entities\UsrList'); - $RecommendedUsers = $userSelection($push->get_elements()); + $RecommendedUsers = $userSelection($push->get_elements()); - $params = array( - 'push' => $push, - 'message' => '', - 'lists' => $repository->findUserLists($app['phraseanet.user']), - 'context' => 'Push', - 'RecommendedUsers' => $RecommendedUsers - ); + $params = array( + 'push' => $push, + 'message' => '', + 'lists' => $repository->findUserLists($app['phraseanet.user']), + 'context' => 'Push', + 'RecommendedUsers' => $RecommendedUsers + ); - return new Response($app['twig']->render('prod/actions/Push.html.twig', $params)); - } - ); + return $app['twig']->render('prod/actions/Push.html.twig', $params); + }); $controllers->post('/validateform/', function(Application $app) use ($userSelection) { - $push = new RecordHelper\Push($app, $app['request']); + $push = new RecordHelper\Push($app, $app['request']); - $repository = $app['EM']->getRepository('\Entities\UsrList'); + $repository = $app['EM']->getRepository('\Entities\UsrList'); - $RecommendedUsers = $userSelection($push->get_elements()); + $RecommendedUsers = $userSelection($push->get_elements()); - $params = array( - 'push' => $push, - 'message' => '', - 'lists' => $repository->findUserLists($app['phraseanet.user']), - 'context' => 'Feedback', - 'RecommendedUsers' => $RecommendedUsers - ); + $params = array( + 'push' => $push, + 'message' => '', + 'lists' => $repository->findUserLists($app['phraseanet.user']), + 'context' => 'Feedback', + 'RecommendedUsers' => $RecommendedUsers + ); - return new Response($app['twig']->render('prod/actions/Push.html.twig', $params)); - } - ); + return $app['twig']->render('prod/actions/Push.html.twig', $params); + }); $controllers->post('/send/', function(Application $app) { - $request = $app['request']; + $request = $app['request']; - $ret = array( - 'success' => false, - 'message' => _('Unable to send the documents') - ); - - try { - $registry = $app['phraseanet.registry']; - - $pusher = new RecordHelper\Push($app, $app['request']); - - $user = $app['phraseanet.user']; - - $appbox = $app['phraseanet.appbox']; - - $push_name = $request->request->get('name'); - - if (trim($push_name) === '') { - $push_name = sprintf(_('Push from %s'), $user->get_display_name()); - } - - $push_description = $request->request->get('push_description'); - - $receivers = $request->request->get('participants'); - - if (!is_array($receivers) || count($receivers) === 0) { - throw new ControllerException(_('No receivers specified')); - } - - if (!is_array($pusher->get_elements()) || count($pusher->get_elements()) === 0) { - throw new ControllerException(_('No elements to push')); - } - - $events_manager = $app['events-manager']; - - foreach ($receivers as $receiver) { - try { - $user_receiver = \User_Adapter::getInstance($receiver['usr_id'], $app); - } catch (\Exception $e) { - throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); - } - - $Basket = new \Entities\Basket(); - $Basket->setName($push_name); - $Basket->setDescription($push_description); - $Basket->setOwner($user_receiver); - $Basket->setPusher($user); - $Basket->setIsRead(false); - - $app['EM']->persist($Basket); - - foreach ($pusher->get_elements() as $element) { - $BasketElement = new \Entities\BasketElement(); - $BasketElement->setRecord($element); - $BasketElement->setBasket($Basket); - - $app['EM']->persist($BasketElement); - - $Basket->addBasketElement($BasketElement); - - if ($receiver['HD']) { - $user_receiver->ACL()->grant_hd_on( - $BasketElement->getRecord($app) - , $user - , \ACL::GRANT_ACTION_PUSH - ); - } else { - $user_receiver->ACL()->grant_preview_on( - $BasketElement->getRecord($app) - , $user - , \ACL::GRANT_ACTION_PUSH - ); - } - } - - $app['EM']->flush(); - - $url = $registry->get('GV_ServerName') - . 'lightbox/index.php?LOG=' - . \random::getUrlToken($app, \random::TYPE_VIEW, $user_receiver->get_id(), null, $Basket->getId()); - - $params = array( - 'from' => $user->get_id() - , 'from_email' => $user->get_email() - , 'to' => $user_receiver->get_id() - , 'to_email' => $user_receiver->get_email() - , 'to_name' => $user_receiver->get_display_name() - , 'url' => $url - , 'accuse' => !!$request->request->get('recept', false) - , 'message' => $request->request->get('message') - , 'ssel_id' => $Basket->getId() - ); - - $events_manager->trigger('__PUSH_DATAS__', $params); - } - - $app['phraseanet.logger']($BasketElement->getRecord($app)->get_databox()) - ->log($BasketElement->getRecord($app), \Session_Logger::EVENT_VALIDATE, $user_receiver->get_id(), ''); - - $app['EM']->flush(); - - $message = sprintf( - _('%1$d records have been sent to %2$d users') - , count($pusher->get_elements()) - , count($receivers) - ); - - $ret = array( - 'success' => true, - 'message' => $message - ); - } catch (ControllerException $e) { - $ret['message'] = $e->getMessage() . $e->getFile() . $e->getLine(); - } - - return $app->json($ret); - } - ); - - $controllers->post('/validate/', function(Application $app) { - $request = $app['request']; - $appbox = $app['phraseanet.appbox']; - - $ret = array( - 'success' => false, - 'message' => _('Unable to send the documents') - ); + $ret = array( + 'success' => false, + 'message' => _('Unable to send the documents') + ); + try { $registry = $app['phraseanet.registry']; - $app['EM']->beginTransaction(); + $pusher = new RecordHelper\Push($app, $app['request']); - try { - $pusher = new RecordHelper\Push($app, $app['request']); - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $events_manager = $app['events-manager']; + $appbox = $app['phraseanet.appbox']; - $repository = $app['EM']->getRepository('\Entities\Basket'); + $push_name = $request->request->get('name'); - $validation_name = $request->request->get('name'); + if (trim($push_name) === '') { + $push_name = sprintf(_('Push from %s'), $user->get_display_name()); + } - if (trim($validation_name) === '') { - $validation_name = sprintf(_('Validation from %s'), $user->get_display_name()); + $push_description = $request->request->get('push_description'); + + $receivers = $request->request->get('participants'); + + if (!is_array($receivers) || count($receivers) === 0) { + throw new ControllerException(_('No receivers specified')); + } + + if (!is_array($pusher->get_elements()) || count($pusher->get_elements()) === 0) { + throw new ControllerException(_('No elements to push')); + } + + $events_manager = $app['events-manager']; + + foreach ($receivers as $receiver) { + try { + $user_receiver = \User_Adapter::getInstance($receiver['usr_id'], $app); + } catch (\Exception $e) { + throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); } - $validation_description = $request->request->get('validation_description'); + $Basket = new \Entities\Basket(); + $Basket->setName($push_name); + $Basket->setDescription($push_description); + $Basket->setOwner($user_receiver); + $Basket->setPusher($user); + $Basket->setIsRead(false); - $participants = $request->request->get('participants'); + $app['EM']->persist($Basket); - if (!is_array($participants) || count($participants) === 0) { - throw new ControllerException(_('No participants specified')); - } + foreach ($pusher->get_elements() as $element) { + $BasketElement = new \Entities\BasketElement(); + $BasketElement->setRecord($element); + $BasketElement->setBasket($Basket); - if (!is_array($pusher->get_elements()) || count($pusher->get_elements()) === 0) { - throw new ControllerException(_('No elements to validate')); - } + $app['EM']->persist($BasketElement); - if ($pusher->is_basket()) { - $Basket = $pusher->get_original_basket(); - } else { - $Basket = new \Entities\Basket(); - $Basket->setName($validation_name); - $Basket->setDescription($validation_description); - $Basket->setOwner($user); - $Basket->setIsRead(false); + $Basket->addBasketElement($BasketElement); - $app['EM']->persist($Basket); - - foreach ($pusher->get_elements() as $element) { - $BasketElement = new \Entities\BasketElement(); - $BasketElement->setRecord($element); - $BasketElement->setBasket($Basket); - - $app['EM']->persist($BasketElement); - - $Basket->addBasketElement($BasketElement); - } - $app['EM']->flush(); - } - - $app['EM']->refresh($Basket); - - if (!$Basket->getValidation()) { - $Validation = new \Entities\ValidationSession(); - $Validation->setInitiator($app['phraseanet.user']); - $Validation->setBasket($Basket); - - $duration = (int) $request->request->get('duration'); - - if ($duration > 0) { - $date = new \DateTime('+' . $duration . ' day' . ($duration > 1 ? 's' : '')); - $Validation->setExpires($date); - } - - $Basket->setValidation($Validation); - $app['EM']->persist($Validation); - } else { - $Validation = $Basket->getValidation(); - } - - $appbox = $app['phraseanet.appbox']; - - $found = false; - foreach ($participants as $key => $participant) { - if ($participant['usr_id'] == $user->get_id()) { - $found = true; - break; + if ($receiver['HD']) { + $user_receiver->ACL()->grant_hd_on( + $BasketElement->getRecord($app) + , $user + , \ACL::GRANT_ACTION_PUSH + ); + } else { + $user_receiver->ACL()->grant_preview_on( + $BasketElement->getRecord($app) + , $user + , \ACL::GRANT_ACTION_PUSH + ); } } - if (!$found) { - $participants[$user->get_id()] = array( - 'see_others' => 1, - 'usr_id' => $user->get_id(), - 'agree' => 0, - 'HD' => 0 - ); - } - - foreach ($participants as $key => $participant) { - foreach (array('see_others', 'usr_id', 'agree', 'HD') as $mandatoryparam) { - if (!array_key_exists($mandatoryparam, $participant)) - throw new ControllerException(sprintf(_('Missing mandatory parameter %s'), $mandatoryparam)); - } - - try { - $participant_user = \User_Adapter::getInstance($participant['usr_id'], $app); - } catch (\Exception $e) { - throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); - } - - try { - $Participant = $Validation->getParticipant($participant_user, $app); - continue; - } catch (\Exception_NotFound $e) { - - } - - $Participant = new \Entities\ValidationParticipant(); - $Participant->setUser($participant_user); - $Participant->setSession($Validation); - - $Participant->setCanAgree($participant['agree']); - $Participant->setCanSeeOthers($participant['see_others']); - - $app['EM']->persist($Participant); - - foreach ($Basket->getElements() as $BasketElement) { - $ValidationData = new \Entities\ValidationData(); - $ValidationData->setParticipant($Participant); - $ValidationData->setBasketElement($BasketElement); - $BasketElement->addValidationData($ValidationData); - - if ($participant['HD']) { - $participant_user->ACL()->grant_hd_on( - $BasketElement->getRecord($app) - , $user - , \ACL::GRANT_ACTION_VALIDATE - ); - } else { - $participant_user->ACL()->grant_preview_on( - $BasketElement->getRecord($app) - , $user - , \ACL::GRANT_ACTION_VALIDATE - ); - } - - $app['EM']->merge($BasketElement); - $app['EM']->persist($ValidationData); - - $app['phraseanet.logger']($BasketElement->getRecord($app)->get_databox()) - ->log($BasketElement->getRecord($app), \Session_Logger::EVENT_PUSH, $participant_user->get_id(), ''); - - $Participant->addValidationData($ValidationData); - } - - $Participant = $app['EM']->merge($Participant); - - $app['EM']->flush(); - - $url = $registry->get('GV_ServerName') - . 'lightbox/index.php?LOG=' - . \random::getUrlToken($app, \random::TYPE_VIEW, $participant_user->get_id(), null, $Basket->getId()); - - $params = array( - 'from' => $user->get_id() - , 'from_email' => $user->get_email() - , 'to' => $participant_user->get_id() - , 'to_email' => $participant_user->get_email() - , 'to_name' => $participant_user->get_display_name() - , 'url' => $url - , 'accuse' => !!$request->request->get('recept', false) - , 'message' => $request->request->get('message') - , 'ssel_id' => $Basket->getId() - ); - - $events_manager->trigger('__PUSH_VALIDATION__', $params); - } - - $Basket = $app['EM']->merge($Basket); - $Validation = $app['EM']->merge($Validation); - $app['EM']->flush(); - $message = sprintf( - _('%1$d records have been sent for validation to %2$d users') - , count($pusher->get_elements()) - , count($request->request->get('participants')) + $url = $registry->get('GV_ServerName') + . 'lightbox/index.php?LOG=' + . \random::getUrlToken($app, \random::TYPE_VIEW, $user_receiver->get_id(), null, $Basket->getId()); + + $params = array( + 'from' => $user->get_id() + , 'from_email' => $user->get_email() + , 'to' => $user_receiver->get_id() + , 'to_email' => $user_receiver->get_email() + , 'to_name' => $user_receiver->get_display_name() + , 'url' => $url + , 'accuse' => !!$request->request->get('recept', false) + , 'message' => $request->request->get('message') + , 'ssel_id' => $Basket->getId() ); - $ret = array( - 'success' => true, - 'message' => $message - ); - - $app['EM']->commit(); - } catch (ControllerException $e) { - $ret['message'] = $e->getMessage(); - $app['EM']->rollback(); + $events_manager->trigger('__PUSH_DATAS__', $params); } - return $app->json($ret); + $app['phraseanet.logger']($BasketElement->getRecord($app)->get_databox()) + ->log($BasketElement->getRecord($app), \Session_Logger::EVENT_VALIDATE, $user_receiver->get_id(), ''); + + $app['EM']->flush(); + + $message = sprintf( + _('%1$d records have been sent to %2$d users') + , count($pusher->get_elements()) + , count($receivers) + ); + + $ret = array( + 'success' => true, + 'message' => $message + ); + } catch (ControllerException $e) { + $ret['message'] = $e->getMessage() . $e->getFile() . $e->getLine(); } - ); - $controllers->get('/user/{usr_id}/', function(Application $app, $usr_id) use ($userFormatter) { + return $app->json($ret); + }); - $datas = null; + $controllers->post('/validate/', function(Application $app) { + $request = $app['request']; + $appbox = $app['phraseanet.appbox']; - $request = $app['request']; + $ret = array( + 'success' => false, + 'message' => _('Unable to send the documents') + ); + + $registry = $app['phraseanet.registry']; + + $app['EM']->beginTransaction(); + + try { + $pusher = new RecordHelper\Push($app, $app['request']); $user = $app['phraseanet.user']; - $query = new \User_Query($app); + $events_manager = $app['events-manager']; - $query->on_bases_where_i_am($user->ACL(), array('canpush')); + $repository = $app['EM']->getRepository('\Entities\Basket'); - $query->in(array($usr_id)); + $validation_name = $request->request->get('name'); - $result = $query->include_phantoms() - ->limit(0, 1) - ->execute()->get_results(); + if (trim($validation_name) === '') { + $validation_name = sprintf(_('Validation from %s'), $user->get_display_name()); + } - if ($result) { - foreach ($result as $user) { - $datas = $userFormatter($user); + $validation_description = $request->request->get('validation_description'); + + $participants = $request->request->get('participants'); + + if (!is_array($participants) || count($participants) === 0) { + throw new ControllerException(_('No participants specified')); + } + + if (!is_array($pusher->get_elements()) || count($pusher->get_elements()) === 0) { + throw new ControllerException(_('No elements to validate')); + } + + if ($pusher->is_basket()) { + $Basket = $pusher->get_original_basket(); + } else { + $Basket = new \Entities\Basket(); + $Basket->setName($validation_name); + $Basket->setDescription($validation_description); + $Basket->setOwner($user); + $Basket->setIsRead(false); + + $app['EM']->persist($Basket); + + foreach ($pusher->get_elements() as $element) { + $BasketElement = new \Entities\BasketElement(); + $BasketElement->setRecord($element); + $BasketElement->setBasket($Basket); + + $app['EM']->persist($BasketElement); + + $Basket->addBasketElement($BasketElement); } + $app['EM']->flush(); } - return $app->json($datas); - })->assert('usr_id', '\d+'); + $app['EM']->refresh($Basket); - $controllers->get('/list/{list_id}/', function(Application $app, $list_id) use ($listFormatter) { - $datas = null; + if (!$Basket->getValidation()) { + $Validation = new \Entities\ValidationSession(); + $Validation->setInitiator($app['phraseanet.user']); + $Validation->setBasket($Basket); - $user = $app['phraseanet.user']; + $duration = (int) $request->request->get('duration'); - $repository = $app['EM']->getRepository('\Entities\UsrList'); + if ($duration > 0) { + $date = new \DateTime('+' . $duration . ' day' . ($duration > 1 ? 's' : '')); + $Validation->setExpires($date); + } - $list = $repository->findUserListByUserAndId($app, $user, $list_id); - - if ($list) { - $datas = $listFormatter($list); - } - - return $app->json($datas); - })->assert('list_id', '\d+'); - - $controllers->post('/add-user/', function(Application $app, Request $request) use ($userFormatter) { - $result = array('success' => false, 'message' => '', 'user' => null); - - $AdminUser = $app['phraseanet.user']; - - try { - /* @var $AdminUser \User_Adapter */ - if (!$AdminUser->ACL()->has_right('manageusers')) - throw new ControllerException(_('You are not allowed to add users')); - - if (!$request->request->get('firstname')) - throw new ControllerException(_('First name is required')); - - if (!$request->request->get('lastname')) - throw new ControllerException(_('Last name is required')); - - if (!$request->request->get('email')) - throw new ControllerException(_('Email is required')); - - if (!\mail::validateEmail($request->request->get('email'))) - throw new ControllerException(_('Email is invalid')); - } catch (ControllerException $e) { - $result['message'] = $e->getMessage(); - - return $app->json($result); + $Basket->setValidation($Validation); + $app['EM']->persist($Validation); + } else { + $Validation = $Basket->getValidation(); } $appbox = $app['phraseanet.appbox']; - $user = null; - $email = $request->request->get('email'); + $found = false; + foreach ($participants as $key => $participant) { + if ($participant['usr_id'] == $user->get_id()) { + $found = true; + break; + } + } + if (!$found) { + $participants[$user->get_id()] = array( + 'see_others' => 1, + 'usr_id' => $user->get_id(), + 'agree' => 0, + 'HD' => 0 + ); + } + + foreach ($participants as $key => $participant) { + foreach (array('see_others', 'usr_id', 'agree', 'HD') as $mandatoryparam) { + if (!array_key_exists($mandatoryparam, $participant)) + throw new ControllerException(sprintf(_('Missing mandatory parameter %s'), $mandatoryparam)); + } + + try { + $participant_user = \User_Adapter::getInstance($participant['usr_id'], $app); + } catch (\Exception $e) { + throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); + } + + try { + $Participant = $Validation->getParticipant($participant_user, $app); + continue; + } catch (\Exception_NotFound $e) { + + } + + $Participant = new \Entities\ValidationParticipant(); + $Participant->setUser($participant_user); + $Participant->setSession($Validation); + + $Participant->setCanAgree($participant['agree']); + $Participant->setCanSeeOthers($participant['see_others']); + + $app['EM']->persist($Participant); + + foreach ($Basket->getElements() as $BasketElement) { + $ValidationData = new \Entities\ValidationData(); + $ValidationData->setParticipant($Participant); + $ValidationData->setBasketElement($BasketElement); + $BasketElement->addValidationData($ValidationData); + + if ($participant['HD']) { + $participant_user->ACL()->grant_hd_on( + $BasketElement->getRecord($app) + , $user + , \ACL::GRANT_ACTION_VALIDATE + ); + } else { + $participant_user->ACL()->grant_preview_on( + $BasketElement->getRecord($app) + , $user + , \ACL::GRANT_ACTION_VALIDATE + ); + } + + $app['EM']->merge($BasketElement); + $app['EM']->persist($ValidationData); + + $app['phraseanet.logger']($BasketElement->getRecord($app)->get_databox()) + ->log($BasketElement->getRecord($app), \Session_Logger::EVENT_PUSH, $participant_user->get_id(), ''); + + $Participant->addValidationData($ValidationData); + } + + $Participant = $app['EM']->merge($Participant); + + $app['EM']->flush(); + + $url = $registry->get('GV_ServerName') + . 'lightbox/index.php?LOG=' + . \random::getUrlToken($app, \random::TYPE_VIEW, $participant_user->get_id(), null, $Basket->getId()); + + $params = array( + 'from' => $user->get_id() + , 'from_email' => $user->get_email() + , 'to' => $participant_user->get_id() + , 'to_email' => $participant_user->get_email() + , 'to_name' => $participant_user->get_display_name() + , 'url' => $url + , 'accuse' => !!$request->request->get('recept', false) + , 'message' => $request->request->get('message') + , 'ssel_id' => $Basket->getId() + ); + + $events_manager->trigger('__PUSH_VALIDATION__', $params); + } + + $Basket = $app['EM']->merge($Basket); + $Validation = $app['EM']->merge($Validation); + + $app['EM']->flush(); + + $message = sprintf( + _('%1$d records have been sent for validation to %2$d users') + , count($pusher->get_elements()) + , count($request->request->get('participants')) + ); + + $ret = array( + 'success' => true, + 'message' => $message + ); + + $app['EM']->commit(); + } catch (ControllerException $e) { + $ret['message'] = $e->getMessage(); + $app['EM']->rollback(); + } + + return $app->json($ret); + }); + + $controllers->get('/user/{usr_id}/', function(Application $app, $usr_id) use ($userFormatter) { + $datas = null; + + $request = $app['request']; + $user = $app['phraseanet.user']; + + $query = new \User_Query($app); + + $query->on_bases_where_i_am($user->ACL(), array('canpush')); + + $query->in(array($usr_id)); + + $result = $query->include_phantoms() + ->limit(0, 1) + ->execute()->get_results(); + + if ($result) { + foreach ($result as $user) { + $datas = $userFormatter($user); + } + } + + return $app->json($datas); + })->assert('usr_id', '\d+'); + + $controllers->get('/list/{list_id}/', function(Application $app, $list_id) use ($listFormatter) { + $datas = null; + + $user = $app['phraseanet.user']; + + $repository = $app['EM']->getRepository('\Entities\UsrList'); + + $list = $repository->findUserListByUserAndId($app, $user, $list_id); + + if ($list) { + $datas = $listFormatter($list); + } + + return $app->json($datas); + })->assert('list_id', '\d+'); + + $controllers->post('/add-user/', function(Application $app, Request $request) use ($userFormatter) { + $result = array('success' => false, 'message' => '', 'user' => null); + + $AdminUser = $app['phraseanet.user']; + + try { + /* @var $AdminUser \User_Adapter */ + if (!$AdminUser->ACL()->has_right('manageusers')) + throw new ControllerException(_('You are not allowed to add users')); + + if (!$request->request->get('firstname')) + throw new ControllerException(_('First name is required')); + + if (!$request->request->get('lastname')) + throw new ControllerException(_('Last name is required')); + + if (!$request->request->get('email')) + throw new ControllerException(_('Email is required')); + + if (!\mail::validateEmail($request->request->get('email'))) + throw new ControllerException(_('Email is invalid')); + } catch (ControllerException $e) { + $result['message'] = $e->getMessage(); + + return $app->json($result); + } + + $appbox = $app['phraseanet.appbox']; + + $user = null; + $email = $request->request->get('email'); + + try { + $usr_id = \User_Adapter::get_usr_id_from_email($app, $email); + $user = \User_Adapter::getInstance($usr_id, $app); + + $result['message'] = _('User already exists'); + $result['success'] = true; + $result['user'] = $userFormatter($user); + } catch (\Exception $e) { + + } + + if (!$user instanceof \User_Adapter) { try { - $usr_id = \User_Adapter::get_usr_id_from_email($app, $email); - $user = \User_Adapter::getInstance($usr_id, $app); + $password = \random::generatePassword(); - $result['message'] = _('User already exists'); + $user = \User_Adapter::create($app, $email, $password, $email, false); + + $user->set_firstname($request->request->get('firstname')) + ->set_lastname($request->request->get('lastname')); + + if ($request->request->get('company')) + $user->set_company($request->request->get('company')); + if ($request->request->get('job')) + $user->set_company($request->request->get('job')); + if ($request->request->get('form_geonameid')) + $user->set_geonameid($request->request->get('form_geonameid')); + + $result['message'] = _('User successfully created'); $result['success'] = true; $result['user'] = $userFormatter($user); } catch (\Exception $e) { - + $result['message'] = _('Error while creating user'); } + } - if (!$user instanceof \User_Adapter) { - try { - $password = \random::generatePassword(); - - $user = \User_Adapter::create($app, $email, $password, $email, false); - - $user->set_firstname($request->request->get('firstname')) - ->set_lastname($request->request->get('lastname')); - - if ($request->request->get('company')) - $user->set_company($request->request->get('company')); - if ($request->request->get('job')) - $user->set_company($request->request->get('job')); - if ($request->request->get('form_geonameid')) - $user->set_geonameid($request->request->get('form_geonameid')); - - $result['message'] = _('User successfully created'); - $result['success'] = true; - $result['user'] = $userFormatter($user); - } catch (\Exception $e) { - $result['message'] = _('Error while creating user'); - } - } - - return $app->json($result); - }); + return $app->json($result); + }); $controllers->get('/add-user/', function(Application $app, Request $request) { - $params = array('callback' => $request->query->get('callback')); + $params = array('callback' => $request->query->get('callback')); - return new Response($app['twig']->render('prod/User/Add.html.twig', $params)); - }); + return $app['twig']->render('prod/User/Add.html.twig', $params); + }); $controllers->get('/search-user/', function(Application $app) use ($userFormatter, $listFormatter) { - $request = $app['request']; - $user = $app['phraseanet.user']; + $request = $app['request']; + $user = $app['phraseanet.user']; - $query = new \User_Query($app); + $query = new \User_Query($app); - $query->on_bases_where_i_am($user->ACL(), array('canpush')); + $query->on_bases_where_i_am($user->ACL(), array('canpush')); - $query->like(\User_Query::LIKE_FIRSTNAME, $request->query->get('query')) - ->like(\User_Query::LIKE_LASTNAME, $request->query->get('query')) - ->like(\User_Query::LIKE_LOGIN, $request->query->get('query')) - ->like_match(\User_Query::LIKE_MATCH_OR); + $query->like(\User_Query::LIKE_FIRSTNAME, $request->query->get('query')) + ->like(\User_Query::LIKE_LASTNAME, $request->query->get('query')) + ->like(\User_Query::LIKE_LOGIN, $request->query->get('query')) + ->like_match(\User_Query::LIKE_MATCH_OR); - $result = $query->include_phantoms() - ->limit(0, 50) - ->execute()->get_results(); + $result = $query->include_phantoms() + ->limit(0, 50) + ->execute()->get_results(); - $repository = $app['EM']->getRepository('\Entities\UsrList'); + $repository = $app['EM']->getRepository('\Entities\UsrList'); - $lists = $repository->findUserListLike($user, $request->query->get('query')); + $lists = $repository->findUserListLike($user, $request->query->get('query')); - $datas = array(); + $datas = array(); - if ($lists) { - foreach ($lists as $list) { - $datas[] = $listFormatter($list); - } + if ($lists) { + foreach ($lists as $list) { + $datas[] = $listFormatter($list); } - - if ($result) { - foreach ($result as $user) { - $datas[] = $userFormatter($user); - } - } - - return $app->json($datas); } - ); + + if ($result) { + foreach ($result as $user) { + $datas[] = $userFormatter($user); + } + } + + return $app->json($datas); + }); $controllers->match('/edit-list/{list_id}/', function(Application $app, Request $request, $list_id) { - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $repository = $app['EM']->getRepository('\Entities\UsrList'); + $repository = $app['EM']->getRepository('\Entities\UsrList'); - $list = $repository->findUserListByUserAndId($app, $user, $list_id); + $list = $repository->findUserListByUserAndId($app, $user, $list_id); - $query = new \User_Query($app); + $query = new \User_Query($app); - $query->on_bases_where_i_am($user->ACL(), array('canpush')); + $query->on_bases_where_i_am($user->ACL(), array('canpush')); - if ($request->get('query')) { - $query->like($request->get('like_field'), $request->get('query')) - ->like_match(\User_Query::LIKE_MATCH_OR); - } - if (is_array($request->get('Activity'))) { - $query->haveActivities($request->get('Activity')); - } - if (is_array($request->get('Template'))) { - $query->haveTemplate($request->get('Template')); - } - if (is_array($request->get('Company'))) { - $query->inCompanies($request->get('Company')); - } - if (is_array($request->get('Country'))) { - $query->inCountries($request->get('Country')); - } - if (is_array($request->get('Position'))) { - $query->havePositions($request->get('Position')); - } - - $sort = $request->get('srt', 'usr_creationdate'); - $ord = $request->get('ord', 'desc'); - - $perPage = 10; - $offset_start = Max(((int) $request->get('page') - 1) * $perPage, 0); - - $query->sort_by($sort, $ord); - - $results = $query->include_phantoms() - ->limit($offset_start, $perPage) - ->execute()->get_results(); - - $params = array( - 'query' => $query - , 'results' => $results - , 'list' => $list - , 'sort' => $sort - , 'ord' => $ord - ); - - if ($request->get('type') === 'fragment') { - return new Response( - $app['twig']->render('prod/actions/Feedback/ResultTable.html.twig', $params) - ); - } else { - return new Response( - $app['twig']->render('prod/actions/Feedback/list.html.twig', $params) - ); - } + if ($request->get('query')) { + $query->like($request->get('like_field'), $request->get('query')) + ->like_match(\User_Query::LIKE_MATCH_OR); } - )->assert('list_id', '\d+'); + if (is_array($request->get('Activity'))) { + $query->haveActivities($request->get('Activity')); + } + if (is_array($request->get('Template'))) { + $query->haveTemplate($request->get('Template')); + } + if (is_array($request->get('Company'))) { + $query->inCompanies($request->get('Company')); + } + if (is_array($request->get('Country'))) { + $query->inCountries($request->get('Country')); + } + if (is_array($request->get('Position'))) { + $query->havePositions($request->get('Position')); + } + + $sort = $request->get('srt', 'usr_creationdate'); + $ord = $request->get('ord', 'desc'); + + $perPage = 10; + $offset_start = Max(((int) $request->get('page') - 1) * $perPage, 0); + + $query->sort_by($sort, $ord); + + $results = $query->include_phantoms() + ->limit($offset_start, $perPage) + ->execute()->get_results(); + + $params = array( + 'query' => $query + , 'results' => $results + , 'list' => $list + , 'sort' => $sort + , 'ord' => $ord + ); + + if ($request->get('type') === 'fragment') { + return new Response( + $app['twig']->render('prod/actions/Feedback/ResultTable.html.twig', $params) + ); + } else { + return new Response( + $app['twig']->render('prod/actions/Feedback/list.html.twig', $params) + ); + } + })->assert('list_id', '\d+'); return $controllers; } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Query.php b/lib/Alchemy/Phrasea/Controller/Prod/Query.php index 0dacbbf783..7e1908f24a 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Query.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Query.php @@ -30,188 +30,188 @@ class Query implements ControllerProviderInterface $controllers->before(function(Request $request) use ($app) { $response = $app['firewall']->requireAuthentication(); - if($response instanceof Response) { + if ($response instanceof Response) { return $response; } }); $controllers->post('/', function(Application $app, Request $request) { - $appbox = $app['phraseanet.appbox']; - $registry = $appbox->get_registry(); + $appbox = $app['phraseanet.appbox']; + $registry = $appbox->get_registry(); - $user = $app['phraseanet.user']; + $user = $app['phraseanet.user']; - $query = (string) $request->request->get('qry'); + $query = (string) $request->request->get('qry'); - $mod = $user->getPrefs('view'); + $mod = $user->getPrefs('view'); - $json = array(); + $json = array(); - $options = new \searchEngine_options(); + $options = new \searchEngine_options(); - $bas = is_array($request->request->get('bas')) ? $request->request->get('bas') : array_keys($user->ACL()->get_granted_base()); + $bas = is_array($request->request->get('bas')) ? $request->request->get('bas') : array_keys($user->ACL()->get_granted_base()); - /* @var $user \User_Adapter */ - if ($user->ACL()->has_right('modifyrecord')) { - $options->set_business_fields(array()); + /* @var $user \User_Adapter */ + if ($user->ACL()->has_right('modifyrecord')) { + $options->set_business_fields(array()); - $BF = array(); + $BF = array(); - foreach ($user->ACL()->get_granted_base(array('canmodifrecord')) as $collection) { - if (count($bas) === 0 || in_array($collection->get_base_id(), $bas)) { - $BF[] = $collection->get_base_id(); - } + foreach ($user->ACL()->get_granted_base(array('canmodifrecord')) as $collection) { + if (count($bas) === 0 || in_array($collection->get_base_id(), $bas)) { + $BF[] = $collection->get_base_id(); } - $options->set_business_fields($BF); - } else { - $options->set_business_fields(array()); } + $options->set_business_fields($BF); + } else { + $options->set_business_fields(array()); + } - $status = is_array($request->request->get('status')) ? $request->request->get('status') : array(); - $fields = is_array($request->request->get('fields')) ? $request->request->get('fields') : array(); + $status = is_array($request->request->get('status')) ? $request->request->get('status') : array(); + $fields = is_array($request->request->get('fields')) ? $request->request->get('fields') : array(); - $options->set_fields($fields); - $options->set_status($status); - $options->set_bases($bas, $user->ACL()); + $options->set_fields($fields); + $options->set_status($status); + $options->set_bases($bas, $user->ACL()); - $options->set_search_type($request->request->get('search_type')); - $options->set_record_type($request->request->get('recordtype')); - $options->set_min_date($request->request->get('datemin')); - $options->set_max_date($request->request->get('datemax')); - $options->set_date_fields(explode('|', $request->request->get('datefield'))); - $options->set_sort($request->request->get('sort'), $request->request->get('ord', PHRASEA_ORDER_DESC)); - $options->set_use_stemming($request->request->get('stemme')); + $options->set_search_type($request->request->get('search_type')); + $options->set_record_type($request->request->get('recordtype')); + $options->set_min_date($request->request->get('datemin')); + $options->set_max_date($request->request->get('datemax')); + $options->set_date_fields(explode('|', $request->request->get('datefield'))); + $options->set_sort($request->request->get('sort'), $request->request->get('ord', PHRASEA_ORDER_DESC)); + $options->set_use_stemming($request->request->get('stemme')); - $form = serialize($options); + $form = serialize($options); - $perPage = (int) $user->getPrefs('images_per_page'); + $perPage = (int) $user->getPrefs('images_per_page'); - $search_engine = new \searchEngine_adapter($app); - $search_engine->set_options($options); + $search_engine = new \searchEngine_adapter($app); + $search_engine->set_options($options); - $page = (int) $request->request->get('pag'); + $page = (int) $request->request->get('pag'); - if ($page < 1) { - $search_engine->set_is_first_page(true); - $search_engine->reset_cache(); - $page = 1; - } + if ($page < 1) { + $search_engine->set_is_first_page(true); + $search_engine->reset_cache(); + $page = 1; + } - $result = $search_engine->query_per_page($query, $page, $perPage); + $result = $search_engine->query_per_page($query, $page, $perPage); - $proposals = $search_engine->is_first_page() ? $result->get_propositions() : false; + $proposals = $search_engine->is_first_page() ? $result->get_propositions() : false; - $npages = $result->get_total_pages(); + $npages = $result->get_total_pages(); - $page = $result->get_current_page(); + $page = $result->get_current_page(); - $string = ''; + $string = ''; - if ($npages > 1) { + if ($npages > 1) { - $d2top = ($npages - $page); - $d2bottom = $page; + $d2top = ($npages - $page); + $d2bottom = $page; - if (min($d2top, $d2bottom) < 4) { - if ($d2bottom < 4) { - for ($i = 1; ($i <= 4 && (($i <= $npages) === true)); $i ++ ) { - if ($i == $page) - $string .= ''; - else - $string .= "" . $i . ""; - } - if ($npages > 4) - $string .= ">>"; - } else { - $start = $npages - 4; - if (($start) > 0) - $string .= "<<"; - else - $start = 1; - for ($i = ($start); $i <= $npages; $i ++ ) { - if ($i == $page) - $string .= ''; - else - $string .= "" . $i . ""; - } - } - } else { - $string .= "<<"; - - for ($i = ($page - 2); $i <= ($page + 2); $i ++ ) { + if (min($d2top, $d2bottom) < 4) { + if ($d2bottom < 4) { + for ($i = 1; ($i <= 4 && (($i <= $npages) === true)); $i++) { + if ($i == $page) + $string .= ''; + else + $string .= "" . $i . ""; + } + if ($npages > 4) + $string .= ">>"; + } else { + $start = $npages - 4; + if (($start) > 0) + $string .= "<<"; + else + $start = 1; + for ($i = ($start); $i <= $npages; $i++) { if ($i == $page) $string .= ''; else $string .= "" . $i . ""; } - - $string .= ">>"; } - } - $string .= ' '; - - $explain = "