This is a combination of 33 commits.

- Squashed Pull request #1730
- Squashed Pull request #1741
- Squashed Pull request #1742
- Squash merge branch 4.0
- Squashed Pull request #1744
- Squashed Pull request #1746
- Squashed merge branch 4.0
- Squashed merge branch 4.0
- Squashed merge branch 4.0
- Squashed merge branch 4.0
- Squashed Pull request #1758
- Avoid using imagine/imagine alias as it is causing install issues
- Squashed merge branch 4.0
- Squashed Pull request #1763
- Squashed merge branch 4.0
- Squash of 6 commits
- Squashed merge branch 4.0
- This is a combination of 2 commits.
- Squashed Pull request #1775
- Squashed Pull request #1777
- Squashed Pull request #1779
- Squashed Pull request #1780
- Squashed Pull request #1782
- Adds a Pull request template
- Squased Pull request #1783
- Squash Pull request #1786
- Squashed Pull request #1796
- Squashed merge branch 4.0
- Squash Pull request #1791
- Squashed merge branch 4.0
- Squashed Pull request #1808
- Squashed Pull request #1811
- Squashed Pull request #1809
This commit is contained in:
Benoît Burnichon
2016-04-19 19:21:04 +02:00
parent 01b06c5144
commit 1e18b3e69f
179 changed files with 5652 additions and 3030 deletions

View File

