mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
List manager : add email domain in filter box
This commit is contained in:
@@ -547,6 +547,10 @@ class PushController extends Controller
|
|||||||
->like($request->get('like_field'), $request->get('query'))
|
->like($request->get('like_field'), $request->get('query'))
|
||||||
->like_match(\User_Query::LIKE_MATCH_OR);
|
->like_match(\User_Query::LIKE_MATCH_OR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_array($request->get('EmailDomain'))) {
|
||||||
|
$query->haveEmailDomains($request->get('EmailDomain'));
|
||||||
|
}
|
||||||
if (is_array($request->get('Activity'))) {
|
if (is_array($request->get('Activity'))) {
|
||||||
$query->haveActivities($request->get('Activity'));
|
$query->haveActivities($request->get('Activity'));
|
||||||
}
|
}
|
||||||
|
@@ -62,6 +62,7 @@ class User_Query
|
|||||||
protected $include_phantoms = true;
|
protected $include_phantoms = true;
|
||||||
protected $include_special_users = false;
|
protected $include_special_users = false;
|
||||||
protected $include_invite = false;
|
protected $include_invite = false;
|
||||||
|
protected $emailDomains = null;
|
||||||
protected $activities = null;
|
protected $activities = null;
|
||||||
protected $templates = null;
|
protected $templates = null;
|
||||||
protected $companies = null;
|
protected $companies = null;
|
||||||
@@ -503,6 +504,38 @@ class User_Query
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restrict users with provided email domain
|
||||||
|
*
|
||||||
|
* @param array $req_emailDomains
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function haveEmailDomains(array $req_emailDomains)
|
||||||
|
{
|
||||||
|
$emailDomains = new ArrayCollection();
|
||||||
|
|
||||||
|
foreach ($req_emailDomains as $emailDomain) {
|
||||||
|
if (($emailDomain = trim($emailDomain)) === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// use % for LIKE in SQL
|
||||||
|
$emailDomain = '%'.$emailDomain;
|
||||||
|
|
||||||
|
if ($emailDomains->contains($emailDomain)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$emailDomains->add($emailDomain);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$emailDomains->isEmpty()) {
|
||||||
|
$this->emailDomains = $emailDomains;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restrict users with provided activities
|
* Restrict users with provided activities
|
||||||
*
|
*
|
||||||
@@ -515,7 +548,7 @@ class User_Query
|
|||||||
$activities = new ArrayCollection();
|
$activities = new ArrayCollection();
|
||||||
|
|
||||||
foreach ($req_activities as $activity) {
|
foreach ($req_activities as $activity) {
|
||||||
if ($activity = trim($activity) === '') {
|
if (($activity = trim($activity)) === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,7 +578,7 @@ class User_Query
|
|||||||
$positions = new ArrayCollection();
|
$positions = new ArrayCollection();
|
||||||
|
|
||||||
foreach ($req_positions as $position) {
|
foreach ($req_positions as $position) {
|
||||||
if ($position = trim($position) === '') {
|
if (($position = trim($position)) === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($positions->contains($position)) {
|
if ($positions->contains($position)) {
|
||||||
@@ -574,7 +607,7 @@ class User_Query
|
|||||||
$countries = new ArrayCollection();
|
$countries = new ArrayCollection();
|
||||||
|
|
||||||
foreach ($req_countries as $country) {
|
foreach ($req_countries as $country) {
|
||||||
if ($country = trim($country) === '') {
|
if (($country = trim($country)) === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($countries->contains($country)) {
|
if ($countries->contains($country)) {
|
||||||
@@ -603,7 +636,7 @@ class User_Query
|
|||||||
$companies = new ArrayCollection();
|
$companies = new ArrayCollection();
|
||||||
|
|
||||||
foreach ($req_companies as $company) {
|
foreach ($req_companies as $company) {
|
||||||
if ($company = trim($company) === '') {
|
if (($company = trim($company)) === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($companies->contains($company)) {
|
if ($companies->contains($company)) {
|
||||||
@@ -631,7 +664,7 @@ class User_Query
|
|||||||
$templates = new ArrayCollection();
|
$templates = new ArrayCollection();
|
||||||
|
|
||||||
foreach ($req_templates as $template) {
|
foreach ($req_templates as $template) {
|
||||||
if ($template = trim($template) === '') {
|
if (($template = trim($template)) === '') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($templates->contains($template)) {
|
if ($templates->contains($template)) {
|
||||||
@@ -662,6 +695,33 @@ class User_Query
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get users email domain
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getRelatedEmailDomain()
|
||||||
|
{
|
||||||
|
$conn = $this->app->getApplicationBox()->get_connection();
|
||||||
|
|
||||||
|
$sql = 'SELECT DISTINCT SUBSTRING_INDEX(Users.email, "@", -1) as emailDomain' . $this->generate_sql_constraints(). 'ORDER BY emailDomain';
|
||||||
|
|
||||||
|
$stmt = $conn->prepare($sql);
|
||||||
|
$stmt->execute($this->sql_params);
|
||||||
|
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
$stmt->closeCursor();
|
||||||
|
|
||||||
|
$emailDomain = [];
|
||||||
|
foreach ($rs as $row) {
|
||||||
|
if (trim($row['emailDomain']) === '') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$emailDomain[] = $row['emailDomain'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $emailDomain;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get users activities
|
* Get users activities
|
||||||
*
|
*
|
||||||
@@ -838,6 +898,10 @@ class User_Query
|
|||||||
$sql .= ' AND model_of IS NULL';
|
$sql .= ' AND model_of IS NULL';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->emailDomains) {
|
||||||
|
$sql .= $this->generate_field_constraints('email', $this->emailDomains, 'LIKE');
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->activities) {
|
if ($this->activities) {
|
||||||
$sql .= $this->generate_field_constraints('activity', $this->activities);
|
$sql .= $this->generate_field_constraints('activity', $this->activities);
|
||||||
}
|
}
|
||||||
@@ -967,7 +1031,7 @@ class User_Query
|
|||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function generate_field_constraints($fieldName, ArrayCollection $fields)
|
protected function generate_field_constraints($fieldName, ArrayCollection $fields, $operator = '=')
|
||||||
{
|
{
|
||||||
$n = 0;
|
$n = 0;
|
||||||
$constraints = [];
|
$constraints = [];
|
||||||
@@ -975,7 +1039,8 @@ class User_Query
|
|||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$constraints[':' . $fieldName . $n ++] = $field;
|
$constraints[':' . $fieldName . $n ++] = $field;
|
||||||
}
|
}
|
||||||
$sql = ' AND (' . $fieldName . ' = ' . implode(' OR ' . $fieldName . ' = ', array_keys($constraints)) . ') ';
|
|
||||||
|
$sql = ' AND (' . $fieldName . ' ' . $operator . ' ' . implode(' OR ' . $fieldName . ' ' . $operator . ' ' , array_keys($constraints)) . ') ';
|
||||||
|
|
||||||
$this->sql_params = array_merge($this->sql_params, $constraints);
|
$this->sql_params = array_merge($this->sql_params, $constraints);
|
||||||
|
|
||||||
|
@@ -185,9 +185,9 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="list_editor_selector_filter_holder">
|
<div class="list_editor_selector_filter_holder">
|
||||||
<select size="5" multiple="multiple" name="Email[]" style="width:100%;">
|
<select size="5" multiple="multiple" name="EmailDomain[]" style="width:100%;">
|
||||||
<option value="">{{ 'All' | trans }}</option>
|
<option value="">{{ 'All' | trans }}</option>
|
||||||
{% for Email in query.getRelatedActivities() %}
|
{% for Email in query.getRelatedEmailDomain() %}
|
||||||
<option value="{{ Email }}">{{ Email }}</option>
|
<option value="{{ Email }}">{{ Email }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
Reference in New Issue
Block a user