delete set_ordermanager & set_exportorder classes

This commit is contained in:
Nicolas Le Goff
2012-09-04 19:45:41 +02:00
parent 5e73786192
commit 74ce2341a2
18 changed files with 807 additions and 841 deletions

View File

@@ -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);
}
}

View File

@@ -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;
@@ -48,8 +50,8 @@ class Order implements ControllerProviderInterface
*/
$controllers->get('/', $this->call('displayOrders'))
->before(function(Request $request) use ($app) {
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
->bind('prod_orders');
/**
@@ -83,8 +85,8 @@ class Order implements ControllerProviderInterface
*/
$controllers->get('/{order_id}/', $this->call('displayOneOrder'))
->before(function(Request $request) use ($app) {
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
->bind('prod_order')
->assert('order_id', '\d+');
@@ -103,8 +105,8 @@ class Order implements ControllerProviderInterface
*/
$controllers->post('/{order_id}/send/', $this->call('sendOrder'))
->before(function(Request $request) use ($app) {
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
->bind('prod_order_send')
->assert('order_id', '\d+');
@@ -123,8 +125,8 @@ class Order implements ControllerProviderInterface
*/
$controllers->post('/{order_id}/deny/', $this->call('denyOrder'))
->before(function(Request $request) use ($app) {
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
$app['phraseanet.core']['Firewall']->requireOrdersAdmin($app);
})
->bind('prod_order_deny')
->assert('order_id', '\d+');
@@ -142,31 +144,65 @@ 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,
));
}
return $app->redirect($app['url_generator']->generate('prod_orders', array(
'success' => (int) $success,
'action' => 'send'
)));
'success' => (int) $success,
'action' => 'send'
)));
}
/**
@@ -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)
));
}
@@ -240,9 +291,9 @@ class Order implements ControllerProviderInterface
}
return $app->redirect($app['url_generator']->generate('prod_orders', array(
'success' => (int) $success,
'action' => 'send'
)));
'success' => (int) $success,
'action' => 'send'
)));
}
/**
@@ -280,9 +331,9 @@ class Order implements ControllerProviderInterface
}
return $app->redirect($app['url_generator']->generate('prod_orders', array(
'success' => (int) $success,
'action' => 'send'
)));
'success' => (int) $success,
'action' => 'send'
)));
}
/**

View File

@@ -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')

View File

@@ -67,7 +67,7 @@ class RecordsRequest extends ArrayCollection
{
return new ArrayCollection(
array_filter($this->toArray(), function(\record_adapter $record) {
return $record->is_grouping();
return $record->is_grouping();
})
);
}
@@ -107,12 +107,13 @@ 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 array $rightsColl
* @param array $rightsDatabox
* @param Application $app
* @param Request $request
* @param boolean $flattenStories
* @param array $rightsColl
* @param array $rightsDatabox
* @return RecordsRequest
*/
public static function fromRequest(Application $app, Request $request, $flattenStories = false, array $rightsColl = array(), array $rightsDatabox = array())
@@ -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;

View File

