mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-10 11:33:17 +00:00
delete set_ordermanager & set_exportorder classes
This commit is contained in:
@@ -439,14 +439,14 @@ class Collection implements ControllerProviderInterface
|
||||
public function setOrderAdmins(Application $app, Request $request, $bas_id)
|
||||
{
|
||||
if (count($admins = $request->request->get('admins', array())) > 0) {
|
||||
$new_admins = array();
|
||||
$newAdmins = array();
|
||||
|
||||
foreach ($admins as $admin) {
|
||||
$new_admins[] = $admin;
|
||||
$newAdmins[] = $admin;
|
||||
}
|
||||
|
||||
if (count($new_admins) > 0) {
|
||||
\set_exportorder::set_order_admins(array_filter($admins), $bas_id);
|
||||
if (count($newAdmins) > 0) {
|
||||
\User_Adapter::set_order_admins(array_filter($admins), $bas_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -11,6 +11,8 @@
|
||||
|
||||
namespace Alchemy\Phrasea\Controller\Prod;
|
||||
|
||||
use Alchemy\Phrasea\Controller\RecordsRequest;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Silex\Application;
|
||||
use Silex\ControllerProviderInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@@ -142,24 +144,58 @@ class Order implements ControllerProviderInterface
|
||||
public function createOrder(Application $app, Request $request)
|
||||
{
|
||||
$success = false;
|
||||
$collectionHasOrderAdmins = new ArrayCollection();
|
||||
|
||||
try {
|
||||
$order = new \set_exportorder($request->request->get('lst', ''), (int) $request->request->get('ssttid'));
|
||||
$records = RecordsRequest::fromRequest($app, $request, true, array('cancmd'));
|
||||
|
||||
$query = new \User_Query($app['phraseanet.appbox']);
|
||||
|
||||
foreach ($records as $key => $record) {
|
||||
if ($collectionHasOrderAdmins->containsKey($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()))
|
||||
->who_have_right(array('order_master'))
|
||||
->execute()->get_results());
|
||||
|
||||
$collectionHasOrderAdmins->set($record->get_base_id(), $hasOneAdmin);
|
||||
|
||||
if ( ! $hasOneAdmin) {
|
||||
$records->remove($key);
|
||||
}
|
||||
}
|
||||
|
||||
$noAdmins = $collectionHasOrderAdmins->forAll(function($key, $hasAdmin) {
|
||||
return false === $hasAdmin;
|
||||
});
|
||||
|
||||
if ($noAdmins) {
|
||||
$msg = _('There is no one to validate orders, please contact an administrator');
|
||||
}
|
||||
|
||||
if (count($records) > 0) {
|
||||
\set_order::create(
|
||||
$app['phraseanet.appbox'], $records, $app['phraseanet.core']->getAuthenticatedUser(), $request->request->get('use', ''), ( (null !== $deadLine = $request->request->get('deadline')) ? new \DateTime($deadLine) : $deadLine)
|
||||
);
|
||||
|
||||
if ($order->order_available_elements(
|
||||
$app['phraseanet.core']->getAuthenticatedUser()->get_id(), $request->request->get('use', ''), $request->request->get('deadline', '')
|
||||
)) {
|
||||
$success = true;
|
||||
$msg = _('The records have been properly ordered');
|
||||
} else {
|
||||
$msg = _('There is no record eligible for an order');
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$msg = $e->getMessage();
|
||||
$msg = _('An error occured');
|
||||
}
|
||||
|
||||
if ('json' === $app['request']->getRequestFormat()) {
|
||||
|
||||
return $app->json(array(
|
||||
'success' => $success,
|
||||
'msg' => $success ? _('The records have been properly ordered') : _('An error occured') . ' ' . $msg,
|
||||
'msg' => $msg,
|
||||
));
|
||||
}
|
||||
|
||||
@@ -179,8 +215,23 @@ class Order implements ControllerProviderInterface
|
||||
*/
|
||||
public function displayOrders(Application $app, Request $request)
|
||||
{
|
||||
$page = (int) $request->query->get('page', 1);
|
||||
$offsetStart = $page - 1;
|
||||
$perPage = (int) $request->query->get('per-page', 10);
|
||||
$sort = $request->query->get('sort');
|
||||
|
||||
$baseIds = array_keys($app['phraseanet.core']->getAuthenticatedUser()->ACL()->get_granted_base(array('order_master')));
|
||||
|
||||
$ordersList = \set_order::listOrders($app['phraseanet.appbox'], $baseIds, $offsetStart, $perPage, $sort);
|
||||
$total = \set_order::countTotalOrder($app['phraseanet.appbox'], $baseIds);
|
||||
|
||||
return $app['twig']->render('prod/orders/order_box.html.twig', array(
|
||||
'ordermanager' => new \set_ordermanager( ! ! $request->query->get('sort', false), (int) $request->query->get('page', 1))
|
||||
'page' => $page,
|
||||
'perPage' => $perPage,
|
||||
'total' => $total,
|
||||
'previousPage' => $page < 2 ? false : ($page - 1),
|
||||
'nextPage' => $page >= ceil($total / $perPage) ? false : $page + 1,
|
||||
'orders' => new ArrayCollection($ordersList)
|
||||
));
|
||||
}
|
||||
|
||||
|
@@ -122,11 +122,11 @@ class Root implements ControllerProviderInterface
|
||||
|
||||
$controllers->post('/multi-export/', function(Application $app, Request $request) {
|
||||
|
||||
$download = new \set_export($request->request->get('lst', ''), (int) $request->request->get('SSTTID'), $request->request->get('story'));
|
||||
$download = new \set_export($request->request->get('lst', ''), (int) $request->request->get('ssel'), $request->request->get('story'));
|
||||
|
||||
return $app['twig']->render('common/dialog_export.html.twig', array(
|
||||
'download' => $download,
|
||||
'ssttid' => (int) $request->request->get('SSTTID'),
|
||||
'ssttid' => (int) $request->request->get('ssel'),
|
||||
'lst' => $download->serialize_list(),
|
||||
'default_export_title' => $app['phraseanet.core']['Registry']->get('GV_default_export_title'),
|
||||
'choose_export_title' => $app['phraseanet.core']['Registry']->get('GV_choose_export_title')
|
||||
|
@@ -107,10 +107,11 @@ class RecordsRequest extends ArrayCollection
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new RecordRequest from current request
|
||||
*
|
||||
* @param \Alchemy\Phrasea\Application $app
|
||||
* @param \Symfony\Component\HttpFoundation\Request $request
|
||||
* @param type $flattenStories
|
||||
* @param Application $app
|
||||
* @param Request $request
|
||||
* @param boolean $flattenStories
|
||||
* @param array $rightsColl
|
||||
* @param array $rightsDatabox
|
||||
* @return RecordsRequest
|
||||
@@ -165,12 +166,14 @@ class RecordsRequest extends ArrayCollection
|
||||
$to_remove[] = $id;
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($rightsColl as $right) {
|
||||
if ( ! $user->ACL()->has_right_on_base($record->get_base_id(), $right)) {
|
||||
$to_remove[] = $id;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($rightsDatabox as $right) {
|
||||
if ( ! $user->ACL()->has_right_on_sbas($record->get_sbas_id(), $right)) {
|
||||
$to_remove[] = $id;
|
||||
|
@@ -1650,6 +1650,34 @@ class User_Adapter implements User_Interface, cache_cacheableInterface
|
||||
return;
|
||||
}
|
||||
|
||||
public static function set_order_admins($admins, $base_id)
|
||||
{
|
||||
$appbox = appbox::get_instance(\bootstrap::getCore());
|
||||
$conn = $appbox->get_connection();
|
||||
$conn->beginTransaction();
|
||||
try {
|
||||
$user_query = new User_Query($appbox);
|
||||
$result = $user_query->on_base_ids(array($base_id))
|
||||
->who_have_right(array('order_master'))
|
||||
->execute()->get_results();
|
||||
|
||||
foreach ($result as $user) {
|
||||
$user->ACL()->update_rights_to_base($base_id, array('order_master' => false));
|
||||
}
|
||||
|
||||
foreach ($admins as $admin) {
|
||||
$user = User_Adapter::getInstance($admin, $appbox);
|
||||
$user->ACL()->update_rights_to_base($base_id, array('order_master' => true));
|
||||
}
|
||||
|
||||
$conn->commit();
|
||||
} catch (Exception $e) {
|
||||
$conn->rollBack();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public static function get_locale($usr_id)
|
||||
{
|
||||
$locale = 'en_GB';
|
||||
|
@@ -1,153 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Phraseanet
|
||||
*
|
||||
* (c) 2005-2012 Alchemy
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @license http://opensource.org/licenses/gpl-3.0 GPLv3
|
||||
* @link www.phraseanet.com
|
||||
*/
|
||||
class set_exportorder extends set_export
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
* @param Int $from_usr_id
|
||||
* @param String $usage
|
||||
* @param String $deadline
|
||||
* @return boolean
|
||||
* @return $order_id
|
||||
*/
|
||||
public function order_available_elements($from_usr_id, $usage, $deadline)
|
||||
{
|
||||
$Core = bootstrap::getCore();
|
||||
|
||||
$lst = $this->get_orderable_lst();
|
||||
|
||||
$conn = connection::getPDOConnection();
|
||||
|
||||
$date = phraseadate::format_mysql(new DateTime($deadline));
|
||||
|
||||
$conn->beginTransaction();
|
||||
|
||||
$usage = p4string::cleanTags($usage);
|
||||
|
||||
try {
|
||||
|
||||
$sql = 'INSERT INTO `order`
|
||||
(`id`, `usr_id`, `created_on`, `usage`, `deadline`)
|
||||
VALUES
|
||||
(null, :from_usr_id, NOW(), :usage, :deadline)';
|
||||
|
||||
$params = array(
|
||||
':from_usr_id' => $from_usr_id
|
||||
, ':usage' => $usage
|
||||
, ':deadline' => $deadline
|
||||
);
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
$stmt->closeCursor();
|
||||
|
||||
$order_id = $conn->lastInsertId();
|
||||
|
||||
$sql = 'INSERT INTO order_elements
|
||||
(id, order_id, base_id, record_id, order_master_id)
|
||||
VALUES
|
||||
(null, :order_id, :base_id, :record_id, null)';
|
||||
$stmt = $conn->prepare($sql);
|
||||
|
||||
foreach ($lst as $basrec) {
|
||||
$basrec = explode('_', $basrec);
|
||||
|
||||
$record = new record_adapter($basrec[0], $basrec[1]);
|
||||
$base_id = $record->get_base_id();
|
||||
$record_id = $basrec[1];
|
||||
|
||||
$params = array(
|
||||
':order_id' => $order_id
|
||||
, ':base_id' => $base_id
|
||||
, ':record_id' => $record_id
|
||||
);
|
||||
$stmt->execute($params);
|
||||
}
|
||||
|
||||
$stmt->closeCursor();
|
||||
$conn->commit();
|
||||
} catch (Exception $e) {
|
||||
$conn->rollBack();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$evt_mngr = eventsmanager_broker::getInstance(appbox::get_instance($Core), $Core);
|
||||
|
||||
$params = array(
|
||||
'order_id' => $order_id,
|
||||
'usr_id' => $from_usr_id
|
||||
);
|
||||
|
||||
$evt_mngr->trigger('__NEW_ORDER__', $params);
|
||||
|
||||
return $order_id;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return Array
|
||||
*/
|
||||
protected function get_orderable_lst()
|
||||
{
|
||||
$ret = array();
|
||||
foreach ($this as $download_element) {
|
||||
foreach ($download_element->get_orderable() as $bool) {
|
||||
if ($bool === true) {
|
||||
$ret[] = $download_element->get_serialize_key();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param Int $admins
|
||||
* @param Int $base_id
|
||||
* @return Void
|
||||
*/
|
||||
public static function set_order_admins($admins, $base_id)
|
||||
{
|
||||
$appbox = appbox::get_instance(\bootstrap::getCore());
|
||||
$conn = $appbox->get_connection();
|
||||
$conn->beginTransaction();
|
||||
try {
|
||||
$user_query = new User_Query($appbox);
|
||||
$result = $user_query->on_base_ids(array($base_id))
|
||||
->who_have_right(array('order_master'))
|
||||
->execute()->get_results();
|
||||
|
||||
foreach ($result as $user) {
|
||||
$user->ACL()->update_rights_to_base($base_id, array('order_master' => false));
|
||||
}
|
||||
|
||||
foreach ($admins as $admin) {
|
||||
$user = User_Adapter::getInstance($admin, $appbox);
|
||||
$user->ACL()->update_rights_to_base($base_id, array('order_master' => true));
|
||||
}
|
||||
|
||||
$conn->commit();
|
||||
} catch (Exception $e) {
|
||||
$conn->rollBack();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
@@ -9,6 +9,9 @@
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Alchemy\Phrasea\Controller\RecordsRequest;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@@ -65,6 +68,138 @@ class set_order extends set_abstract
|
||||
*/
|
||||
protected $ssel_id;
|
||||
|
||||
/**
|
||||
* Create a new order entry
|
||||
*
|
||||
* @param RecordsRequest $recordsRequest
|
||||
* @param integer $orderer
|
||||
* @param string $usage
|
||||
* @param \DateTime $deadline
|
||||
* @return boolean
|
||||
*/
|
||||
public static function create(appbox $appbox, RecordsRequest $records, \User_Adapter $orderer, $usage, \DateTime $deadline = null)
|
||||
{
|
||||
$appbox->get_connection()->beginTransaction();
|
||||
|
||||
try {
|
||||
$sql = 'INSERT INTO `order` (`id`, `usr_id`, `created_on`, `usage`, `deadline`)
|
||||
VALUES (null, :from_usr_id, NOW(), :usage, :deadline)';
|
||||
|
||||
$stmt = $appbox->get_connection()->prepare($sql);
|
||||
|
||||
$stmt->execute(array(
|
||||
':from_usr_id' => $orderer->get_id(),
|
||||
':usage' => $usage,
|
||||
':deadline' => (null !== $deadline ? phraseadate::format_mysql($deadline) : $deadline)
|
||||
));
|
||||
|
||||
$stmt->closeCursor();
|
||||
|
||||
$orderId = $appbox->get_connection()->lastInsertId();
|
||||
|
||||
$sql = 'INSERT INTO order_elements (id, order_id, base_id, record_id, order_master_id)
|
||||
VALUES (null, :order_id, :base_id, :record_id, null)';
|
||||
|
||||
$stmt = $appbox->get_connection()->prepare($sql);
|
||||
|
||||
foreach ($records as $record) {
|
||||
$stmt->execute(array(
|
||||
':order_id' => $orderId,
|
||||
':base_id' => $record->get_base_id(),
|
||||
':record_id' => $record->get_record_id()
|
||||
));
|
||||
}
|
||||
|
||||
$stmt->closeCursor();
|
||||
$appbox->get_connection()->commit();
|
||||
} catch (Exception $e) {
|
||||
$appbox->get_connection()->rollBack();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
$evt_mngr = eventsmanager_broker::getInstance($appbox, \bootstrap::getCore());
|
||||
|
||||
$evt_mngr->trigger('__NEW_ORDER__', array(
|
||||
'order_id' => $orderId,
|
||||
'usr_id' => $orderer->get_id()
|
||||
));
|
||||
|
||||
return new static($orderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* List orders
|
||||
*
|
||||
* @param appbox $appbox
|
||||
* @param array $baseIds
|
||||
* @param integer $offsetStart
|
||||
* @param integer $perPage
|
||||
* @return array
|
||||
*/
|
||||
public static function listOrders(appbox $appbox, array $baseIds, $offsetStart = 0, $perPage = 10, $sort = null)
|
||||
{
|
||||
|
||||
$sql = 'SELECT distinct o.id, o.usr_id, created_on, deadline, `usage`
|
||||
FROM (`order_elements` e, `order` o)
|
||||
WHERE e.base_id IN (' . implode(', ', $baseIds) . ')
|
||||
AND e.order_id = o.id
|
||||
GROUP BY o.id
|
||||
ORDER BY o.id DESC
|
||||
LIMIT ' . $offsetStart . ',' . $perPage;
|
||||
|
||||
$elements = array();
|
||||
|
||||
$stmt = $appbox->get_connection()->prepare($sql);
|
||||
$stmt->execute();
|
||||
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$stmt->closeCursor();
|
||||
|
||||
foreach ($rs as $row) {
|
||||
$id = (int) $row['id'];
|
||||
$elements[$id] = new set_order($id);
|
||||
}
|
||||
|
||||
unset($stmt);
|
||||
|
||||
if ($sort && count($elements) > 0) {
|
||||
if ($sort == 'created_on') {
|
||||
uasort($elements, array(__CLASS__, 'date_orders_sort'));
|
||||
} elseif ($sort == 'user') {
|
||||
uasort($elements, array(__CLASS__, 'user_orders_sort'));
|
||||
} elseif ($sort == 'usage') {
|
||||
uasort($elements, array(__CLASS__, 'usage_orders_sort'));
|
||||
}
|
||||
}
|
||||
|
||||
return $elements;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get total orders for selected base ids
|
||||
*
|
||||
* @param appbox $appbox
|
||||
* @param array $baseIds
|
||||
* @return integer
|
||||
*/
|
||||
public static function countTotalOrder(appbox $appbox, array $baseIds = array())
|
||||
{
|
||||
$sql = 'SELECT distinct o.id
|
||||
FROM (`order_elements` e, `order` o)
|
||||
WHERE ' . (count($baseIds > 0 ) ? 'e.base_id IN (' . implode(', ', $baseIds) . ') AND ': '' ).
|
||||
'e.order_id = o.id
|
||||
GROUP BY o.id
|
||||
ORDER BY o.id DESC';
|
||||
|
||||
$stmt = $appbox->get_connection()->prepare($sql);
|
||||
$stmt->execute();
|
||||
$total = $stmt->rowCount();
|
||||
$stmt->closeCursor();
|
||||
unset($stmt);
|
||||
|
||||
return (int) $total;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param int $id
|
||||
@@ -363,4 +498,58 @@ class set_order extends set_abstract
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Order orders by usage
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return int
|
||||
*/
|
||||
private static function usage_orders_sort($a, $b)
|
||||
{
|
||||
$comp = strcasecmp($a['usage'], $b['usage']);
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Order orders by user
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return int
|
||||
*/
|
||||
private static function user_orders_sort($a, $b)
|
||||
{
|
||||
$comp = strcasecmp($a['usr_display'], $b['usr_display']);
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Order orders by date
|
||||
*
|
||||
* @param DateTime $a
|
||||
* @param DateTime $b
|
||||
* @return int
|
||||
*/
|
||||
private static function date_orders_sort(DateTime $a, DateTime $b)
|
||||
{
|
||||
$comp = $b->format('U') - $a->format('U');
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
@@ -1,179 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Phraseanet
|
||||
*
|
||||
* (c) 2005-2012 Alchemy
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @license http://opensource.org/licenses/gpl-3.0 GPLv3
|
||||
* @link www.phraseanet.com
|
||||
*/
|
||||
class set_ordermanager extends set_abstract
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $page;
|
||||
|
||||
/**
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $total;
|
||||
|
||||
const PER_PAGE = 10;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return set_ordermanager
|
||||
*/
|
||||
public function __construct($sort = false, $page = 1)
|
||||
{
|
||||
$appbox = appbox::get_instance(\bootstrap::getCore());
|
||||
$session = $appbox->get_session();
|
||||
$conn = $appbox->get_connection();
|
||||
|
||||
$page = (int) $page;
|
||||
|
||||
$debut = ($page - 1) * self::PER_PAGE;
|
||||
|
||||
$user = User_Adapter::getInstance($session->get_usr_id(), $appbox);
|
||||
$base_ids = array_keys($user->ACL()->get_granted_base(array('order_master')));
|
||||
$sql = 'SELECT distinct o.id, o.usr_id, created_on, deadline, `usage`
|
||||
FROM (`order_elements` e, `order` o)
|
||||
WHERE e.base_id IN (' . implode(', ', $base_ids) . ')
|
||||
AND e.order_id = o.id
|
||||
GROUP BY o.id
|
||||
ORDER BY o.id DESC
|
||||
LIMIT ' . (int) $debut . ',' . self::PER_PAGE;
|
||||
|
||||
$elements = array();
|
||||
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute();
|
||||
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$stmt->closeCursor();
|
||||
|
||||
foreach ($rs as $row) {
|
||||
$elements[] = new set_order($row['id']);
|
||||
}
|
||||
|
||||
if ($sort) {
|
||||
if ($sort == 'created_on')
|
||||
uasort($elements, array('set_ordermanager', 'date_orders_sort'));
|
||||
elseif ($sort == 'user')
|
||||
uasort($elements, array('set_ordermanager', 'user_orders_sort'));
|
||||
elseif ($sort == 'usage')
|
||||
uasort($elements, array('set_ordermanager', 'usage_orders_sort'));
|
||||
}
|
||||
|
||||
$sql = 'SELECT distinct o.id
|
||||
FROM (`order_elements` e, `order` o)
|
||||
WHERE e.base_id IN (' . implode(', ', $base_ids) . ')
|
||||
AND e.order_id = o.id
|
||||
GROUP BY o.id
|
||||
ORDER BY o.id DESC';
|
||||
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute(array(':usr_id' => $session->get_usr_id()));
|
||||
$total = $stmt->rowCount();
|
||||
$stmt->closeCursor();
|
||||
|
||||
$this->elements = $elements;
|
||||
$this->page = $page;
|
||||
$this->total = $total;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_page()
|
||||
{
|
||||
return $this->page;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_previous_page()
|
||||
{
|
||||
$p_page = $this->page < 2 ? false : ($this->page - 1);
|
||||
|
||||
return $p_page;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_next_page()
|
||||
{
|
||||
$t_page = ceil($this->total / self::PER_PAGE);
|
||||
$n_page = $this->page >= $t_page ? false : $this->page + 1;
|
||||
|
||||
return $n_page;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return int
|
||||
*/
|
||||
protected static function usage_orders_sort($a, $b)
|
||||
{
|
||||
$comp = strcasecmp($a['usage'], $b['usage']);
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return int
|
||||
*/
|
||||
protected static function user_orders_sort($a, $b)
|
||||
{
|
||||
$comp = strcasecmp($a['usr_display'], $b['usr_display']);
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param DateTime $a
|
||||
* @param DateTime $b
|
||||
* @return int
|
||||
*/
|
||||
protected static function date_orders_sort(DateTime $a, DateTime $b)
|
||||
{
|
||||
$comp = $b->format('U') - $a->format('U');
|
||||
|
||||
if ($comp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $comp < 0 ? -1 : 1;
|
||||
}
|
||||
}
|
@@ -96,7 +96,6 @@
|
||||
<li><a href="#ftp">{% trans 'export:: FTP' %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
<div>
|
||||
{% if download.get_total_download() > 0 %}
|
||||
<div id="download">
|
||||
<div style="padding:10px; text-align: center;">
|
||||
@@ -244,7 +243,7 @@
|
||||
<hr />
|
||||
<form class="form-horizontal">
|
||||
<input type="hidden" name="lst" value="{{lst}}"/>
|
||||
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
|
||||
<input type="hidden" name="ssel" value="{{ssttid}}"/>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="order_usage">{% trans 'commande::utilisation prevue' %}</label>
|
||||
@@ -256,7 +255,7 @@
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="deadline">{% trans 'commande::deadline' %}</label>
|
||||
<div class="controls">
|
||||
<input class="datepicker" type="text" name="deadline" id="deadline" value="">
|
||||
<input class="datepicker" type="text" name="deadline" id="deadline" value="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -274,70 +273,70 @@
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_lastname">{% trans 'admin::compte-utilisateur nom' %} *</label>
|
||||
<div class="controls">
|
||||
<input id='usr_lastname' type="text" name="usr_nom" class="required" value="{{ user.get_lastname() }}">
|
||||
<input id='usr_lastname' type="text" name="usr_nom" class="required" value="{{ user.get_lastname() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_firstname">{% trans 'admin::compte-utilisateur prenom' %} *</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="usr_prenom" class="required" id="usr_firstname" value="{{ user.get_firstname() }}">
|
||||
<input type="text" name="usr_prenom" class="required" id="usr_firstname" value="{{ user.get_firstname() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_mail"> {% trans 'admin::compte-utilisateur email' %} *</label>
|
||||
<div class="controls">
|
||||
<input class="required" type="text" name="usr_mail" id="usr_mail" value="{{ user.get_email() }}">
|
||||
<input class="required" type="text" name="usr_mail" id="usr_mail" value="{{ user.get_email() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_tel">{% trans 'admin::compte-utilisateur telephone' %}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="tel" id="usr_tel" value="{{ user.get_tel() }}">
|
||||
<input type="text" name="tel" id="usr_tel" value="{{ user.get_tel() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_societe">{% trans 'admin::compte-utilisateur societe' %}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="societe" id="usr_societe" value="{{ user.get_company() }}">
|
||||
<input type="text" name="societe" id="usr_societe" value="{{ user.get_company() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_function">{% trans 'admin::compte-utilisateur poste' %}</label>
|
||||
<div class="controls">
|
||||
<input type="text" name="fonction" id="usr_fonction" value="{{ user.get_job() }}">
|
||||
<input type="text" name="fonction" id="usr_fonction" value="{{ user.get_job() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_address">{% trans 'admin::compte-utilisateur adresse' %} *</label>
|
||||
<div class="controls">
|
||||
<input class="required" type="text" name="adresse" id="usr_adresse" value="{{ user.get_address() }}">
|
||||
<input class="required" type="text" name="adresse" id="usr_adresse" value="{{ user.get_address() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_zip_code">{% trans 'admin::compte-utilisateur code postal' %} *</label>
|
||||
<div class="controls">
|
||||
<input id="usr_zip_code" type="text" name="cpostal" name="cpostal" class="required" value="{{ user.get_zipcode() }}">
|
||||
<input id="usr_zip_code" type="text" name="cpostal" name="cpostal" class="required" value="{{ user.get_zipcode() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="command_geoname_field">{% trans 'admin::compte-utilisateur ville' %} *</label>
|
||||
<div class="controls">
|
||||
<input class="required geoname_field" type="text" name="geonameid" id="command_geoname_field" geonameid="{{ user.get_geonameid() }}" value="{{ user.get_geonameid()|geoname_display }}">
|
||||
<input class="required geoname_field" type="text" name="geonameid" id="command_geoname_field" geonameid="{{ user.get_geonameid() }}" value="{{ user.get_geonameid()|geoname_display }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="usr_fax">{% trans 'admin::compte-utilisateur fax' %}</label>
|
||||
<div class="controls">
|
||||
<input type="text" id="usr_fax" name="fax" value="{{ user.get_fax() }}">
|
||||
<input type="text" id="usr_fax" name="fax" value="{{ user.get_fax() }}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -417,7 +416,6 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#ftp_form_selector').bind('change',function(){
|
||||
@@ -432,6 +430,7 @@
|
||||
}).trigger('change');
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
{% set success = app.request.query.get('success') %}
|
||||
{% set action = app.request.query.get('action') %}
|
||||
|
||||
<div id="order_manager">
|
||||
{% if success == '1' %}
|
||||
<div class="alert alert-success">
|
||||
<button type="button" class="close" data-dismiss="alert">×</button>
|
||||
@@ -24,8 +25,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{% set current_page = ordermanager.get_page() %}
|
||||
{% trans %}Page {{current_page}}{% endtrans %}
|
||||
{% trans %}Page {{page}}{% endtrans %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -39,9 +39,9 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for order in ordermanager %}
|
||||
{% for order in orders %}
|
||||
{% set deadline = order.get_deadline() | prettyDate %}
|
||||
<tr id="order_{{order.get_order_id()}}" class="order_row" {{ current_date > order.get_deadline() ? "style:text-decoration: line-through;": "" }}>
|
||||
<tr id="order_{{ order.get_order_id() }}" class="order_row" {{ current_date > order.get_deadline() ? "style=color:#777": "" }}>
|
||||
<td>{{ order.get_user().get_display_name() }}</td>
|
||||
<td>{{ order.get_created_on() | prettyDate }}</td>
|
||||
<td>
|
||||
@@ -61,17 +61,16 @@
|
||||
|
||||
<div class='well-small'>
|
||||
<ul class="pager">
|
||||
{% if ordermanager.get_previous_page() != false %}
|
||||
<li class="previous"><a class='self-ajax' href="{{ path('prod_orders', {'page': ordermanager.get_previous_page()}) }}"><i class="icon-arrow-left"></i>{% trans 'Previous' %}</a></li>
|
||||
{% if previousPage %}
|
||||
<li class="previous"><a class='self-ajax' href="{{ path('prod_orders', {'page': previousPage}) }}"><i class="icon-arrow-left"></i>{% trans 'Previous' %}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if ordermanager.get_next_page() != false %}
|
||||
<li class="next"><a class='self-ajax' href="{{ path('prod_orders', {'page': ordermanager.get_next_page()}) }}"><i class="icon-arrow-right"></i>{% trans 'Next' %}</a></li>
|
||||
{% if nextPage %}
|
||||
<li class="next"><a class='self-ajax' href="{{ path('prod_orders', {'page': nextPage}) }}"><i class="icon-arrow-right"></i>{% trans 'Next' %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
|
@@ -5,6 +5,7 @@
|
||||
<h1>{% trans %} {{ displayName }} wants to place an order {% endtrans %}</h1>
|
||||
</div>
|
||||
|
||||
<div id="order_manager">
|
||||
{% set success = app.request.query.get('success') %}
|
||||
{% set action = app.request.query.get('action') %}
|
||||
|
||||
@@ -53,11 +54,11 @@
|
||||
</div>
|
||||
|
||||
<div class="order_list well-small">
|
||||
<ul>
|
||||
{% for order_element_id,element in order %}
|
||||
<div id="order_wrapper_{{order.get_order_id()}}_{{element.get_base_id()}}_{{element.get_record_id()}}" class="order_wrapper thumbnail {% if element.get_order_master_id() == false %}selectable{% endif %}">
|
||||
<li>
|
||||
<div id="order_wrapper_{{order.get_order_id()}}_{{element.get_base_id()}}_{{element.get_record_id()}}" class="order_wrapper {% if element.get_order_master_id() == false %}selectable{% endif %}">
|
||||
{{ thumbnail.format(element.get_thumbnail() ,80, 80, '', session, true) }}
|
||||
<div class="caption">
|
||||
<p style='overflow:hidden;white-space:nowrap;text-overflow:ellipsis;'>{{ element.get_original_name() }}</p>
|
||||
{% if element.get_order_master_id() %}
|
||||
{% set name = element.get_order_master_name() %}
|
||||
{% if element.get_deny() == 1 %}
|
||||
@@ -67,21 +68,20 @@
|
||||
{% set title_send %}
|
||||
{% trans %}Forcer l'envoi du document{% endtrans %}
|
||||
{% endset %}
|
||||
<p>
|
||||
<button class='btn' type='button'><img style="cursor:help;" src="/skins/icons/delete.png" title="{{title|e}}" /></button>
|
||||
<button class='btn' type='button'><img style="cursor:pointer;" class="force_sender" src="/skins/icons/reload.png" title="{{title_send|e}}" /></button>
|
||||
</p>
|
||||
<img style="cursor:help;" src="/skins/icons/delete.png" title="{% spaceless %}{{title|e}}{% endspaceless %}" />
|
||||
<img style="cursor:pointer;" class="force_sender" src="/skins/icons/reload.png" title="{% spaceless %}{{title_send|e}}{% endspaceless %}" />
|
||||
{% else %}
|
||||
{% set title %}
|
||||
{% trans %}Document envoye par {{name}} {% endtrans %}
|
||||
{% endset %}
|
||||
<p><button class='btn' type='button'><img style="cursor:help;" src="/skins/icons/ok.png" title="{{title|e}}" /></button><p>
|
||||
<img style="cursor:help;" src="/skins/icons/ok.png" title="{% spaceless %}{{title|e}}{% endspaceless %}" />
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<input type="hidden" name="order_element_id" value="{{order_element_id}}"/>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="form-actions" style="color:#333;">
|
||||
@@ -92,10 +92,14 @@
|
||||
<img src="/skins/icons/loader000000.gif" class="activity_indicator" style="display:none;"/>
|
||||
<input name="order_id" type="hidden" value="{{ order.get_order_id() }}" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
if ($('#notification_box').is(':visible')) {
|
||||
$('#notification_trigger').trigger('mousedown');
|
||||
}
|
||||
|
||||
var dialog = p4.Dialog.get(1);
|
||||
var order_id = $('input[name=order_id]').val();
|
||||
|
||||
@@ -164,7 +168,7 @@ $(document).ready(function(){
|
||||
{
|
||||
var element_id = [];
|
||||
element_id.push($(this).closest('.order_wrapper').find('input[name=order_element_id]').val());
|
||||
do_send_documents(id, element_id, true);
|
||||
do_send_documents(order_id, element_id, true);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -208,7 +212,7 @@ function do_send_documents(order_id, elements_ids, force)
|
||||
|
||||
function deny_documents(order_id)
|
||||
{
|
||||
var dialog = get_dialog();
|
||||
var dialog = p4.Dialog.get(1);
|
||||
var cont = dialog.getDomElement();
|
||||
|
||||
var elements = $('.order_list .selectable.selected', cont);
|
||||
@@ -258,7 +262,7 @@ function deny_documents(order_id)
|
||||
|
||||
function send_documents(order_id)
|
||||
{
|
||||
var dialog = get_dialog();
|
||||
var dialog = p4.Dialog.get(1);
|
||||
var elements_ids = [];
|
||||
|
||||
$('.order_list .selectable.selected', dialog.getDomElement()).each(function(i,n){
|
||||
|
@@ -3,6 +3,8 @@
|
||||
require_once __DIR__ . '/../../../../PhraseanetWebTestCaseAuthenticatedAbstract.class.inc';
|
||||
require_once __DIR__ . '/../../../../../lib/Alchemy/Phrasea/Controller/Prod/Order.php';
|
||||
|
||||
use Alchemy\Phrasea\Controller\RecordsRequest;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
|
||||
{
|
||||
@@ -162,11 +164,10 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
|
||||
|
||||
private function createOneOrder($usage)
|
||||
{
|
||||
$exportOrder = new \set_exportorder(static::$records['record_1']->get_serialize_key(), '');
|
||||
$orderId = $exportOrder->order_available_elements(
|
||||
self::$user_alt2->get_id(), $usage, '+10 minutes'
|
||||
);
|
||||
$receveid = array(static::$records['record_1']->get_serialize_key() => static::$records['record_1']);
|
||||
|
||||
return new \set_order($orderId);
|
||||
return \set_order::create(
|
||||
$this->app['phraseanet.appbox'], new RecordsRequest($receveid, new ArrayCollection($receveid)), 'I need this photos', new \DateTime('+10 minutes')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -635,7 +635,7 @@ abstract class PhraseanetPHPUnitAbstract extends WebTestCase
|
||||
|
||||
$user->ACL()->give_access_to_base(array($base_id));
|
||||
|
||||
set_exportorder::set_order_admins(array($user->get_id()), $base_id);
|
||||
User_Adapter::set_order_admins(array($user->get_id()), $base_id);
|
||||
|
||||
$rights = array(
|
||||
'canputinalbum' => '1'
|
||||
|
@@ -2,6 +2,9 @@
|
||||
|
||||
require_once __DIR__ . '/../PhraseanetPHPUnitAuthenticatedAbstract.class.inc';
|
||||
|
||||
use Alchemy\Phrasea\Controller\RecordsRequest;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
class record_adapterTest extends PhraseanetPHPUnitAuthenticatedAbstract
|
||||
{
|
||||
/**
|
||||
@@ -49,12 +52,14 @@ class record_adapterTest extends PhraseanetPHPUnitAuthenticatedAbstract
|
||||
|
||||
$em->persist($basket);
|
||||
$em->flush();
|
||||
/**
|
||||
* @todo CHANGE
|
||||
*/
|
||||
$receveid = array(static::$records['record_1']->get_serialize_key() => static::$records['record_1']);
|
||||
|
||||
$export = new set_exportorder(static::$records['record_1']->get_serialize_key(), $basket->getId());
|
||||
|
||||
$orderId = $export->order_available_elements(self::$user->get_id(), 'ahaha', '+2 hours');
|
||||
|
||||
new set_order($orderId);
|
||||
return \set_order::create(
|
||||
$this->app['phraseanet.appbox'], new RecordsRequest($receveid, new ArrayCollection($receveid), $basket), 'I need this photos', new \DateTime('+10 minutes')
|
||||
);
|
||||
}
|
||||
|
||||
public function testGet_creation_date()
|
||||
|
@@ -2356,14 +2356,14 @@ function activeIcons()
|
||||
}
|
||||
else
|
||||
{
|
||||
datas.SSTTID = $('.SSTT.active').attr('id').split('_').slice(1,2).pop();
|
||||
datas.ssel = $('.SSTT.active').attr('id').split('_').slice(1,2).pop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($(this).hasClass('basket_element'))
|
||||
{
|
||||
datas.SSTTID = $('.SSTT.active').attr('id').split('_').slice(1,2).pop();
|
||||
datas.ssel = $('.SSTT.active').attr('id').split('_').slice(1,2).pop();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@@ -3053,6 +3053,15 @@ dans l'onglet thesaurus : arbres, menus contextuels
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
#order_manager .order_list li {
|
||||
display: inline-block;
|
||||
-webkit-border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid white;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
#order_manager .order_list .thumb {
|
||||
float: left;
|
||||
position: relative;
|
||||
|
@@ -3130,6 +3130,16 @@ dans l'onglet thesaurus : arbres, menus contextuels
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
#order_manager .order_list li {
|
||||
display: inline-block;
|
||||
-webkit-border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
border: 1px solid white;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
|
||||
#order_manager .order_list .thumb {
|
||||
float: left;
|
||||
position: relative;
|
||||
|
Reference in New Issue
Block a user