@@ -10,8 +10,7 @@
*/
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Model\Entities\Basket;
use Alchemy\Phrasea\Model\Entities\BasketElement;
use Alchemy\Phrasea\Model\Entities\FeedEntry;
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Guzzle\Http\Url;
@@ -19,69 +18,59 @@ use Guzzle\Http\Url;
class record_preview extends record_adapter
{
/**
*
* @var string
*/
protected $env;
/**
*
* @var int
*/
protected $total;
/**
*
* @var string
*/
protected $name;
/**
*
* @var mixed content
*/
protected $container;
/**
*
* @var mixed content
*/
protected $train;
/**
*
* @var string
*/
protected $title;
/**
*
* @var Array
* @var array
*/
protected $short_history;
/**
*
* @var media
* @var media_adapter
*/
protected $view_popularity;
/**
*
* @var media
* @var media_adapter
*/
protected $refferer_popularity;
/**
*
* @var media
* @var media_adapter
*/
protected $download_popularity;
protected $original_item;
protected $pos;
protected$search_engine;
protected $searchEngine;
protected $query;
protected $options;
@@ -100,8 +89,13 @@ class record_preview extends record_adapter
if (null === $search_engine) {
throw new \LogicException('Search Engine should be provided');
}
if (!$options) {
$options = new SearchEngineOptions();
}
$options->setFirstResult($pos);
$options->setMaxResults(1);
$results = $search_engine->query($query, (int) ($pos), 1, $options);
$results = $search_engine->query($query, $options);
if ($results->getResults()->isEmpty()) {
throw new Exception('Record introuvable');
@@ -124,11 +118,11 @@ class record_preview extends record_adapter
if ($pos == 0) {
$number = 0;
} else {
$children = $this->container->get_children();
$children = $this->container->getChildren();
foreach ($children as $child) {
$sbas_id = $child->get_sbas_id();
$sbas_id = $child->getDataboxId();
$this->original_item = $child;
$record_id = $child->get_record_id();
$record_id = $child->getRecordId();
if ($child->getNumber() == $pos)
break;
}
@@ -141,34 +135,25 @@ class record_preview extends record_adapter
$Basket = $app['converter.basket']->convert($contId);
$app['acl.basket']->hasAccess($Basket, $app->getAuthenticatedUser());
/* @var $Basket Basket */
$this->container = $Basket;
$this->total = $Basket->getElements()->count();
$i = 0;
$first = true;
foreach ($Basket->getElements() as $element) {
/* @var $element BasketElement */
$i ++;
if ($first) {
if ($element->getOrd() == $pos || $first) {
$this->original_item = $element;
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
$this->name = $Basket->getName();
$number = $element->getOrd();
}
$first = false;
if ($element->getOrd() == $pos) {
$this->original_item = $element;
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
$sbas_id = $element->getSbasId();
$record_id = $element->getRecordId();
$this->name = $Basket->getName();
$number = $element->getOrd();
$first = false;
}
}
break;
case "FEED":
/** @var FeedEntry $entry */
$entry = $app['repo.feed-entries']->find($contId);
$this->container = $entry;
@@ -178,25 +163,24 @@ class record_preview extends record_adapter
foreach ($entry->getItems() as $element) {
$i ++;
if ($first) {
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
$this->name = $entry->getTitle();
$this->original_item = $element;
$number = $element->getOrd();
}
$first = false;
if ($element->getOrd() == $pos) {
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
if ($element->getOrd() == $pos || $first) {
$sbas_id = $element->getSbasId();
$record_id = $element->getRecordId();
$this->name = $entry->getTitle();
$this->original_item = $element;
$number = $element->getOrd();
$first = false;
}
}
break;
default:
throw new InvalidArgumentException(sprintf('Expects env argument to one of (RESULT, REG, BASK, FEED) got %s', $env));
}
if (!(isset($sbas_id) && isset($record_id))) {
throw new Exception('No record could be found');
}
parent::__construct($app, $sbas_id, $record_id, $number);
}
@@ -208,9 +192,11 @@ class record_preview extends record_adapter
switch ($this->env) {
case 'RESULT':
$perPage = 56;
$index = ($this->pos - 3) < 0 ? 0 : ($this->pos - 3);
$results = $this->searchEngine->query($this->query, $index, $perPage, $this->options);
$options = $this->options ?: new SearchEngineOptions();
$options->setFirstResult(($this->pos - 3) < 0 ? 0 : ($this->pos - 3));
$options->setMaxResults(56);
$results = $this->searchEngine->query($this->query, $options);
$this->train = $results->getResults()->toArray();
break;
@@ -226,22 +212,23 @@ class record_preview extends record_adapter
}
/**
*
* @return boolean
* @return bool
*/
public function is_from_result()
{
return $this->env == 'RESULT';
}
/**
* @return bool
*/
public function is_from_feed()
{
return $this->env == 'FEED';
}
/**
*
* @return boolean
* @return bool
*/
public function is_from_basket()
{
@@ -249,8 +236,7 @@ class record_preview extends record_adapter
}
/**
*
* @return boolean
* @return bool
*/
public function is_from_reg()
{
@@ -272,7 +258,7 @@ class record_preview extends record_adapter
return $this->title;
}
$this->title = collection::getLogo($this->get_base_id(), $this->app) . ' ';
$this->title = collection::getLogo($this->getBaseId(), $this->app) . ' ';
switch ($this->env) {
@@ -303,7 +289,6 @@ class record_preview extends record_adapter
}
/**
*
* @return mixed content
*/
public function get_container()
@@ -312,8 +297,7 @@ class record_preview extends record_adapter
}
/**
*
* @return Array
* @return array
*/
public function get_short_history()
{
@@ -323,16 +307,13 @@ class record_preview extends record_adapter
$tab = [];
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($this->get_base_id(), 'canreport');
$databox = $this->app->findDataboxById($this->get_sbas_id());
$connsbas = $databox->get_connection();
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($this->getBaseId(), 'canreport');
$sql = 'SELECT d . * , l.user, l.usrid as usr_id, l.site
FROM log_docs d, log l
WHERE d.log_id = l.id
AND d.record_id = :record_id ';
$params = [':record_id' => $this->get_record_id()];
$params = [':record_id' => $this->getRecordId()];
if (! $report) {
$sql .= ' AND ((l.usrid = :usr_id AND l.site= :site) OR action="add")';
@@ -342,12 +323,7 @@ class record_preview extends record_adapter
$sql .= 'ORDER BY d.date, usrid DESC';
$stmt = $connsbas->prepare($sql);
$stmt->execute($params);
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
foreach ($rs as $row) {
foreach ($this->getDataboxConnection()->executeQuery($sql, $params)->fetchAll(PDO::FETCH_ASSOC) as $row) {
$hour = $this->app['date-formatter']->getPrettyString(new DateTime($row['date']));
if ( ! isset($tab[$hour]))
@@ -374,7 +350,7 @@ class record_preview extends record_adapter
if ( ! in_array($row['final'], $tab[$hour][$site][$action][$row['usr_id']]['final'])) {
if ($action == 'collection') {
$tab[$hour][$site][$action][$row['usr_id']]['final'][] = phrasea::baseFromColl($this->get_sbas_id(), $row['final'], $this->app);
$tab[$hour][$site][$action][$row['usr_id']]['final'][] = phrasea::baseFromColl($this->getDataboxId(), $row['final'], $this->app);
} else {
$tab[$hour][$site][$action][$row['usr_id']]['final'][] = $row['final'];
}
@@ -390,8 +366,7 @@ class record_preview extends record_adapter
}
/**
*
* @return media_image
* @return media_adapter
*/
public function get_view_popularity()
{
@@ -400,7 +375,7 @@ class record_preview extends record_adapter
}
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base(
$this->get_base_id(), 'canreport');
$this->getBaseId(), 'canreport');
if ( ! $report && ! $this->app['conf']->get(['registry', 'webservices', 'google-charts-enabled'])) {
$this->view_popularity = false;
@@ -429,19 +404,14 @@ class record_preview extends record_adapter
AND site_id = :site
GROUP BY datee ORDER BY datee ASC';
$databox = $this->app->findDataboxById($this->get_sbas_id());
$connsbas = $databox->get_connection();
$stmt = $connsbas->prepare($sql);
$stmt->execute(
[
':record_id' => $this->get_record_id(),
':site' => $this->app['conf']->get(['main', 'key'])
]
);
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
$result = $this->getDataboxConnection()
->executeQuery($sql, [
':record_id' => $this->getRecordId(),
':site' => $this->app['conf']->get(['main', 'key'])
])
->fetchAll(PDO::FETCH_ASSOC);
foreach ($rs as $row) {
foreach ($result as $row) {
if (isset($views[$row['datee']])) {
$views[$row['datee']] = (int) $row['views'];
$top = max((int) $row['views'], $top);
@@ -480,8 +450,7 @@ class record_preview extends record_adapter
}
/**
*
* @return media
* @return media_adapter
*/
public function get_refferer_popularity()
{
@@ -490,7 +459,7 @@ class record_preview extends record_adapter
}
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base(
$this->get_base_id(), 'canreport');
$this->getBaseId(), 'canreport');
if ( ! $report && ! $this->app['conf']->get(['registry', 'webservices', 'google-charts-enabled'])) {
$this->refferer_popularity = false;
@@ -498,23 +467,19 @@ class record_preview extends record_adapter
return $this->refferer_popularity;
}
$databox = $this->app->findDataboxById($this->get_sbas_id());
$connsbas = $databox->get_connection();
$sql = 'SELECT count( id ) AS views, referrer
FROM `log_view`
WHERE record_id = :record_id
AND date > ( NOW( ) - INTERVAL 1 MONTH )
GROUP BY referrer ORDER BY referrer ASC';
$stmt = $connsbas->prepare($sql);
$stmt->execute([':record_id' => $this->get_record_id()]);
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
$result = $this->getDataboxConnection()
->executeQuery($sql, [':record_id' => $this->getRecordId()])
->fetchAll(PDO::FETCH_ASSOC);
$referrers = [];
foreach ($rs as $row) {
foreach ($result as $row) {
if ($row['referrer'] == 'NO REFERRER')
$row['referrer'] = $this->app->trans('report::acces direct');
if ($row['referrer'] == $this->app['conf']->get('servername') . 'prod/')
@@ -553,8 +518,7 @@ class record_preview extends record_adapter
}
/**
*
* @return media
* @return media_adapter
*/
public function get_download_popularity()
{
@@ -562,7 +526,7 @@ class record_preview extends record_adapter
return $this->download_popularity;
}
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($this->get_base_id(), 'canreport');
$report = $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($this->getBaseId(), 'canreport');
$ret = false;
if ( ! $report && ! $this->app['conf']->get(['registry', 'webservices', 'google-charts-enabled'])) {
@@ -592,21 +556,16 @@ class record_preview extends record_adapter
AND site= :site
GROUP BY datee ORDER BY datee ASC';
$databox = $this->app->findDataboxById($this->get_sbas_id());
$connsbas = $databox->get_connection();
$stmt = $connsbas->prepare($sql);
$stmt->execute(
[
':record_id' => $this->get_record_id(),
$result = $this->getDataboxConnection()
->executeQuery($sql, [
':record_id' => $this->getRecordId(),
':site' => $this->app['conf']->get(['main', 'key'])
]
);
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
])
->fetchAll(PDO::FETCH_ASSOC);
$top = 10;
foreach ($rs as $row) {
foreach ($result as $row) {
if (isset($dwnls[$row['datee']])) {
$dwnls[$row['datee']] = (int) $row['dwnl'];
$top = max(((int) $row['dwnl'] + 10), $top);