@@ -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';

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -96,21 +96,87 @@
<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;">
<h4>{% trans 'export:: telechargement' %}</h4>
<form method="post" target="_blank" action="/include/download.php" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
{% if download.get_total_download() > 0 %}
<div id="download">
<div style="padding:10px; text-align: center;">
<h4>{% trans 'export:: telechargement' %}</h4>
<form method="post" target="_blank" action="/include/download.php" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
{% for name, values in download.get_display_download() %}
{% if values.available > 0 %}
<div style="margin: 10px 0 20px 0; padding: 0 10px;">
<label for="download_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="download_{{name}}" name="obj[]" value="{{name}}" />
<input type="hidden" name="download_{{name}}" value="{{values.size}}" />
<input type="hidden" name="count_{{name}}" value="{{values.available}}" />
{{values.label}} {% if values.total != values.available %}{{values.available}}/{{values.total}}{% endif %} ({{values.size | formatOctets}})
</label>
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div>{% trans 'Les documents ne peuvent pas etre exportes' %}</div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
{% endfor %}
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_download" class="checkbox">
<input type="checkbox" name="businessfields" id="business_download" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
{% endif %}
{{ _self.choose_title('download', choose_export_title, default_export_title) }}
<div class="buttons_line">
<button type="button" class="download_button btn btn-inverse">{% trans 'boutton::telecharger'%}</button>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
</div>
</div>
<div id="sendmail">
<div style="padding:10px; text-align: center;">
<h4>{% trans 'export:: envoi par mail' %}</h4>
<form action="/include/sendmailpage.php" method="post" target="sendmail_target" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
<div>
{% trans 'export::mail: destinataire' %}
<input type="text" value="" name="destmail" class="required span4">
{% set my_email = user.get_email() %}
{% if my_email != '' %}
<label class="checkbox">
<input type="checkbox" name="reading_confirm" value="1" />
{% trans %}Recevoir un accuse de reception a {{my_email}}{% endtrans %}
</label>
{% else %}
<label class="checkbox">
{% trans 'Accuse de reception indisponible, vous n\'avez pas declare d\'adresse email' %}
<input type="checkbox" name="reading_confirm" value="1" readonly />
</label>
{% endif %}
<span style="font-style: italic; color: #999999;">{% trans 'Entrez plusieurs adresses email en les separant par des points-virgules' %}</span>
</div>
<div>
<p>{% trans 'export::mail: contenu du mail' %}</p>
<textarea rows="10" style="width:100%; white-space:pre;" name="textmail" id="sendmail_message"></textarea>
</div>
<div>
<p>{% trans 'export::mail: fichiers joint' %}</p>
{% for name, values in download.get_display_download() %}
{% if values.available > 0 %}
<div style="margin: 10px 0 20px 0; padding: 0 10px;">
<label for="download_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="download_{{name}}" name="obj[]" value="{{name}}" />
<input type="hidden" name="download_{{name}}" value="{{values.size}}" />
<input type="hidden" name="count_{{name}}" value="{{values.available}}" />
<label for="sendmail_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="sendmail_{{name}}" name="obj[]" value="{{name}}" />
{{values.label}} {% if values.total != values.available %}{{values.available}}/{{values.total}}{% endif %} ({{values.size | formatOctets}})
</label>
{% set title%}
@@ -119,7 +185,7 @@
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div>{% trans 'Les documents ne peuvent pas etre exportes' %}</div>
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
@@ -128,295 +194,227 @@
</div>
{% endif %}
{% endfor %}
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_download" class="checkbox">
<input type="checkbox" name="businessfields" id="business_download" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
{% endif %}
{{ _self.choose_title('download', choose_export_title, default_export_title) }}
<div class="buttons_line">
<button type="button" class="download_button btn btn-inverse">{% trans 'boutton::telecharger'%}</button>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
</div>
</div>
<div id="sendmail">
<div style="padding:10px; text-align: center;">
<h4>{% trans 'export:: envoi par mail' %}</h4>
<form action="/include/sendmailpage.php" method="post" target="sendmail_target" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
<div>
{% trans 'export::mail: destinataire' %}
<input type="text" value="" name="destmail" class="required span4">
{% set my_email = user.get_email() %}
{% if my_email != '' %}
<label class="checkbox">
<input type="checkbox" name="reading_confirm" value="1" />
{% trans %}Recevoir un accuse de reception a {{my_email}}{% endtrans %}
</label>
{% else %}
<label class="checkbox">
{% trans 'Accuse de reception indisponible, vous n\'avez pas declare d\'adresse email' %}
<input type="checkbox" name="reading_confirm" value="1" readonly />
</label>
{% endif %}
<span style="font-style: italic; color: #999999;">{% trans 'Entrez plusieurs adresses email en les separant par des points-virgules' %}</span>
</div>
<div>
<p>{% trans 'export::mail: contenu du mail' %}</p>
<textarea rows="10" style="width:100%; white-space:pre;" name="textmail" id="sendmail_message"></textarea>
</div>
<div>
<p>{% trans 'export::mail: fichiers joint' %}</p>
{% for name, values in download.get_display_download() %}
{% if values.available > 0 %}
<div style="margin: 10px 0 20px 0; padding: 0 10px;">
<label for="sendmail_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="sendmail_{{name}}" name="obj[]" value="{{name}}" />
{{values.label}} {% if values.total != values.available %}{{values.available}}/{{values.total}}{% endif %} ({{values.size | formatOctets}})
</label>
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_sendmail" class="checkbox">
<input type="checkbox" name="businessfields" id="business_sendmail" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
{% endif %}
{{ _self.choose_title('sendmail', choose_export_title, default_export_title) }}
<div class="buttons_line">
<button type="button" class="sendmail_button btn btn-inverse">{% trans 'boutton::envoyer'%}</button>
<img class="sendmail_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
<iframe style="display:none;" name="sendmail_target"></iframe>
</div>
</div>
{% endif %}
{% if download.get_total_order() > 0 %}
<div id="order">
{% for name, values in download.get_display_orderable() %}
{% if values.available > 0 %}
<div class='well-small'>
{% set docs_orderable = values.available %}
{% trans %}{{docs_orderable}} documents commandes{% endtrans %}
{% set docs_not_orderable = values.total - values.available %}
{% if docs_not_orderable > 0%}
{% trans %}{{docs_not_orderable}} documents ne peuvent pas etre commandes{% endtrans %}
{% endif %}
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_sendmail" class="checkbox">
<input type="checkbox" name="businessfields" id="business_sendmail" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
{% endif %}
{% endfor %}
<hr />
<form class="form-horizontal">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
<div class="control-group">
<label class="control-label" for="order_usage">{% trans 'commande::utilisation prevue' %}</label>
<div class="controls">
<textarea rows="5" name="use" id="order_usage"></textarea>
</div>
</div>
<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="">
</div>
</div>
<div class="control-group">
<label class="control-label" for="sexe">{% trans 'Civility' %}</label>
<div class="controls">
<select name="sexe" id="sexe">
<option {% if user.get_gender == 0 %}selected="selected"{% endif %} value="0">{% trans 'admin::compte-utilisateur:sexe: mademoiselle' %}</option>
<option {% if user.get_gender == 1 %}selected="selected"{% endif %} value="1">{% trans 'admin::compte-utilisateur:sexe: madame' %}</option>
<option {% if user.get_gender == 2 %}selected="selected"{% endif %} value="2">{% trans 'admin::compte-utilisateur:sexe: monsieur' %}</option>
</select>
</div>
</div>
<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() }}">
</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() }}">
</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() }}">
</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() }}">
</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() }}">
</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() }}">
</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() }}">
</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() }}">
</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 }}">
</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() }}">
</div>
</div>
<div class="form_actions buttons_line">
<button type="button" class="order_button btn btn-primary">{% trans 'boutton::commander'%}</button>
<img class="order_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
{{ _self.choose_title('sendmail', choose_export_title, default_export_title) }}
<div class="buttons_line">
<button type="button" class="sendmail_button btn btn-inverse">{% trans 'boutton::envoyer'%}</button>
<img class="sendmail_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
<iframe style="display:none;" name="sendmail_target"></iframe>
</div>
{% endif %}
{% if download.get_total_ftp() > 0 %}
<div id="ftp">
<div style="padding:10px; text-align: center;">
<h4>{% trans 'export:: FTP' %}</h4>
<form action="/include/exportsFTP.php" method="post" target="_blank" class="form-horizontal" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
<div class="control-group">
<label class="control-label" for="ftp_form_selector">
{% trans 'phraseanet:: prereglages'%}
</label>
<div class="controls">
<select id="ftp_form_selector" class="span3">
{% for datas in download.get_ftp_datas() %}
<option value="{{datas.usr_id}}">{{datas.name}}</option>
{% endfor %}
</select>
</div>
</div>
<div id="ftp_form">
<div id="ftp_form_stock">
{% for datas in download.get_ftp_datas() %}
{{ _self.print_ftp_form(datas) }}
</div>
{% endif %}
{% if download.get_total_order() > 0 %}
<div id="order">
{% for name, values in download.get_display_orderable() %}
{% if values.available > 0 %}
<div class='well-small'>
{% set docs_orderable = values.available %}
{% trans %}{{docs_orderable}} documents commandes{% endtrans %}
{% set docs_not_orderable = values.total - values.available %}
{% if docs_not_orderable > 0%}
{% trans %}{{docs_not_orderable}} documents ne peuvent pas etre commandes{% endtrans %}
{% endif %}
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
{% endfor %}
<hr />
<form class="form-horizontal">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssel" value="{{ssttid}}"/>
<div class="control-group">
<label class="control-label" for="order_usage">{% trans 'commande::utilisation prevue' %}</label>
<div class="controls">
<textarea rows="5" name="use" id="order_usage"></textarea>
</div>
</div>
<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="" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="sexe">{% trans 'Civility' %}</label>
<div class="controls">
<select name="sexe" id="sexe">
<option {% if user.get_gender == 0 %}selected="selected"{% endif %} value="0">{% trans 'admin::compte-utilisateur:sexe: mademoiselle' %}</option>
<option {% if user.get_gender == 1 %}selected="selected"{% endif %} value="1">{% trans 'admin::compte-utilisateur:sexe: madame' %}</option>
<option {% if user.get_gender == 2 %}selected="selected"{% endif %} value="2">{% trans 'admin::compte-utilisateur:sexe: monsieur' %}</option>
</select>
</div>
</div>
<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() }}"/>
</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() }}"/>
</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() }}"/>
</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() }}"/>
</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() }}"/>
</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() }}"/>
</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() }}"/>
</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() }}"/>
</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 }}" />
</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() }}"/>
</div>
</div>
<div class="form_actions buttons_line">
<button type="button" class="order_button btn btn-primary">{% trans 'boutton::commander'%}</button>
<img class="order_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
</div>
{% endif %}
{% if download.get_total_ftp() > 0 %}
<div id="ftp">
<div style="padding:10px; text-align: center;">
<h4>{% trans 'export:: FTP' %}</h4>
<form action="/include/exportsFTP.php" method="post" target="_blank" class="form-horizontal" style="text-align: left;">
<input type="hidden" name="lst" value="{{lst}}"/>
<input type="hidden" name="ssttid" value="{{ssttid}}"/>
<div class="control-group">
<label class="control-label" for="ftp_form_selector">
{% trans 'phraseanet:: prereglages'%}
</label>
<div class="controls">
<select id="ftp_form_selector" class="span3">
{% for datas in download.get_ftp_datas() %}
<option value="{{datas.usr_id}}">{{datas.name}}</option>
{% endfor %}
</select>
</div>
<div>
<p>{% trans 'export::mail: fichiers joint' %}</p>
{% for name, values in download.get_display_ftp() %}
{% if values.available > 0 %}
<div style="margin: 10px 0 20px 0; padding: 0 10px;">
<label for="ftp_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="ftp_{{name}}" name="obj[]" value="{{name}}" />
{{values.label}} {% if values.total != values.available %}{{values.available}}/{{values.total}}{% endif %} ({{values.size | formatOctets}}))
</label>
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div id="ftp_form">
<div id="ftp_form_stock">
{% for datas in download.get_ftp_datas() %}
{{ _self.print_ftp_form(datas) }}
{% endfor %}
</div>
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_ftp" class="checkbox">
<input type="checkbox" name="businessfields" id="business_ftp" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
{% endif %}
<div class="buttons_line">
<button type="button" class="tryftp_button btn btn-inverse">{% trans 'boutton::essayer'%}</button>
<img class="tryftp_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="ftp_button btn btn-inverse">{% trans 'boutton::envoyer'%}</button>
<img class="ftp_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
<div>
<p>{% trans 'export::mail: fichiers joint' %}</p>
{% for name, values in download.get_display_ftp() %}
{% if values.available > 0 %}
<div style="margin: 10px 0 20px 0; padding: 0 10px;">
<label for="ftp_{{name}}" class="checkbox">
<input class="{{values.class}}" type="checkbox" id="ftp_{{name}}" name="obj[]" value="{{name}}" />
{{values.label}} {% if values.total != values.available %}{{values.available}}/{{values.total}}{% endif %} ({{values.size | formatOctets}}))
</label>
{% set title%}
{% trans 'Documents indisponibles' %}
{% endset %}
{% if values.refused|length > 0 %}
<a href="#" class="undisposable_link" title="{{title|e}}"> + </a>
<div style="display:none;" class="undisposable">
<div><i>{% trans 'La sous resolution n\'est pas disponible pour les documents suivants' %}</i></div>
{% for datas in values.refused%}
{{ thumbnail.format(datas, 80, 80,'', session, true) }}
{% endfor %}
</div>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
{% if download.has_business_fields_access() %}
<div class="businessfields" style="margin-left:20px;display:none;">
<label for="business_ftp" class="checkbox">
<input type="checkbox" name="businessfields" id="business_ftp" value="1" />
{% trans 'Include Business-fields in caption' %}
</label>
</div>
</form>
</div>
{% endif %}
<div class="buttons_line">
<button type="button" class="tryftp_button btn btn-inverse">{% trans 'boutton::essayer'%}</button>
<img class="tryftp_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="ftp_button btn btn-inverse">{% trans 'boutton::envoyer'%}</button>
<img class="ftp_button_loader" src="/skins/icons/loader404040.gif" style="visibility:hidden;margin:0 5px;"/>
<button type="button" class="close_button btn btn-inverse">{% trans 'boutton::annuler'%}</button>
</div>
</form>
</div>
<script type="text/javascript">
$(document).ready(function(){
@@ -432,8 +430,9 @@
}).trigger('change');
});
</script>
{% endif %}
</div>
</div>
{% endif %}
</div>
<script type="text/javascript">
function check_subdefs(container)

