mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-08 02:24:26 +00:00

* PHRAS-3667_refresh-one-basket - new "wip" icon - deploying a basket refreshes icons todo: - refreh also when closing ? - refresh on notification about "share ok" ? - refresh after real-time op (e.g. share a simple basket ==> wip) ? * PHRAS-3667 : try to move wz/basket menus (failed) * PHRAS-3667_refresh-one-basket - fix : stories deployed looks empty
194 lines
6.6 KiB
PHP
194 lines
6.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2016 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Alchemy\Phrasea\Helper;
|
|
|
|
use Alchemy\Phrasea\Model\Entities\Basket as BasketEntity;
|
|
use Alchemy\Phrasea\Model\Repositories\BasketRepository;
|
|
use Alchemy\Phrasea\Model\Repositories\StoryWZRepository;
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
|
|
class WorkZone extends Helper
|
|
{
|
|
const BASKETS = 'baskets';
|
|
const STORIES = 'stories';
|
|
const VALIDATIONS = 'validations';
|
|
|
|
/**
|
|
* Returns an ArrayCollection containing three keys :
|
|
* - self::BASKETS : an ArrayCollection of the actives baskets (Non Archived)
|
|
* - self::STORIES : an ArrayCollection of working stories
|
|
* - self::VALIDATIONS : the validation people are waiting from me
|
|
*
|
|
* @param null|string $sort "date"|"name"
|
|
* @param null|int $onlyId return infos only for this basket
|
|
* @return ArrayCollection
|
|
*/
|
|
public function getContent($sort = null, $onlyId = null)
|
|
{
|
|
/* @var $repo_baskets BasketRepository */
|
|
$repo_baskets = $this->app['repo.baskets'];
|
|
|
|
$sort = in_array($sort, ['date', 'name']) ? $sort : 'name';
|
|
|
|
$ret = new ArrayCollection();
|
|
|
|
$allClasses = [
|
|
"push-block",
|
|
"push_rec",
|
|
"feedback-block",
|
|
"vote_sent",
|
|
"share-block",
|
|
"share_sent",
|
|
"basket-block",
|
|
"basket",
|
|
"vote_rec",
|
|
"share_rec",
|
|
"basket_wip"
|
|
];
|
|
|
|
/**
|
|
* first block : my baskets
|
|
* @see templates/web/prod/WorkZone/Macros.html.twig "list baskets"
|
|
*/
|
|
$baskets = $repo_baskets->findActiveByUser($this->app->getAuthenticatedUser(), $sort);
|
|
|
|
// force creation of a default basket
|
|
if (count($baskets) === 0) {
|
|
$basket = new BasketEntity();
|
|
|
|
$basket->setName($this->app->trans('Default basket'));
|
|
$basket->setUser($this->app->getAuthenticatedUser());
|
|
|
|
$this->app['orm.em']->persist($basket);
|
|
$this->app['orm.em']->flush();
|
|
$baskets = [$basket];
|
|
}
|
|
$_baskets = []; // new array, filtered
|
|
foreach ($baskets as $k=>$basket) {
|
|
if(!is_null($onlyId) && $basket->getId() != $onlyId) {
|
|
continue;
|
|
}
|
|
|
|
// ! do not invert formula because isAwareByUserParticipant(...) can return null
|
|
$isRead = !$basket->isRead() == false || ($basket->isAwareByUserParticipant($this->app->getAuthenticatedUser()) === false);
|
|
$classes = [];
|
|
|
|
// I own this basket
|
|
if($basket->getPusher()) {
|
|
// i own this basket, but it was pushed to me
|
|
$classes[] = "push-block";
|
|
$classes[] = is_null($basket->getWip()) ? "push_rec" : "basket_wip";
|
|
}
|
|
$nparticipants = $basket->getParticipants()->count();
|
|
if($nparticipants > 0) {
|
|
// i own this basket and there are participants (maybe me)
|
|
if($basket->isVoteBasket()) {
|
|
// i am the owner / sender(?) of this "vote" (=feedback) basket
|
|
$classes[] = "feedback-block";
|
|
$classes[] = is_null($basket->getWip()) ? "vote_sent" : "basket_wip";
|
|
}
|
|
else {
|
|
// simple share
|
|
$classes[] = "share-block";
|
|
$classes[] = is_null($basket->getWip()) ? "share_sent" : "basket_wip";
|
|
}
|
|
}
|
|
if(empty($classes)) {
|
|
// simple basket
|
|
$classes[] = "basket-block";
|
|
$classes[] = is_null($basket->getWip()) ? "basket" : "basket_wip";
|
|
}
|
|
|
|
$classes = array_unique($classes);
|
|
|
|
$_baskets[$k] = [
|
|
'object' => $basket,
|
|
'data' => [
|
|
'isRead' => $isRead,
|
|
'classes' => $classes,
|
|
'removeClasses' => array_diff($allClasses, $classes)
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* second block : baskets i'm only participant
|
|
* @see templates/web/prod/WorkZone/Macros.html.twig "list feedbacks (validations) AND SHARES"
|
|
*/
|
|
$validations = $repo_baskets->findActiveValidationByUser($this->app->getAuthenticatedUser(), $sort);
|
|
$_validations = []; // new array, filtered
|
|
foreach ($validations as $k => $basket) {
|
|
if(!is_null($onlyId) && $basket->getId() != $onlyId) {
|
|
continue;
|
|
}
|
|
|
|
// ! do not invert formula because isAwareByUserParticipant(...) can return null
|
|
$isRead = !$basket->isRead() == false || ($basket->isAwareByUserParticipant($this->app->getAuthenticatedUser()) === false);
|
|
$classes = [];
|
|
|
|
if($basket->isVoteBasket()) {
|
|
$classes[] = "feedback-block";
|
|
$classes[] = is_null($basket->getWip()) ? "vote_rec" : "basket_wip";
|
|
}
|
|
else {
|
|
$classes[] = "share-block";
|
|
$classes[] = is_null($basket->getWip()) ? "share_rec" : "basket_wip";
|
|
}
|
|
|
|
$classes = array_unique($classes);
|
|
|
|
$_validations[$k] = [
|
|
'object' => $basket,
|
|
'data' => [
|
|
'isRead' => $isRead,
|
|
'classes' => $classes,
|
|
'removeClasses' => array_diff($allClasses, $classes)
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* third block : stories
|
|
* @var $repo_stories StoryWZRepository
|
|
*/
|
|
$repo_stories = $this->app['repo.story-wz'];
|
|
$stories = $repo_stories->findByUser($this->app, $this->app->getAuthenticatedUser(), $sort);
|
|
$_stories = []; // new array, filtered
|
|
// be consistant
|
|
foreach ($stories as $k => $story) {
|
|
if(!is_null($onlyId) && $story->getId() != $onlyId) {
|
|
continue;
|
|
}
|
|
|
|
$_stories[$k] = [
|
|
'object' => $story,
|
|
'data' => [
|
|
// no special data for stories now
|
|
'classes' => [],
|
|
'removeClasses' => []
|
|
]
|
|
];
|
|
}
|
|
|
|
|
|
$ret->set(self::BASKETS, $_baskets);
|
|
$ret->set(self::VALIDATIONS, $_validations);
|
|
$ret->set(self::STORIES, $_stories);
|
|
|
|
return $ret;
|
|
}
|
|
|
|
protected function sortBaskets(array $baskets)
|
|
{
|
|
}
|
|
}
|