From f7cc38ea251ef0f9c4397496154ef58dba75236f Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Thu, 26 Jan 2012 16:58:50 +0100 Subject: [PATCH] Enhanced push tests --- lib/Alchemy/Phrasea/Controller/Prod/Push.php | 644 +++++++++--------- .../Phrasea/Controller/Prod/PushTest.php | 4 +- 2 files changed, 328 insertions(+), 320 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Push.php b/lib/Alchemy/Phrasea/Controller/Prod/Push.php index ae904035f8..7131bccea1 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Push.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Push.php @@ -32,351 +32,359 @@ class Push implements ControllerProviderInterface $controllers = new ControllerCollection(); $controllers->post('/', function(Application $app) - { - $push = new RecordHelper\Push($app['Core'], $app['request']); + { + $push = new RecordHelper\Push($app['Core'], $app['request']); - $template = 'prod/actions/Push.html.twig'; + $template = 'prod/actions/Push.html.twig'; - /* @var $twig \Twig_Environment */ - $twig = $app['Core']->getTwig(); + /* @var $twig \Twig_Environment */ + $twig = $app['Core']->getTwig(); - return new Response($twig->render($template, array('push' => $push, 'message' => ''))); - } + return new Response($twig->render($template, array('push' => $push, 'message' => ''))); + } ); $controllers->post('/send/', function(Application $app) + { + $request = $app['request']; + + $ret = array( + 'success' => false, + 'message' => _('Unable to send the documents') + ); + + try + { + $em = $app['Core']->getEntityManager(); + + $pusher = new RecordHelper\Push($app['Core'], $app['request']); + + $user = $app['Core']->getAuthenticatedUser(); + + $appbox = \appbox::get_instance(); + + $push_name = $request->get( + 'push_name' + , sprintf(_('Push from %s'), $user->get_display_name()) + ); + + $push_description = $request->get('push_description'); + + $receivers = $request->get('receivers'); + + 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')); + } + + foreach ($receivers as $receiver) + { + try { - $request = $app['request']; - - $ret = array( - 'success' => false, - 'message' => _('Unable to send the documents') - ); - - try - { - $em = $app['Core']->getEntityManager(); - - $pusher = new RecordHelper\Push($app['Core'], $app['request']); - - $user = $app['Core']->getAuthenticatedUser(); - - $appbox = \appbox::get_instance(); - - $push_name = $request->get( - 'push_name' - , sprintf(_('Push from %s'), $user->get_display_name()) - ); - - $push_description = $request->get('push_description'); - - $receivers = $request->get('receivers'); - - 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')); - } - - foreach ($receivers as $receiver) - { - try - { - $user_receiver = \User_Adapter::getInstance($receiver['usr_id'], $appbox); - } - 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); - - $em->persist($Basket); - - foreach ($pusher->get_elements() as $element) - { - $BasketElement = new \Entities\BasketELement(); - $BasketElement->setRecord($element); - $BasketElement->setBasket($Basket); - - - if ($receiver['HD']) - { - $user_receiver->ACL()->grant_hd_on( - $BasketElement->getRecord() - , $user - , \ACL::GRANT_ACTION_PUSH - ); - } - else - { - $user_receiver->ACL()->grant_preview_on( - $BasketElement->getRecord() - , $user - , \ACL::GRANT_ACTION_PUSH - ); - } - - $em->persist($BasketElement); - } - } - - $em->flush(); - - $message = sprintf( - _('%1$d records have been sent to %2$d users') - , count($pusher->get_elements()) - , count($request->get('receivers')) - ); - - $ret = array( - 'success' => true, - 'message' => $message - ); - } - catch (ControllerException $e) - { - $ret['message'] = $e->getMessage(); - } - - $Json = $app['Core']['Serializer']->serialize($ret, 'json'); - - return new Response($Json, 200, array('Content-Type' => 'application/json')); + $user_receiver = \User_Adapter::getInstance($receiver['usr_id'], $appbox); } + 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); + + $em->persist($Basket); + + foreach ($pusher->get_elements() as $element) + { + $BasketElement = new \Entities\BasketELement(); + $BasketElement->setRecord($element); + $BasketElement->setBasket($Basket); + + + if ($receiver['HD']) + { + $user_receiver->ACL()->grant_hd_on( + $BasketElement->getRecord() + , $user + , \ACL::GRANT_ACTION_PUSH + ); + } + else + { + $user_receiver->ACL()->grant_preview_on( + $BasketElement->getRecord() + , $user + , \ACL::GRANT_ACTION_PUSH + ); + } + + $em->persist($BasketElement); + } + } + + $em->flush(); + + $message = sprintf( + _('%1$d records have been sent to %2$d users') + , count($pusher->get_elements()) + , count($request->get('receivers')) + ); + + $ret = array( + 'success' => true, + 'message' => $message + ); + } + catch (ControllerException $e) + { + $ret['message'] = $e->getMessage(); + } + + $Json = $app['Core']['Serializer']->serialize($ret, 'json'); + + return new Response($Json, 200, array('Content-Type' => 'application/json')); + } ); $controllers->post('/validate/', function(Application $app) + { + $request = $app['request']; + + $ret = array( + 'success' => false, + 'message' => _('Unable to send the documents') + ); + + try + { + $pusher = new RecordHelper\Push($app['Core'], $app['request']); + $user = $app['Core']->getAuthenticatedUser(); + + $em = $app['Core']->getEntityManager(); + + $repository = $em->getRepository('\Entities\Basket'); + + $validation_name = $request->get( + 'validation_name' + , sprintf(_('Validation from %s'), $user->get_display_name()) + ); + + $validation_description = $request->get('validation_description'); + + $participants = $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); + + $em->persist($Basket); + + foreach ($pusher->get_elements() as $element) { - $request = $app['request']; + $BasketElement = new \Entities\BasketElement(); + $BasketElement->setRecord($element); + $BasketElement->setBasket($Basket); - $ret = array( - 'success' => false, - 'message' => _('Unable to send the documents') - ); - - try - { - $pusher = new RecordHelper\Push($app['Core'], $app['request']); - $user = $app['Core']->getAuthenticatedUser(); - - $em = $app['Core']->getEntityManager(); - - $repository = $em->getRepository('\Entities\Basket'); - - $validation_name = $request->get( - 'validation_name' - , sprintf(_('Validation from %s'), $user->get_display_name()) - ); - - $validation_description = $request->get('validation_description'); - - $participants = $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); - - $em->persist($Basket); - - foreach ($pusher->get_elements() as $element) - { - $BasketElement = new \Entities\BasketElement(); - $BasketElement->setRecord($element); - $BasketElement->setBasket($Basket); - - $em->persist($BasketElement); - } - - $em->flush(); - } - - if (!$Basket->getValidation()) - { - $Validation = new \Entities\ValidationSession(); - $Validation->setInitiator($app['Core']->getAuthenticatedUser()); - $Validation->setBasket($Basket); - - $Basket->setValidation($Validation); - $em->persist($Validation); - } - else - { - $Validation = $Basket->getValidation(); - } - - - $appbox = \appbox::get_instance(); - - foreach ($participants as $participant) - { - try - { - $participant_user = \User_Adapter::getInstance($participant['usr_id'], $appbox); - } - catch (\Exception $e) - { - throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); - } - - try - { - $Participant = $Validation->getParticipant($participant_user); - 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']); - - $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() - , $user - , \ACL::GRANT_ACTION_VALIDATE - ); - } - else - { - $participant_user->ACL()->grant_preview_on( - $BasketElement->getRecord() - , $user - , \ACL::GRANT_ACTION_VALIDATE - ); - } - - $em->merge($BasketElement); - $em->persists($ValidationData); - - $Participant->addValidationData($ValidationData); - } - - $em->merge($Participant); - } - - $em->merge($Basket); - $em->merge($Validation); - - $em->flush(); - - $message = sprintf( - _('%1$d records have been sent to %2$d users') - , count($pusher->get_elements()) - , count($request->get('receivers')) - ); - - $ret = array( - 'success' => true, - 'message' => $message - ); - } - catch (ControllerException $e) - { - $ret['message'] = $e->getMessage(); - } - - $Json = $app['Core']['Serializer']->serialize($ret, 'json'); - - return new Response($Json, 200, array('Content-Type' => 'application/json')); + $em->persist($BasketElement); } + + $em->flush(); + } + + $em->refresh($Basket); + + if (!$Basket->getValidation()) + { + $Validation = new \Entities\ValidationSession(); + $Validation->setInitiator($app['Core']->getAuthenticatedUser()); + $Validation->setBasket($Basket); + + $Basket->setValidation($Validation); + $em->persist($Validation); + } + else + { + $Validation = $Basket->getValidation(); + } + + + $appbox = \appbox::get_instance(); + + foreach ($participants as $participant) + { + foreach (array('see_others', 'usr_id', 'agree', 'HD') as $mandatoryparam) + { + if (!array_key_exists($mandatoryparam, $participant)) + throw new ControllerException(sprintf(_('Missing mandatory participant parameter %s'), $mandatoryparam)); + } + + try + { + $participant_user = \User_Adapter::getInstance($participant['usr_id'], $appbox); + } + catch (\Exception $e) + { + throw new ControllerException(sprintf(_('Unknown user %d'), $receiver['usr_id'])); + } + + try + { + $Participant = $Validation->getParticipant($participant_user); + 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']); + + $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() + , $user + , \ACL::GRANT_ACTION_VALIDATE + ); + } + else + { + $participant_user->ACL()->grant_preview_on( + $BasketElement->getRecord() + , $user + , \ACL::GRANT_ACTION_VALIDATE + ); + } + + $em->merge($BasketElement); + $em->persist($ValidationData); + + $Participant->addValidationData($ValidationData); + } + + $em->merge($Participant); + } + + $em->merge($Basket); + $em->merge($Validation); + + $em->flush(); + + $message = sprintf( + _('%1$d records have been sent for validation to %2$d users') + , count($pusher->get_elements()) + , count($request->get('$participants')) + ); + + $ret = array( + 'success' => true, + 'message' => $message + ); + } + catch (ControllerException $e) + { + $ret['message'] = $e->getMessage(); + } + + $Json = $app['Core']['Serializer']->serialize($ret, 'json'); + + return new Response($Json, 200, array('Content-Type' => 'application/json')); + } ); $controllers->get('/search-user/', function(Application $app) - { - $request = $app['request']; - $em = $app['Core']->getEntityManager(); - $user = $app['Core']->getAuthenticatedUser(); + { + $request = $app['request']; + $em = $app['Core']->getEntityManager(); + $user = $app['Core']->getAuthenticatedUser(); - $query = new \User_Query(\appbox::get_instance()); + $query = new \User_Query(\appbox::get_instance()); - $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->get('query')) - ->like(\User_Query::LIKE_LASTNAME, $request->get('query')) - ->like(\User_Query::LIKE_LOGIN, $request->get('query')) - ->like_match(\User_Query::LIKE_MATCH_OR); + $query->like(\User_Query::LIKE_FIRSTNAME, $request->get('query')) + ->like(\User_Query::LIKE_LASTNAME, $request->get('query')) + ->like(\User_Query::LIKE_LOGIN, $request->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 = $em->getRepository('\Entities\UsrList'); + $repository = $em->getRepository('\Entities\UsrList'); - $lists = $repository->findUserListLike($user, $request->get('query')); + $lists = $repository->findUserListLike($user, $request->get('query')); - $datas = array(); + $datas = array(); - if ($lists) - { - foreach ($lists as $list) - { - $datas[] = array( - 'type' => 'LIST' - , 'name' => $list->getName() - , 'quantity' => $list->getUsers()->count() - ); - } - } + if ($lists) + { + foreach ($lists as $list) + { + $datas[] = array( + 'type' => 'LIST' + , 'name' => $list->getName() + , 'quantity' => $list->getUsers()->count() + ); + } + } - if ($result) - { - foreach ($result as $user) - { - $datas[] = 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() - ); - } - } + if ($result) + { + foreach ($result as $user) + { + $datas[] = 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() + ); + } + } - $Json = $app['Core']['Serializer']->serialize($datas, 'json'); + $Json = $app['Core']['Serializer']->serialize($datas, 'json'); - return new Response($Json, 200, array('Content-Type' => 'application/json')); - } + return new Response($Json, 200, array('Content-Type' => 'application/json')); + } ); diff --git a/lib/unitTest/Alchemy/Phrasea/Controller/Prod/PushTest.php b/lib/unitTest/Alchemy/Phrasea/Controller/Prod/PushTest.php index bb73dfec51..fe81ef63b7 100644 --- a/lib/unitTest/Alchemy/Phrasea/Controller/Prod/PushTest.php +++ b/lib/unitTest/Alchemy/Phrasea/Controller/Prod/PushTest.php @@ -102,13 +102,13 @@ class ControllerPushTest extends \PhraseanetWebTestCaseAuthenticatedAbstract 'usr_id' => self::$user_alt1->get_id(), 'agree'=> 0, 'see_others'=> 1, - 'HS'=> 0, + 'HD'=> 0, ) , array( 'usr_id' => self::$user_alt2->get_id(), 'agree'=> 1, 'see_others'=> 0, - 'HS'=> 1, + 'HD'=> 1, ) );