View File

@@ -1,78 +1,77 @@
{% set success = app.request.query.get('success') %}
{% set action = app.request.query.get('action') %}
{% if success == '1' %}
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
{% if action == 'order' %}
{% trans 'The records have been properly ordered' %}
{% elseif action == 'send' %}
{% trans 'Order has been sent' %}
{% elseif action == 'deny' %}
{% trans 'Order has been denied' %}
{% endif %}
</div>
{% elseif success == '0'%}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{% trans 'An error occured, please retry or contact an admin if problem persists' %}
</div>
{% endif %}
<div id="order_manager">
{% if success == '1' %}
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
{% if action == 'order' %}
{% trans 'The records have been properly ordered' %}
{% elseif action == 'send' %}
{% trans 'Order has been sent' %}
{% elseif action == 'deny' %}
{% trans 'Order has been denied' %}
{% endif %}
</div>
{% elseif success == '0'%}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{% trans 'An error occured, please retry or contact an admin if problem persists' %}
</div>
{% endif %}
<div class='well' style="color:#333">
<table class="table">
<thead>
<tr>
<th>
{% set current_page = ordermanager.get_page() %}
{% trans %}Page {{current_page}}{% endtrans %}
</th>
</tr>
</thead>
<thead>
<tr>
<th>{% trans 'Utilisateur' %}</th>
<th>{% trans 'Date de demande' %}</th>
<th>{% trans 'Deadline' %}</th>
<th>{% trans 'Utilisation prevue' %}</th>
<th>{% trans 'Statut' %}</th>
</tr>
</thead>
<tbody>
{% for order in ordermanager %}
{% 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;": "" }}>
<td>{{order.get_user().get_display_name()}}</td>
<td>{{order.get_created_on() | prettyDate }}</td>
<td>
{% if deadline != '' %}
{{deadline}}
{% else %}
{% trans 'Aucune' %}
{% endif %}
</td>
<td>{{order.get_usage()|raw}}</td>
<td>{% if order.get_todo() == 0%}<img src="/skins/icons/ok.png" />{% endif %}</td>
<div class='well' style="color:#333">
<table class="table">
<thead>
<tr>
<th>
{% trans %}Page {{page}}{% endtrans %}
</th>
</tr>
{% endfor %}
</tbody>
</table>
</thead>
<thead>
<tr>
<th>{% trans 'Utilisateur' %}</th>
<th>{% trans 'Date de demande' %}</th>
<th>{% trans 'Deadline' %}</th>
<th>{% trans 'Utilisation prevue' %}</th>
<th>{% trans 'Statut' %}</th>
</tr>
</thead>
<tbody>
{% 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=color:#777": "" }}>
<td>{{ order.get_user().get_display_name() }}</td>
<td>{{ order.get_created_on() | prettyDate }}</td>
<td>
{% if deadline != '' %}
{{deadline}}
{% else %}
{% trans 'Aucune' %}
{% endif %}
</td>
<td>{{ order.get_usage()|raw }}</td>
<td>{% if order.get_todo() == 0 %}<img src="/skins/icons/ok.png" />{% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class='well-small'>
<ul class="pager">
{% 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 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>
<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>
{% 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>
{% endif %}
</ul>
</div>
<script type="text/javascript">
$(document).ready(function(){

View File

@@ -5,97 +5,101 @@
<h1>{% trans %} {{ displayName }} wants to place an order {% endtrans %}</h1>
</div>
{% set success = app.request.query.get('success') %}
{% set action = app.request.query.get('action') %}
<div id="order_manager">
{% set success = app.request.query.get('success') %}
{% set action = app.request.query.get('action') %}
{% if success == '1' %}
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
{% if action == 'send' %}
{% trans 'Order has been sent' %}
{% elseif action == 'deny' %}
{% trans 'Order has been denied' %}
{% endif %}
</div>
{% elseif success == '0'%}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{% trans 'An error occured, please retry or contact an admin if problem persists' %}
</div>
{% endif %}
<div class="well">
<table class="table" style="color:#333;">
<tr>
<td>{% trans 'Destinataire' %}</td>
<td>{{ displayName }}({{ order.get_user().get_email() }})</td>
</tr>
<tr>
<td>{% trans 'Date de commande' %}</td>
<td>{{ order.get_created_on() | prettyDate }}</td>
</tr>
<tr>
<td>{% trans 'Deadline' %}</td>
<td>{{ order.get_deadline() | prettyDate }}</td>
</tr>
<tr>
<td>{% trans 'Utilisation prevue' %}</td>
<td>{{ order.get_usage()|raw }}</td>
</tr>
<tr>
<td>{% trans 'Nombre total d\'element commandes' %}</td>
<td>{{ order.get_total() }}</td>
</tr>
</table>
</div>
<div class="alert">
{% trans 'Il se peux que vous ne voyez pas tous les elements. Vous ne verrez que les elements correspondants aux collections sur lesquelles vous gerez les commandes' %}
</div>
<div class="order_list well-small">
{% 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 %}">
{{ 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 %}
{% set title %}
{% trans %}Document refuse par {{name}} {% endtrans %}
{% endset %}
{% 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>
{% 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>
{% endif %}
{% endif %}
</div>
<input type="hidden" name="order_element_id" value="{{order_element_id}}"/>
{% if success == '1' %}
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
{% if action == 'send' %}
{% trans 'Order has been sent' %}
{% elseif action == 'deny' %}
{% trans 'Order has been denied' %}
{% endif %}
</div>
{% endfor %}
</div>
{% elseif success == '0'%}
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
{% trans 'An error occured, please retry or contact an admin if problem persists' %}
</div>
{% endif %}
<div class="form-actions" style="color:#333;">
{% trans 'Selectionnez des documents et ' %}
<button class="btn btn-primary send">Envoyer</button>
<button class="btn deny">Refuser</button>
<button class="order_launcher btn">{% trans 'Retour aux commandes' %}</button>
<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 class="well">
<table class="table" style="color:#333;">
<tr>
<td>{% trans 'Destinataire' %}</td>
<td>{{ displayName }}({{ order.get_user().get_email() }})</td>
</tr>
<tr>
<td>{% trans 'Date de commande' %}</td>
<td>{{ order.get_created_on() | prettyDate }}</td>
</tr>
<tr>
<td>{% trans 'Deadline' %}</td>
<td>{{ order.get_deadline() | prettyDate }}</td>
</tr>
<tr>
<td>{% trans 'Utilisation prevue' %}</td>
<td>{{ order.get_usage()|raw }}</td>
</tr>
<tr>
<td>{% trans 'Nombre total d\'element commandes' %}</td>
<td>{{ order.get_total() }}</td>
</tr>
</table>
</div>
<div class="alert">
{% trans 'Il se peux que vous ne voyez pas tous les elements. Vous ne verrez que les elements correspondants aux collections sur lesquelles vous gerez les commandes' %}
</div>
<div class="order_list well-small">
<ul>
{% for order_element_id,element in order %}
<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) }}
{% if element.get_order_master_id() %}
{% set name = element.get_order_master_name() %}
{% if element.get_deny() == 1 %}
{% set title %}
{% trans %}Document refuse par {{name}} {% endtrans %}
{% endset %}
{% set title_send %}
{% trans %}Forcer l'envoi du document{% endtrans %}
{% endset %}
<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 %}
<img style="cursor:help;" src="/skins/icons/ok.png" title="{% spaceless %}{{title|e}}{% endspaceless %}" />
{% endif %}
{% endif %}
<input type="hidden" name="order_element_id" value="{{order_element_id}}"/>
</div>
</li>
{% endfor %}
</ul>
</div>
<div class="form-actions" style="color:#333;">
{% trans 'Selectionnez des documents et ' %}
<button class="btn btn-primary send">Envoyer</button>
<button class="btn deny">Refuser</button>
<button class="order_launcher btn">{% trans 'Retour aux commandes' %}</button>
<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){

View File

@@ -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
{
@@ -36,7 +38,7 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
public function testCreateOrder()
{
$this->client->request('POST', '/order/', array(
'lst' => static::$records['record_1']->get_serialize_key(),
'lst' => static::$records['record_1']->get_serialize_key(),
'deadline' => '+10 minutes'
));
@@ -49,7 +51,7 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
public function testCreateOrderJson()
{
$this->XMLHTTPRequest('POST', '/order/', array(
'lst' => static::$records['record_1']->get_serialize_key(),
'lst' => static::$records['record_1']->get_serialize_key(),
'deadline' => '+10 minutes'
));
@@ -88,7 +90,7 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
{
$order = $this->createOneOrder('I need this pictures');
$parameters = array();
foreach($order as $id => $element) {
foreach ($order as $id => $element) {
$parameters[] = $id;
}
$this->client->request('POST', '/order/' . $order->get_order_id() . '/send/', $parameters);
@@ -105,10 +107,10 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
{
$order = $this->createOneOrder('I need this pictures');
$parameters = array();
foreach($order as $id => $element) {
foreach ($order as $id => $element) {
$parameters[] = $id;
}
$this->XMLHTTPRequest('POST', '/order/' . $order->get_order_id() . '/send/',$parameters);
$this->XMLHTTPRequest('POST', '/order/' . $order->get_order_id() . '/send/', $parameters);
$this->assertTrue($this->client->getResponse()->isOk());
$response = $this->client->getResponse();
$this->assertTrue($response->isOk());
@@ -116,7 +118,7 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
$content = json_decode($response->getContent());
$this->assertTrue(is_object($content));
$this->assertObjectHasAttribute('success', $content, $response->getContent());
$this->assertTrue(! ! $content->success, $response->getContent());
$this->assertTrue( ! ! $content->success, $response->getContent());
$this->assertObjectHasAttribute('msg', $content, $response->getContent());
$this->assertObjectHasAttribute('order_id', $content, $response->getContent());
}
@@ -128,7 +130,7 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
{
$order = $this->createOneOrder('I need this pictures');
$parameters = array();
foreach($order as $id => $element) {
foreach ($order as $id => $element) {
$parameters[] = $id;
}
$this->client->request('POST', '/order/' . $order->get_order_id() . '/deny/', $parameters);
@@ -145,10 +147,10 @@ class OrderTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
{
$order = $this->createOneOrder('I need this pictures');
$parameters = array();
foreach($order as $id => $element) {
foreach ($order as $id => $element) {
$parameters[] = $id;
}
$this->XMLHTTPRequest('POST', '/order/' . $order->get_order_id() . '/deny/',$parameters);
$this->XMLHTTPRequest('POST', '/order/' . $order->get_order_id() . '/deny/', $parameters);
$response = $this->client->getResponse();
$this->assertTrue($response->isOk());
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
@@ -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')
);
}
}

View File

@@ -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'

View File

@@ -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()

View File

@@ -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
{

View File

@@ -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;

View File

@@ -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;