Skip to content

Commit a2999e0

Browse files
Поиск по ключам в админке #120. Также улучшен поиск по проектам в админке
1 parent c9fb1ca commit a2999e0

File tree

5 files changed

+57
-33
lines changed

5 files changed

+57
-33
lines changed

com_swjprojects/admin/forms/filter_keys.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<form addfieldprefix="Joomla\Component\SWJProjects\Administrator\Field">
33
<fields name="filter">
4-
<field name="search" type="text" hint="JSEARCH_FILTER"/>
4+
<field name="search" type="text" hint="JSEARCH_FILTER" description="COM_SWJPROJECTS_KEYS_FILTER_SEARCH_DESC"/>
55
<field name="published" type="list" onchange="this.form.submit();">
66
<option value="">JOPTION_SELECT_PUBLISHED</option>
77
<option value="1">JPUBLISHED</option>

com_swjprojects/admin/language/en-GB/com_swjprojects.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ COM_SWJPROJECTS_KEYS_N_ITEMS_TRASHED = "%d keys trashed."
9393
COM_SWJPROJECTS_KEYS_N_ITEMS_DELETED = "%d keys deleted."
9494
COM_SWJPROJECTS_KEYS_N_ITEMS_PUBLISHED = "%d keys published."
9595
COM_SWJPROJECTS_KEYS_N_ITEMS_UNPUBLISHED = "%d keys unpublished."
96+
COM_SWJPROJECTS_KEYS_FILTER_SEARCH_DESC="Search in key, order, note, domain or email. Use prefix ID: for key Id. e: - for email. d: - for domain. o: - for order search"
9697

9798
COM_SWJPROJECTS_KEY = "Key"
9899
COM_SWJPROJECTS_KEY_ADD = "Create key"

com_swjprojects/admin/language/ru-RU/com_swjprojects.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ COM_SWJPROJECTS_KEYS_N_ITEMS_TRASHED = "%d ключей помещено в ко
9494
COM_SWJPROJECTS_KEYS_N_ITEMS_DELETED = "%d ключей удалено."
9595
COM_SWJPROJECTS_KEYS_N_ITEMS_PUBLISHED = "%d ключей опубликовано."
9696
COM_SWJPROJECTS_KEYS_N_ITEMS_UNPUBLISHED = "%d ключей снято с публикации."
97+
COM_SWJPROJECTS_KEYS_FILTER_SEARCH_DESC="Поиск по ключу, номеру заказа, примечанию, домену или email. Используйте префикс (с двоеточием) ID: для поиска по id. Префикс e: - для email. d: - для домена. o: - для номера заказа"
9798

9899
COM_SWJPROJECTS_KEY = "Ключ"
99100
COM_SWJPROJECTS_KEY_ADD = "Создать ключ"

com_swjprojects/admin/src/Model/KeysModel.php

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Joomla\CMS\Language\Text;
1818
use Joomla\CMS\MVC\Model\ListModel;
1919
use Joomla\Component\SWJProjects\Administrator\Helper\KeysHelper;
20+
use Joomla\Uri\Uri;
2021
use Joomla\Utilities\ArrayHelper;
2122
use function array_merge;
2223
use function array_unique;
@@ -74,11 +75,14 @@ public function __construct($config = [])
7475
// Add the ordering filtering fields whitelist
7576
if (empty($config['filter_fields']))
7677
{
77-
$config['filter_fields'] = [
78-
'id', 'v.id',
79-
'published', 'state', 'k.state',
80-
'project', 'project_id', 'k.project_id', 'p.id',
81-
];
78+
$config['filter_fields'] = [
79+
'id', 'k.id',
80+
'published', 'state', 'k.state',
81+
'project', 'project_id', 'k.project_id', 'p.id',
82+
'email','k.email',
83+
'domain','k.domain',
84+
'order', 'k.order'
85+
];
8286
}
8387

