mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-11 12:03:14 +00:00
Merge branch '3.8'
This commit is contained in:
@@ -65,6 +65,9 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper
|
|||||||
public function delete_users()
|
public function delete_users()
|
||||||
{
|
{
|
||||||
foreach ($this->users as $usr_id) {
|
foreach ($this->users as $usr_id) {
|
||||||
|
if ($this->app['authentication']->getUser()->get_id() === (int) $usr_id) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
$user = \User_Adapter::getInstance($usr_id, $this->app);
|
$user = \User_Adapter::getInstance($usr_id, $this->app);
|
||||||
$this->delete_user($user);
|
$this->delete_user($user);
|
||||||
}
|
}
|
||||||
|
@@ -202,6 +202,36 @@ class module_console_checkExtension extends Command
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// test disconnected mode if available
|
||||||
|
// prepare the test before closing session
|
||||||
|
if(function_exists("phrasea_public_query"))
|
||||||
|
{
|
||||||
|
// fill an array for each sbas to query
|
||||||
|
$tbases = array();
|
||||||
|
foreach ($phSession["bases"] as $phbase) {
|
||||||
|
// fill an array of collections to query for this sbas
|
||||||
|
$tcoll = array();
|
||||||
|
foreach ($phbase["collections"] as $coll) {
|
||||||
|
$tcoll[] = 0 + $coll["base_id"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sizeof($tcoll) > 0) {
|
||||||
|
// parse the query for this sbas
|
||||||
|
$qp = new PhraseaEngineQueryParser($this->container);
|
||||||
|
$treeq = $qp->parsequery($input->getOption('query'));
|
||||||
|
$arrayq = $qp->makequery($treeq);
|
||||||
|
|
||||||
|
$tbases["S".$phbase["sbas_id"]] = array( // key does no matter
|
||||||
|
"sbas_id" => $phbase["sbas_id"], // sbas_id
|
||||||
|
"searchcoll" => $tcoll, // colls to query
|
||||||
|
"arrayq" => $arrayq // parsed query
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$output->writeln("\n-- phrasea_close_session --");
|
$output->writeln("\n-- phrasea_close_session --");
|
||||||
|
|
||||||
$rs = phrasea_close_session($sessid);
|
$rs = phrasea_close_session($sessid);
|
||||||
@@ -214,6 +244,70 @@ class module_console_checkExtension extends Command
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// session is closed, test disconnected mode if available
|
||||||
|
if(function_exists("phrasea_public_query"))
|
||||||
|
{
|
||||||
|
$output->writeln("\n-- phrasea_public_query(...0, 5,...) --");
|
||||||
|
|
||||||
|
$ret = phrasea_public_query(
|
||||||
|
$tbases // array of sbas with colls and query
|
||||||
|
, PHRASEA_MULTIDOC_DOCONLY // mode
|
||||||
|
, '' // sortfield
|
||||||
|
, array() // search business fields
|
||||||
|
, '' // lng for stemmed search
|
||||||
|
, 0 // offset for first answer (start=0)
|
||||||
|
, 5 // nbr of answers
|
||||||
|
, true // verbose output (chrono, sql...)
|
||||||
|
);
|
||||||
|
|
||||||
|
if(is_array($ret) && array_key_exists("results", $ret) && is_array($ret["results"])) {
|
||||||
|
$output->writeln( sprintf("<info>Succes ! </info> returned %d answers", count($ret["results"])) );
|
||||||
|
} else {
|
||||||
|
$output->writeln("<error>Failed ! </error>");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach($ret['results'] as $result)
|
||||||
|
{
|
||||||
|
$sbid = $result["sbid"];
|
||||||
|
$rid = $result["rid"];
|
||||||
|
$q = $tbases["S".$sbid]["arrayq"]; // query tree
|
||||||
|
|
||||||
|
$h = phrasea_highlight(
|
||||||
|
$sbid // sbas_id
|
||||||
|
, $rid // record_id
|
||||||
|
, $q // query parsed
|
||||||
|
, "" // lng for stemmed
|
||||||
|
, false // verbose output (chrono, sql...)
|
||||||
|
);
|
||||||
|
|
||||||
|
$output->writeln(sprintf("\n-- phrasea_highlight(%d, %d,...) --", $sbid, $rid));
|
||||||
|
|
||||||
|
if(is_array($h) && array_key_exists("results", $h) && is_array($h["results"])
|
||||||
|
&& count($h["results"])==1
|
||||||
|
&& array_key_exists("sbid", $h["results"][0]) && $h["results"][0]["sbid"]==$sbid
|
||||||
|
&& array_key_exists("rid", $h["results"][0]) && $h["results"][0]["rid"]==$rid
|
||||||
|
&& array_key_exists("spots", $h["results"][0]) && is_array($h["results"][0]["spots"]) )
|
||||||
|
{
|
||||||
|
|
||||||
|
$output->writeln( sprintf("<info>Succes ! </info> sbid=%d, rid=%d (%d spots)",
|
||||||
|
$sbid,
|
||||||
|
$ret["results"][0]["rid"],
|
||||||
|
count($h["results"][0]["spots"]))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$output->writeln("<error>Failed ! </error>");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // disconnected mode
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
<div class="context-menu context-menu-theme-vista">
|
<div class="context-menu context-menu-theme-vista">
|
||||||
<div title="" class="context-menu-item">
|
<div title="" class="context-menu-item">
|
||||||
<div class="context-menu-item-inner"
|
<div class="context-menu-item-inner"
|
||||||
onclick="downloadThis('SSTTID={{basket.getId()}}');">{% trans 'action::exporter' %}
|
onclick="downloadThis('ssel={{basket.getId()}}');">{% trans 'action::exporter' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div title="" class="context-menu-item menu3-custom-item">
|
<div title="" class="context-menu-item menu3-custom-item">
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
<div class="context-menu context-menu-theme-vista">
|
<div class="context-menu context-menu-theme-vista">
|
||||||
<div title="" class="context-menu-item">
|
<div title="" class="context-menu-item">
|
||||||
<div class="context-menu-item-inner"
|
<div class="context-menu-item-inner"
|
||||||
onclick="downloadThis('SSTTID={{basket.getId()}}');">{% trans 'action::exporter' %}
|
onclick="downloadThis('ssel={{basket.getId()}}');">{% trans 'action::exporter' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div title="" class="context-menu-item">
|
<div title="" class="context-menu-item">
|
||||||
|
@@ -46,6 +46,15 @@ class ControllerUsersTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRouteDeleteCurrentUserDoesNothing()
|
||||||
|
{
|
||||||
|
self::$DI['client']->request('POST', '/admin/users/delete/', array('users' => self::$DI['user']->get_id()));
|
||||||
|
$response = self::$DI['client']->getResponse();
|
||||||
|
$this->assertTrue($response->isRedirect());
|
||||||
|
|
||||||
|
$this->assertTrue(false !== \User_Adapter::get_usr_id_from_login(self::$DI['app'], self::$DI['user']->get_login()));
|
||||||
|
}
|
||||||
|
|
||||||
public function testRouteRightsApply()
|
public function testRouteRightsApply()
|
||||||
{
|
{
|
||||||
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailSuccessEmailUpdate', 2);
|
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailSuccessEmailUpdate', 2);
|
||||||
|
@@ -183,70 +183,77 @@ function checkBases(bool)
|
|||||||
function checkFilters(save)
|
function checkFilters(save)
|
||||||
{
|
{
|
||||||
var danger = false;
|
var danger = false;
|
||||||
var search = {};
|
var search = {
|
||||||
var adv_box = $('form.phrasea_query .adv_options');
|
bases: {},
|
||||||
search.bases = {};
|
fields: {},
|
||||||
search.fields = {};
|
dates: {},
|
||||||
search.dates = {};
|
status: {}
|
||||||
search.status = {};
|
};
|
||||||
var scroll = $('.field_filter select').scrollTop();
|
|
||||||
|
|
||||||
var switches = $('#sbasfiltercont .field_switch');
|
var adv_box = $('form.phrasea_query .adv_options');
|
||||||
|
var container = $("#sbasfiltercont");
|
||||||
|
var fieldsSelect = $('.field_filter select', container);
|
||||||
|
var filters = $('.field_filter, .status_filter, .date_filter', adv_box);
|
||||||
|
var scroll = fieldsSelect.scrollTop();
|
||||||
|
var switches = $('.field_switch', container);
|
||||||
|
|
||||||
switches.filter('.was').removeClass('was');
|
switches.filter('.was').removeClass('was');
|
||||||
|
|
||||||
switches.filter('option:selected, input:checked').addClass('was');
|
switches.filter('option:selected, input:checked').addClass('was');
|
||||||
|
|
||||||
$('#sbasfiltercont select option:selected:not(".default-selection")').removeAttr('selected').selected(false);
|
$('select option:selected:not(".default-selection")', container).removeAttr('selected').selected(false);
|
||||||
|
|
||||||
$('#sbasfiltercont select option.field_switch').hide();
|
$('select option.field_switch', container).addClass("hidden");
|
||||||
|
|
||||||
$('#sbasfiltercont input.field_switch:checked').removeAttr('checked');
|
$('input.field_switch:checked', container).removeAttr('checked');
|
||||||
|
|
||||||
$('#sbasfiltercont input.field_switch:checkbox').parent().hide();
|
$('input.field_switch:checkbox', container).parent().hide();
|
||||||
|
|
||||||
$('.field_filter, .status_filter, .date_filter', adv_box).removeClass('danger');
|
filters.removeClass('danger');
|
||||||
|
|
||||||
var adv_box = $('form.phrasea_query .adv_options');
|
var nbSelectedColls = 0;
|
||||||
|
|
||||||
$.each($('.sbascont', adv_box), function(){
|
$.each($('.sbascont', adv_box), function(){
|
||||||
|
var $this = $(this);
|
||||||
|
|
||||||
var sbas_id = $(this).parent().find('input[name="reference"]').val();
|
var sbas_id = $this.parent().find('input[name="reference"]').val();
|
||||||
search.bases[sbas_id] = new Array();
|
search.bases[sbas_id] = new Array();
|
||||||
|
|
||||||
var bas_ckbox = $(this).find('.checkbas');
|
var bas_ckbox = $this.find('.checkbas');
|
||||||
|
|
||||||
if(bas_ckbox.filter(':not(:checked)').length > 0)
|
if(bas_ckbox.filter(':not(:checked)').length > 0) {
|
||||||
{
|
|
||||||
danger = 'medium';
|
danger = 'medium';
|
||||||
}
|
}
|
||||||
|
|
||||||
var checked = bas_ckbox.filter(':checked');
|
var checked = bas_ckbox.filter(':checked');
|
||||||
|
|
||||||
|
if(checked.length>0) {
|
||||||
|
var sbas_fields = $('.field_' + sbas_id, container).removeClass("hidden");
|
||||||
if(checked.length>0)
|
|
||||||
{
|
|
||||||
var sbas_fields = $('#sbasfiltercont .field_' + sbas_id).show();
|
|
||||||
sbas_fields.filter('option').show().filter('.was').removeClass('was').attr('selected', 'selected').selected(true);
|
sbas_fields.filter('option').show().filter('.was').removeClass('was').attr('selected', 'selected').selected(true);
|
||||||
sbas_fields.filter(':checkbox').parent().show().find('.was').attr('checked','checked').removeClass('was');
|
sbas_fields.filter(':checkbox').parent().show().find('.was').attr('checked','checked').removeClass('was');
|
||||||
}
|
}
|
||||||
|
|
||||||
checked.each(function(){
|
checked.each(function(){
|
||||||
search.bases[sbas_id].push($(this).val());
|
nbSelectedColls++;
|
||||||
|
search.bases[sbas_id].push($this.val());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
search.fields = (search.fields = $('.field_filter select').val()) !== null ? search.fields : new Array;
|
if (nbSelectedColls === 0) {
|
||||||
|
filters.addClass("danger");
|
||||||
|
}
|
||||||
|
|
||||||
|
search.fields = (search.fields = fieldsSelect.val()) !== null ? search.fields : new Array;
|
||||||
|
|
||||||
var reset_field = false;
|
var reset_field = false;
|
||||||
|
|
||||||
$.each(search.fields, function(i,n){
|
$.each(search.fields, function(i,n){
|
||||||
if(n === 'phraseanet--all--fields')
|
if(n === 'phraseanet--all--fields')
|
||||||
reset_field = true;
|
reset_field = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
if(reset_field)
|
if(reset_field)
|
||||||
{
|
{
|
||||||
$('#sbasfiltercont select[name="fields[]"] option:selected').removeAttr('selected').selected(false);
|
$('select[name="fields[]"] option:selected', container).removeAttr('selected').selected(false);
|
||||||
search.fields = new Array;
|
search.fields = new Array;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,7 +281,8 @@ function checkFilters(save)
|
|||||||
$('.date_filter', adv_box).addClass('danger');
|
$('.date_filter', adv_box).addClass('danger');
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.field_filter select').scrollTop(scroll);
|
fieldsSelect.scrollTop(scroll);
|
||||||
|
|
||||||
if(save===true)
|
if(save===true)
|
||||||
setPref('search',JSON.stringify(search));
|
setPref('search',JSON.stringify(search));
|
||||||
|
|
||||||
@@ -1345,7 +1353,7 @@ $(document).ready(function(){
|
|||||||
cancelKey = shortCut = true;
|
cancelKey = shortCut = true;
|
||||||
break;
|
break;
|
||||||
case 38: // down arrow
|
case 38: // down arrow
|
||||||
$('#baskets div.bloc').scrollTop($('baskets div.bloc').scrollTop()-30);
|
$('#baskets div.bloc').scrollTop($('#baskets div.bloc').scrollTop()-30);
|
||||||
cancelKey = shortCut = true;
|
cancelKey = shortCut = true;
|
||||||
break;
|
break;
|
||||||
// case 37://previous page
|
// case 37://previous page
|
||||||
|
Reference in New Issue
Block a user