Skip to content

Commit cb8038b

Browse files
committed
Add usage column / update icons
1 parent aeaa5f7 commit cb8038b

10 files changed

Lines changed: 180 additions & 28 deletions

File tree

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 1.0.5 - 2019-06-26
2+
### Added
3+
- Add 'Usage' column to tags index table (#10)
4+
- Add setting to enable usage column
5+
6+
### Changed
7+
- Updated plugin icon
8+
19
## 1.0.4 - 2019-06-03
210
### Fixed
311
- Fix JS issues when activating delete tag modal (#9 via @svale)

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "ether/tags",
33
"description": "A tag manager for Craft 3",
44
"type": "craft-plugin",
5-
"version": "1.0.4",
5+
"version": "1.0.5",
66
"keywords": [
77
"craft",
88
"cms",

src/TagManager.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
namespace ether\tagManager;
1010

11+
use Craft;
1112
use craft\base\Element;
1213
use craft\base\Plugin;
1314
use craft\elements\actions\Edit;
@@ -18,6 +19,10 @@
1819
use craft\web\UrlManager;
1920
use ether\tagManager\elements\actions\Delete;
2021
use ether\tagManager\elements\Tag;
22+
use ether\tagManager\models\Settings;
23+
use Twig\Error\LoaderError;
24+
use Twig\Error\RuntimeError;
25+
use Twig\Error\SyntaxError;
2126
use yii\base\Event;
2227

2328
/**
@@ -34,7 +39,7 @@ class TagManager extends Plugin
3439

3540
public $schemaVersion = '1.0.0';
3641

37-
public $hasCpSettings = false;
42+
public $hasCpSettings = true;
3843

3944
public $hasCpSection = true;
4045

@@ -81,6 +86,32 @@ public function getCpNavItem ()
8186
return $item;
8287
}
8388

89+
protected function createSettingsModel ()
90+
{
91+
return new Settings();
92+
}
93+
94+
/**
95+
* @return bool|Settings|null
96+
*/
97+
public function getSettings ()
98+
{
99+
return parent::getSettings();
100+
}
101+
102+
/**
103+
* @return string|null
104+
* @throws LoaderError
105+
* @throws RuntimeError
106+
* @throws SyntaxError
107+
*/
108+
protected function settingsHtml ()
109+
{
110+
return Craft::$app->getView()->renderTemplate('tag-manager/_settings', [
111+
'settings' => $this->getSettings(),
112+
]);
113+
}
114+
84115
// Events
85116
// =========================================================================
86117

src/elements/Tag.php

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
namespace ether\tagManager\elements;
1010

1111
use Craft;
12+
use craft\elements\db\ElementQueryInterface;
1213
use craft\helpers\UrlHelper;
14+
use ether\tagManager\elements\db\TagQuery;
15+
use ether\tagManager\TagManager;
1316
use Throwable;
1417
use yii\base\InvalidConfigException;
1518
use yii\db\Query;
@@ -29,9 +32,16 @@ class Tag extends \craft\elements\Tag
2932
/** @var Tag|null */
3033
public $replaceWith;
3134

35+
public $usage;
36+
3237
// Methods
3338
// =========================================================================
3439

40+
public static function find (): ElementQueryInterface
41+
{
42+
return new TagQuery(static::class);
43+
}
44+
3545
/**
3646
* @return null|string
3747
* @throws InvalidConfigException
@@ -143,18 +153,44 @@ protected static function defineSources (string $context = null): array
143153

144154
protected static function defineTableAttributes (): array
145155
{
146-
return [
147-
'title' => ['label' => Craft::t('app', 'Title')],
148-
'group' => ['label' => Craft::t('app', 'Group')],
156+
$attrs = [
157+
'title' => ['label' => Craft::t('app', 'Title')],
158+
'group' => ['label' => Craft::t('app', 'Group')],
159+
];
160+
161+
if (TagManager::getInstance()->getSettings()->enableUsage)
162+
{
163+
$attrs += [
164+
'usage' => ['label' => Craft::t('tag-manager', 'Usage')],
165+
];
166+
}
167+
168+
$attrs += [
149169
'dateCreated' => ['label' => Craft::t('app', 'Date Created')],
150170
'dateUpdated' => ['label' => Craft::t('app', 'Date Updated')],
151171
];
172+
173+
return $attrs;
152174
}
153175

154176
protected static function defineSortOptions (): array
155177
{
156-
return [
178+
$opts = [
157179
'title' => Craft::t('app', 'Title'),
180+
];
181+
182+
if (TagManager::getInstance()->getSettings()->enableUsage)
183+
{
184+
$opts += [
185+
[
186+
'label' => Craft::t('app', 'Usage'),
187+
'orderBy' => 'usage',
188+
'attribute' => 'usage',
189+
],
190+
];
191+
}
192+
193+
$opts += [
158194
[
159195
'label' => Craft::t('app', 'Date Created'),
160196
'orderBy' => 'elements.dateCreated',
@@ -164,8 +200,10 @@ protected static function defineSortOptions (): array
164200
'label' => Craft::t('app', 'Date Updated'),
165201
'orderBy' => 'elements.dateUpdated',
166202
'attribute' => 'dateUpdated',
167-
]
203+
],
168204
];
205+
206+
return $opts;
169207
}
170208

171209
}

src/elements/db/TagQuery.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/**
3+
* Tags for Craft CMS
4+
*
5+
* @link https://ethercreative.co.uk
6+
* @copyright Copyright (c) 2019 Ether Creative
7+
*/
8+
9+
namespace ether\tagManager\elements\db;
10+
11+
use ether\tagManager\TagManager;
12+
use yii\db\Expression;
13+
14+
/**
15+
* Class TagQuery
16+
*
17+
* @author Ether Creative
18+
* @package ether\tagManager\elements\db
19+
*/
20+
class TagQuery extends \craft\elements\db\TagQuery
21+
{
22+
23+
protected function beforePrepare (): bool
24+
{
25+
if (!TagManager::getInstance()->getSettings()->enableUsage)
26+
return parent::beforePrepare();
27+
28+
$getUsage = new Expression(
29+
'(SELECT COUNT(*) FROM (SELECT [[r.sourceId]], [[r.sourceSiteId]] FROM {{%relations}} r WHERE [[r.targetId]] = [[elements.id]] GROUP BY [[r.sourceId]], [[r.sourceSiteId]]) as usage) as [[usage]]'
30+
);
31+
32+
$this->addSelect($getUsage);
33+
$this->subQuery->addSelect($getUsage);
34+
35+
return parent::beforePrepare();
36+
}
37+
38+
}

src/icon-mask.svg

Lines changed: 3 additions & 7 deletions
Loading

src/icon.svg

Lines changed: 5 additions & 14 deletions
Loading

src/models/Settings.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Tags for Craft CMS
4+
*
5+
* @link https://ethercreative.co.uk
6+
* @copyright Copyright (c) 2019 Ether Creative
7+
*/
8+
9+
namespace ether\tagManager\models;
10+
11+
use craft\base\Model;
12+
13+
/**
14+
* Class Settings
15+
*
16+
* @author Ether Creative
17+
* @package ether\tagManager\models
18+
*/
19+
class Settings extends Model
20+
{
21+
22+
/**
23+
* @var bool Will enable the usage column (may be slow on larger sites)
24+
*/
25+
public $enableUsage = false;
26+
27+
}

src/templates/_settings.twig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% import "_includes/forms" as forms %}
2+
3+
{{ forms.lightswitchField({
4+
label: 'Enable Usage'|t('tag-manager'),
5+
instructions: 'Will enable the usage column in the CP (has no effect on regular tag queries, may be slow on larger sites).'|t('tag-manager'),
6+
name: 'enableUsage',
7+
on: settings.enableUsage,
8+
first: true,
9+
}) }}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
/**
3+
* Tags for Craft CMS
4+
*
5+
* @link https://ethercreative.co.uk
6+
* @copyright Copyright (c) 2019 Ether Creative
7+
*/
8+
9+
return [
10+
'Usage' => 'Usage',
11+
'Enable Usage' => 'Enable Usage',
12+
'Will enable the usage column in the CP (has no effect on regular tag queries, may be slow on larger sites).' =>
13+
'Will enable the usage column in the CP (has no effect on regular tag queries, may be slow on larger sites).',
14+
];

0 commit comments

Comments
 (0)