8488
parent::__construct($config);
@@ -208,7 +212,7 @@ public function getProjects($pks = null)
208212
*
209213
* @since 1.6.0
210214
*/
211-
public function getUsers($pks = null)
215+
public function getUsers($pks = null):array
212216
{
213217
if ($this->_users === null) $this->_users = [];
214218

@@ -295,7 +299,7 @@ protected function getStoreId($id = '')
295299
}
296300

297301
/**
298-
* Build an sql query to load versions list.
302+
* Build SQL query to load versions list.
299303
*
300304
* @return DatabaseQuery Database query to load versions list.
301305
*
@@ -305,14 +309,14 @@ protected function getListQuery()
305309
{
306310
$db = $this->getDatabase();
307311
$query = $db->getQuery(true)
308-
->select(array('k.*'))
312+
->select(['k.*'])
309313
->from($db->quoteName('#__swjprojects_keys', 'k'));
310314

311315
// Filter by published state
312316
$published = $this->getState('filter.published');
313317
if (is_numeric($published))
314318
{
315-
$query->where('k.state = ' . (int) $published);
319+
$query->where($db->quoteName('k.state').' = ' . $db->quote((int) $published));
316320
}
317321
elseif ($published === '')
318322
{
@@ -328,28 +332,46 @@ protected function getListQuery()
328332
$query->where('(' . implode(' OR ', $sql) . ')');
329333
}
330334

331-
// Filter by search
332-
$search = $this->getState('filter.search');
333-
if (!empty($search))
334-
{
335-
if (stripos($search, 'id:') === 0)
336-
{
337-
$query->where('k.id = ' . (int) substr($search, 3));
338-
}
339-
else
340-
{
341-
$sql = [];
342-
$columns = ['k.key', 'k.note'];
343-
344-
foreach ($columns as $column)
345-
{
346-
$sql[] = $db->quoteName($column) . ' LIKE '
347-
. $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%'));
348-
}
349-
350-
$query->where('(' . implode(' OR ', $sql) . ')');
351-
}
352-
}
335+
// Filter by search
336+
$search = $this->getState('filter.search');
337+
if (!empty($search))
338+
{
339+
if (stripos($search, 'id:') === 0)
340+
{
341+
$query->where($db->quoteName('k.id').' = ' . $db->quote((int) substr($search, 3)));
342+
}
343+
elseif (stripos($search, 'd:') === 0)
344+
{
345+
$domain = (new Uri())->setHost(substr($search, 2))->getHost();
346+
$query->where($db->quoteName('k.domain').' = ' . $db->quote($domain));
347+
$query->where($db->quoteName('k.note').' LIKE ' . $db->quote('%' . str_replace(' ', '%', $db->escape(trim($domain), true) . '%')));
348+
}
349+
elseif (stripos($search, 'e:') === 0 || str_contains($search,'@'))
350+
{
351+
if(stripos($search, 'e:') === 0) {
352+
$search = substr($search, 2);
353+
}
354+
355+
$query->where($db->quoteName('k.email').' = ' . $db->quote($search));
356+
}
357+
elseif (stripos($search, 'o:') === 0)
358+
{
359+
$query->where($db->quoteName('k.order').' = ' . $db->quote(substr($search, 2)));
360+
}
361+
else
362+
{
363+
$sql = [];
364+
$columns = ['k.key', 'k.note', 'k.email', 'k.domain', 'k.order'];
365+
366+
foreach ($columns as $column)
367+
{
368+
$sql[] = $db->quoteName($column) . ' LIKE '
369+
. $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%'));
370+
}
371+
372+
$query->where('(' . implode(' OR ', $sql) . ')');
373+
}
374+
}
353375

354376
// Group by
355377
$query->group(['k.id']);

com_swjprojects/admin/src/Model/ProjectsModel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ protected function getListQuery()
190190
else
191191
{
192192
$sql = [];
193-
$columns = ['p.element', 'c.alias', 't_c.title', 'ta_p.title', 'ta_p.introtext', 'ta_p.fulltext'];
193+
$columns = ['p.element', 'c.alias', 't_c.title', 'ta_p.title'];
194194

195195
foreach ($columns as $column)
196196
{

0 commit comments

Comments
 (0)