diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php
index 1895eb5b15d7c..99742b19f57d0 100644
--- a/htdocs/admin/agenda_xcal.php
+++ b/htdocs/admin/agenda_xcal.php
@@ -174,8 +174,8 @@
print $message;
$message=$langs->trans("AgendaUrlOptions1",$user->login,$user->login).'
';
-//$message.=$langs->trans("AgendaUrlOptions2",$user->login,$user->login).'
';
$message.=$langs->trans("AgendaUrlOptions3",$user->login,$user->login).'
';
+$message.=$langs->trans("AgendaUrlOptionsNotAdmin",$user->login,$user->login).'
';
$message.=$langs->trans("AgendaUrlOptions4",$user->login,$user->login).'
';
$message.=$langs->trans("AgendaUrlOptionsProject",$user->login,$user->login);
diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
index 8243268574c2d..70b2acb86b74c 100644
--- a/htdocs/comm/action/class/actioncomm.class.php
+++ b/htdocs/comm/action/class/actioncomm.class.php
@@ -38,7 +38,7 @@ class ActionComm extends CommonObject
public $table_rowid = 'id';
protected $ismultientitymanaged = 1; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
public $picto='action';
-
+
/**
* Id of the event
* @var int
@@ -168,7 +168,7 @@ class ActionComm extends CommonObject
var $email_subject;
var $errors_to;
-
+
/**
* Constructor
*
@@ -444,7 +444,7 @@ function createFromClone($fuser, $socid)
$u->fetch($fuser);
$fuser = $u;
}
- else
+ else
{
$fuser = $user;
}
@@ -657,11 +657,11 @@ function delete($notrigger=0)
$this->error=$this->db->lasterror();
$error++;
}
-
+
if (! $error) {
$sql = "DELETE FROM ".MAIN_DB_PREFIX."actioncomm_resources";
$sql.= " WHERE fk_actioncomm=".$this->id;
-
+
dol_syslog(get_class($this)."::delete", LOG_DEBUG);
$res=$this->db->query($sql);
if ($res < 0) {
@@ -669,7 +669,7 @@ function delete($notrigger=0)
$error++;
}
}
-
+
// Removed extrafields
if (! $error) {
$result=$this->deleteExtraFields();
@@ -1091,7 +1091,7 @@ function LibStatut($percent,$mode,$hidenastatus=0,$datestart='')
else if ($percent > 0 && $percent < 100) return $percent.'% '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
else if ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6');
}
-
+
return '';
}
@@ -1112,20 +1112,20 @@ function getNomUrl($withpicto=0,$maxlength=0,$classname='',$option='',$overwrite
global $conf, $langs, $user, $hookmanager;
if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips
-
+
$label = $this->label;
if (empty($label)) $label=$this->libelle; // For backward compatibility
$result='';
-
+
// Set label of typ
$labeltype = ($langs->transnoentities("Action".$this->type_code) != "Action".$this->type_code)?$langs->transnoentities("Action".$this->type_code):$this->type_label;
if (empty($conf->global->AGENDA_USE_EVENT_TYPE))
{
if ($this->type_code != 'AC_OTH_AUTO') $labeltype = $langs->trans('ActionAC_MANUAL');
}
-
-
+
+
$tooltip = '' . $langs->trans('ShowAction'.$objp->code) . '';
if (! empty($this->ref))
$tooltip .= '
' . $langs->trans('Ref') . ': ' . $this->ref;
@@ -1137,7 +1137,7 @@ function getNomUrl($withpicto=0,$maxlength=0,$classname='',$option='',$overwrite
$tooltip .= '
' . $langs->trans('Location') . ': ' . $this->location;
$linkclose='';
- if (! empty($conf->global->AGENDA_USE_EVENT_TYPE) && $this->type_color)
+ if (! empty($conf->global->AGENDA_USE_EVENT_TYPE) && $this->type_color)
$linkclose = ' style="background-color:#'.$this->type_color.'"';
if (empty($notooltip))
@@ -1149,7 +1149,7 @@ function getNomUrl($withpicto=0,$maxlength=0,$classname='',$option='',$overwrite
}
$linkclose.=' title="'.dol_escape_htmltag($tooltip, 1).'"';
$linkclose.=' class="'.$classname.' classfortooltip"';
-
+
if (! is_object($hookmanager))
{
include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
@@ -1161,17 +1161,17 @@ function getNomUrl($withpicto=0,$maxlength=0,$classname='',$option='',$overwrite
$linkclose = ($hookmanager->resPrint ? $hookmanager->resPrint : $linkclose);
}
else $linkclose.=' class="'.$classname.'"';
-
+
$url='';
- if ($option=='birthday')
+ if ($option=='birthday')
$url = DOL_URL_ROOT.'/contact/perso.php?id='.$this->id;
- else
+ else
$url = DOL_URL_ROOT.'/comm/action/card.php?id='.$this->id;
-
+
$linkstart = '';
$linkend='';
-
+
//print 'rrr'.$this->libelle.'-'.$withpicto;
if ($withpicto == 2)
@@ -1279,7 +1279,7 @@ function build_exportfile($format,$type,$cachedelay,$filename,$filters)
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_author"; // Link to get author of event for export
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on s.rowid = a.fk_soc";
// We must filter on assignement table
- if ($filters['logint'] || $filters['login']) $sql.=", ".MAIN_DB_PREFIX."actioncomm_resources as ar";
+ if ($filters['logint']) $sql.=", ".MAIN_DB_PREFIX."actioncomm_resources as ar";
$sql.= " WHERE a.fk_action=c.id";
$sql.= " AND a.entity IN (".getEntity('agenda').")";
foreach ($filters as $key => $value)
@@ -1291,20 +1291,34 @@ function build_exportfile($format,$type,$cachedelay,$filename,$filters)
if ($key == 'idto') $sql.=" AND a.id <= ".(is_numeric($value)?$value:0);
if ($key == 'project') $sql.=" AND a.fk_project=".(is_numeric($value)?$value:0);
// We must filter on assignement table
- if ($key == 'logint' || $key == 'login') $sql.= " AND ar.fk_actioncomm = a.id AND ar.element_type='user'";
+ if ($key == 'logint') $sql.= " AND ar.fk_actioncomm = a.id AND ar.element_type='user'";
if ($key == 'logina')
{
$logina=$value;
+ $condition='=';
+ if (preg_match('/^!/',$logina))
+ {
+ $logina=preg_replace('/^!/','',$logina);
+ $condition='<>';
+ }
$userforfilter=new User($this->db);
- $result=$userforfilter->fetch('',$value);
- $sql.= " AND a.fk_user_author = ".$userforfilter->id;
+ $result=$userforfilter->fetch('',$logina);
+ if ($result > 0) $sql.= " AND a.fk_user_author ".$condition." ".$userforfilter->id;
+ elseif ($result < 0 || $condition == '=') $sql.= " AND a.fk_user_author = 0";
}
- if ($key == 'logint' || $key == 'login')
+ if ($key == 'logint')
{
$logint=$value;
+ $condition='=';
+ if (preg_match('/^!/',$logint))
+ {
+ $logint=preg_replace('/^!/','',$logint);
+ $condition='<>';
+ }
$userforfilter=new User($this->db);
- $result=$userforfilter->fetch('',$value);
- $sql.= " AND ar.fk_element = ".$userforfilter->id;
+ $result=$userforfilter->fetch('',$logint);
+ if ($result > 0) $sql.= " AND ar.fk_element = ".$userforfilter->id;
+ elseif ($result < 0 || $condition == '=') $sql.= " AND ar.fk_element = 0";
}
}
$sql.= " AND a.datep IS NOT NULL"; // To exclude corrupted events and avoid errors in lightning/sunbird import
diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang
index 9e7af7b0d064a..4e2e2acf3788d 100644
--- a/htdocs/langs/en_US/agenda.lang
+++ b/htdocs/langs/en_US/agenda.lang
@@ -80,9 +80,9 @@ AgendaModelModule=Document templates for event
DateActionStart=Start date
DateActionEnd=End date
AgendaUrlOptions1=You can also add following parameters to filter output:
-AgendaUrlOptions2=login=%s to restrict output to actions created by or assigned to user %s.
AgendaUrlOptions3=logina=%s to restrict output to actions owned by a user %s.
-AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s.
+AgendaUrlOptionsNotAdmin=logina=!%s to restrict output to actions not owned by user %s.
+AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others).
AgendaUrlOptionsProject=project=PROJECT_ID to restrict output to actions associated to project PROJECT_ID.
AgendaShowBirthdayEvents=Show birthdays of contacts
AgendaHideBirthdayEvents=Hide birthdays of contacts
diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php
index b38868244859b..81a67204fdb3e 100644
--- a/htdocs/public/agenda/agendaexport.php
+++ b/htdocs/public/agenda/agendaexport.php
@@ -65,19 +65,18 @@ function llxFooterVierge() { print '