Tag::container()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
ccs 0
cts 3
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * SEOmatic plugin for Craft CMS
4
 *
5
 * A turnkey SEO implementation for Craft CMS that is comprehensive, powerful,
6
 * and flexible
7
 *
8
 * @link      https://nystudio107.com
9
 * @copyright Copyright (c) 2017 nystudio107
10
 */
11
12
namespace nystudio107\seomatic\services;
13
14
use craft\helpers\ArrayHelper;
15
use craft\helpers\Template as TemplateHelper;
16
use nystudio107\seomatic\base\MetaService;
17
use nystudio107\seomatic\models\MetaTag;
18
use nystudio107\seomatic\models\MetaTagContainer;
19
use nystudio107\seomatic\Seomatic;
20
21
/**
22
 * Tag service for creating and accessing MetaTag objects in their meta container
23
 * An instance of the service is available via [[`Seomatic::$plugin->tag`|`seomatic.tag`]]
24
 *
25
 * @author    nystudio107
26
 * @package   Seomatic
27
 * @since     3.0.0
28
 */
29
class Tag extends MetaService
30
{
31
    // Constants
32
    // =========================================================================
33
34
    public const FACEBOOK_HANDLE = 'opengraph';
35
    public const TWITTER_HANDLE = 'twitter';
36
    public const MISC_HANDLE = 'miscellaneous';
37
38
    public const DEFAULT_TYPE = null;
39
40
    // Public Methods
41
    // =========================================================================
42
43
    /**
44
     * @param string $key
45
     * @param string $handle
46
     *
47
     * @return null|MetaTag
48
     */
49
    public function get(string $key, string $handle = self::GENERAL_HANDLE)
50
    {
51
        /** @var MetaTag $metaItem */
52
        $metaItem = Seomatic::$plugin->metaContainers->getMetaItemByKey($key, MetaTagContainer::CONTAINER_TYPE);
53
54
        return $metaItem;
55
    }
56
57
    /**
58
     * @inheritdoc
59
     */
60
    public function create(array $config = [], $add = true): MetaTag
61
    {
62
        $type = self::DEFAULT_TYPE;
63
        if (!empty($config['type'])) {
64
            $type = ArrayHelper::remove($config, 'type');
65
        }
66
        $metaItem = MetaTag::create($type, $config);
67
        if ($add && $metaItem !== null) {
68
            $this->add($metaItem);
69
        }
70
71
        return $metaItem;
72
    }
73
74
    /**
75
     * @inheritdoc
76
     */
77
    public function add($metaItem, string $handle = self::GENERAL_HANDLE)
78
    {
79
        $key = MetaTagContainer::CONTAINER_TYPE . $handle;
80
        Seomatic::$plugin->metaContainers->addToMetaContainer($metaItem, $key);
81
82
        /** @var MetaTag $metaItem */
83
        return $metaItem;
84
    }
85
86
    /**
87
     * @inheritdoc
88
     */
89
    public function render()
90
    {
91
        $key = MetaTagContainer::CONTAINER_TYPE;
92
93
        return TemplateHelper::raw(Seomatic::$plugin->metaContainers->renderContainersByType($key));
94
    }
95
96
    /**
97
     * @param string $handle
98
     *
99
     * @return null|MetaTagContainer
100
     */
101
    public function container(string $handle = self::GENERAL_HANDLE)
102
    {
103
        $key = MetaTagContainer::CONTAINER_TYPE . $handle;
104
105
        return Seomatic::$plugin->metaContainers->getMetaContainer($key);
106
    }
107
}
108