class Micon in Micon 8
Same name in this branch
- 8 src/TwigExtension/Micon.php \Drupal\micon\TwigExtension\Micon
- 8 src/Element/Micon.php \Drupal\micon\Element\Micon
- 8 src/Entity/Micon.php \Drupal\micon\Entity\Micon
- 8 src/Plugin/SocialMediaLinks/Iconset/Micon.php \Drupal\micon\Plugin\SocialMediaLinks\Iconset\Micon
Same name and namespace in other branches
- 2.x src/Entity/Micon.php \Drupal\micon\Entity\Micon
Defines the Micon entity.
Plugin annotation
@ConfigEntityType(
id = "micon",
label = @Translation("Micon package"),
label_singular = @Translation("Micon package"),
label_plural = @Translation("Micon packages"),
label_count = @PluralTranslation(
singular = "@count Micon package",
plural = "@count Micon packages",
),
handlers = {
"view_builder" = "Drupal\micon\MiconViewBuilder",
"list_builder" = "Drupal\micon\MiconListBuilder",
"form" = {
"add" = "Drupal\micon\Form\MiconForm",
"edit" = "Drupal\micon\Form\MiconForm",
"delete" = "Drupal\micon\Form\MiconDeleteForm"
},
"route_provider" = {
"html" = "Drupal\micon\MiconHtmlRouteProvider",
},
},
config_prefix = "micon",
admin_permission = "administer micon",
entity_keys = {
"id" = "id",
"label" = "label",
"uuid" = "uuid",
"status" = "status"
},
links = {
"canonical" = "/admin/structure/micon/{micon}",
"add-form" = "/admin/structure/micon/add",
"edit-form" = "/admin/structure/micon/{micon}/edit",
"delete-form" = "/admin/structure/micon/{micon}/delete",
"collection" = "/admin/structure/micon"
}
)
Hierarchy
- class \Drupal\Core\Entity\EntityBase implements EntityInterface uses RefinableCacheableDependencyTrait, DependencySerializationTrait
- class \Drupal\Core\Config\Entity\ConfigEntityBase implements ConfigEntityInterface uses SynchronizableEntityTrait, PluginDependencyTrait
- class \Drupal\micon\Entity\Micon implements MiconInterface
- class \Drupal\Core\Config\Entity\ConfigEntityBase implements ConfigEntityInterface uses SynchronizableEntityTrait, PluginDependencyTrait
Expanded class hierarchy of Micon
5 files declare their use of Micon
- micon.module in ./
micon.module - Contains micon.module.
- MiconIconManager.php in src/
MiconIconManager.php - MiconLinkWidget.php in micon_link/
src/ Plugin/ Field/ FieldWidget/ MiconLinkWidget.php - MiconMenuConfigForm.php in micon_menu/
src/ Form/ MiconMenuConfigForm.php - StringMiconWidget.php in src/
Plugin/ Field/ FieldWidget/ StringMiconWidget.php
8 string references to 'Micon'
- micon.info.yml in ./
micon.info.yml - micon.info.yml
- micon.links.menu.yml in ./
micon.links.menu.yml - micon.links.menu.yml
- micon_content_type.info.yml in micon_content_type/
micon_content_type.info.yml - micon_content_type/micon_content_type.info.yml
- micon_link.info.yml in micon_link/
micon_link.info.yml - micon_link/micon_link.info.yml
- micon_local_task.info.yml in micon_local_task/
micon_local_task.info.yml - micon_local_task/micon_local_task.info.yml
File
- src/
Entity/ Micon.php, line 52
Namespace
Drupal\micon\EntityView source
class Micon extends ConfigEntityBase implements MiconInterface {
/**
* The Micon ID.
*
* @var string
*/
protected $id;
/**
* The Micon label.
*
* @var string
*/
protected $label;
/**
* The Micon type. Either 'font' or 'image'. Default is 'font'.
*
* @var string
*/
protected $type = 'font';
/**
* The info of this package.
*
* @var array
*/
protected $info = [];
/**
* The available icons in this package.
*
* @var array
*/
protected $icons = [];
/**
* The folder where Micon packages exist.
*
* @var string
*/
protected $directory = 'public://micon';
/**
* {@inheritdoc}
*/
public function setAsSvg() {
$this->type = 'image';
}
/**
* {@inheritdoc}
*/
public function type() {
return $this->type;
}
/**
* {@inheritdoc}
*/
public function getInfo() {
if (empty($this->info)) {
$this->info = [];
$path = $this
->getDirectory() . '/selection.json';
if (file_exists($path)) {
$data = file_get_contents($path);
$this->info = Json::decode($data);
}
}
return $this->info;
}
/**
* {@inheritdoc}
*/
public function getName() {
$info = $this
->getInfo();
return isset($info['metadata']['name']) ? $info['metadata']['name'] : str_replace('-', '', $this
->getPrefix());
}
/**
* {@inheritdoc}
*/
public function getPrefix() {
$info = $this
->getInfo();
return $info['preferences'][$this
->type() . 'Pref']['prefix'];
}
/**
* {@inheritdoc}
*/
public function getIcons() {
if (empty($this->icons) && ($info = $this
->getInfo())) {
$this->icons = [];
foreach ($info['icons'] as $icon) {
foreach ($icon['icon']['tags'] as $tag) {
$icon['tag'] = $tag;
$icon['prefix'] = $this
->getPrefix();
$icon['directory'] = file_create_url($this
->getDirectory());
$icon['package_id'] = $this
->id();
$icon['package_label'] = $this
->label();
$micon_icon = new MiconIcon($this
->type(), $icon);
$this->icons[$micon_icon
->getSelector()] = $micon_icon;
}
}
}
return $this->icons;
}
/**
* {@inheritdoc}
*/
public function setArchive($zip_path) {
$data = strtr(base64_encode(addslashes(gzcompress(serialize(file_get_contents($zip_path)), 9))), '+/=', '-_,');
$parts = str_split($data, 200000);
$this
->set('archive', $parts);
}
/**
* {@inheritdoc}
*/
public function getArchive() {
$data = implode('', $this
->get('archive'));
return unserialize(gzuncompress(stripslashes(base64_decode(strtr($data, '-_,', '+/=')))));
}
/**
* {@inheritdoc}
*/
public function getStylesheet() {
$path = $this
->getDirectory() . '/style.css';
return file_exists($path) ? $path : NULL;
}
/**
* Return the location where Micon packages exist.
*
* @return string
* The unique path to the package directory.
*/
protected function getDirectory() {
return $this->directory . '/' . $this
->id();
}
/**
* {@inheritdoc}
*/
public static function loadActive() {
return Micon::loadMultiple(Micon::loadActiveIds());
}
/**
* {@inheritdoc}
*/
public static function loadActiveIds() {
$query = \Drupal::entityQuery('micon')
->condition('status', 1);
return $query
->execute();
}
/**
* {@inheritdoc}
*/
public static function loadActiveLabels() {
$labels = [];
foreach (Micon::loadActive() as $micon) {
$labels[$micon
->id()] = $micon
->label();
}
return $labels;
}
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageInterface $storage) {
parent::preSave($storage);
if (!$this
->isNew()) {
$original = $storage
->loadUnchanged($this
->getOriginalId());
}
if (!$this
->get('archive')) {
throw new EntityMalformedException('IcoMoon icon package is required.');
}
if ($this
->isNew() || $original
->get('archive') !== $this
->get('archive')) {
$this
->archiveDecode();
}
}
/**
* {@inheritdoc}
*/
public static function preDelete(EntityStorageInterface $storage, array $entities) {
parent::preDelete($storage, $entities);
foreach ($entities as $entity) {
// Remove all files within package directory.
file_unmanaged_delete_recursive($entity
->getDirectory());
// Clean up empty directory. Will fail silently if it is not empty.
@rmdir($entity->directory);
}
}
/**
* Take base64 encoded archive and save it to a temporary file for extraction.
*/
protected function archiveDecode() {
$data = $this
->getArchive();
$zip_path = 'temporary://' . $this
->id() . '.zip';
file_put_contents($zip_path, $data);
$this
->archiveExtract($zip_path);
}
/**
* Properly extract and store an IcoMoon zip file.
*
* @param string $zip_path
* The absolute path to the zip file.
*/
public function archiveExtract($zip_path) {
$archiver = archiver_get_archiver($zip_path);
if (!$archiver) {
throw new Exception(t('Cannot extract %file, not a valid archive.', [
'%file' => $zip_path,
]));
}
$directory = $this
->getDirectory();
file_unmanaged_delete_recursive($directory);
file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
$archiver
->extract($directory);
// Remove unnecessary files.
file_unmanaged_delete_recursive($directory . '/demo-files');
file_unmanaged_delete($directory . '/demo.html');
file_unmanaged_delete($directory . '/Read Me.txt');
// Set package type to svg.
if (file_exists($directory . '/symbol-defs.svg')) {
$this
->setAsSvg();
// Update symbol to match new id.
$file_path = $directory . '/symbol-defs.svg';
$file_contents = file_get_contents($file_path);
$file_contents = str_replace($this
->getPrefix(), $this
->id() . '-', $file_contents);
file_put_contents($file_path, $file_contents);
}
else {
$font_directory = $directory . '/fonts';
$files_to_rename = $font_directory . '/*.*';
foreach (glob(drupal_realpath($files_to_rename)) as $file_to_rename_path) {
$file_new_path = str_replace('fonts/' . $this
->getName(), 'fonts/' . $this
->id(), $file_to_rename_path);
if ($file_to_rename_path !== $file_new_path) {
file_unmanaged_move($file_to_rename_path, $file_new_path, FILE_EXISTS_REPLACE);
}
}
}
// Update IcoMoon selection.json.
$file_path = $directory . '/selection.json';
$file_contents = file_get_contents($file_path);
// Protect icon keys.
$file_contents = str_replace('"icons":', 'MICONSIcons', $file_contents);
$file_contents = str_replace('"icon":', 'MICONIcon', $file_contents);
$file_contents = str_replace('iconIdx', 'MICONIdx', $file_contents);
$file_contents = str_replace($this
->getPrefix(), 'MICONPrefix', $file_contents);
// The name and selector should be updated to match entity info.
$file_contents = str_replace($this
->getName(), $this
->id(), $file_contents);
// Return protected keys.
$file_contents = str_replace('MICONSIcons', '"icons":', $file_contents);
$file_contents = str_replace('MICONIcon', '"icon":', $file_contents);
$file_contents = str_replace('MICONIdx', 'iconIdx', $file_contents);
$file_contents = str_replace('MICONPrefix', $this
->id() . '-', $file_contents);
file_put_contents($file_path, $file_contents);
// Update IcoMoon stylesheet.
$file_path = $directory . '/style.css';
$file_contents = file_get_contents($file_path);
// The style.css file provided by IcoMoon contains query parameters where it
// loads in the font files. Drupal CSS aggregation doesn't handle this well
// so we need to remove it.
$file_contents = preg_replace('(\\?[a-zA-Z0-9#\\-\\_]*)', '', $file_contents);
// Protect prefixes.
$file_contents = str_replace($this
->getPrefix(), 'MICON', $file_contents);
// The name and selector should be updated to match entity info.
$file_contents = str_replace($this
->getName(), $this
->id(), $file_contents);
// Return changed prefixes. This prevents something like m-icon from
// becoming m-icon-icon.
$file_contents = str_replace('MICON', $this
->id() . '-', $file_contents);
file_put_contents($file_path, $file_contents);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
CacheableDependencyTrait:: |
protected | property | Cache contexts. | |
CacheableDependencyTrait:: |
protected | property | Cache max-age. | |
CacheableDependencyTrait:: |
protected | property | Cache tags. | |
CacheableDependencyTrait:: |
protected | function | Sets cacheability; useful for value object constructors. | |
ConfigEntityBase:: |
private | property | Whether the config is being deleted by the uninstall process. | |
ConfigEntityBase:: |
protected | property | The language code of the entity's default language. | |
ConfigEntityBase:: |
protected | property | The original ID of the configuration entity. | |
ConfigEntityBase:: |
protected | property | The enabled/disabled status of the configuration entity. | 4 |
ConfigEntityBase:: |
protected | property | Third party entity settings. | |
ConfigEntityBase:: |
protected | property | Trust supplied data and not use configuration schema on save. | |
ConfigEntityBase:: |
protected | property | The UUID for this entity. | |
ConfigEntityBase:: |
protected | property | Information maintained by Drupal core about configuration. | |
ConfigEntityBase:: |
protected | function | Overrides \Drupal\Core\Entity\DependencyTrait:addDependency(). | |
ConfigEntityBase:: |
public | function |
Calculates dependencies and stores them in the dependency property. Overrides ConfigEntityInterface:: |
13 |
ConfigEntityBase:: |
public | function |
Creates a duplicate of the entity. Overrides EntityBase:: |
1 |
ConfigEntityBase:: |
public | function |
Disables the configuration entity. Overrides ConfigEntityInterface:: |
1 |
ConfigEntityBase:: |
public | function |
Enables the configuration entity. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Returns the value of a property. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Returns the cache tags that should be used to invalidate caches. Overrides EntityBase:: |
1 |
ConfigEntityBase:: |
public | function |
Gets the configuration dependency name. Overrides EntityBase:: |
|
ConfigEntityBase:: |
protected static | function | Gets the configuration manager. | |
ConfigEntityBase:: |
public | function |
Gets the configuration target identifier for the entity. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Gets the configuration dependencies. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Gets the original ID. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
ConfigEntityBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
ConfigEntityBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
ConfigEntityBase:: |
protected | function | Gets the typed config manager. | |
ConfigEntityBase:: |
public | function |
Gets whether on not the data is trusted. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
protected static | function |
Override to never invalidate the individual entities' cache tags; the
config system already invalidates them. Overrides EntityBase:: |
|
ConfigEntityBase:: |
protected | function |
Override to never invalidate the entity's cache tag; the config system
already invalidates it. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Checks whether this entity is installable. Overrides ConfigEntityInterface:: |
2 |
ConfigEntityBase:: |
public | function |
Overrides Entity::isNew(). Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Returns whether this entity is being changed during the uninstall process. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Deprecated way of generating a link to the entity. See toLink(). Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Informs the entity that entities it depends on will be deleted. Overrides ConfigEntityInterface:: |
7 |
ConfigEntityBase:: |
public | function |
Saves an entity permanently. Overrides EntityBase:: |
1 |
ConfigEntityBase:: |
public | function |
Sets the value of a property. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Sets the original ID. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Sets the status of the configuration entity. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
ConfigEntityBase:: |
public | function | ||
ConfigEntityBase:: |
public static | function | Helper callback for uasort() to sort configuration entities by weight and label. | 6 |
ConfigEntityBase:: |
public | function |
Returns whether the configuration entity is enabled. Overrides ConfigEntityInterface:: |
4 |
ConfigEntityBase:: |
public | function |
Gets an array of all property values. Overrides EntityBase:: |
2 |
ConfigEntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Sets that the data should be trusted. Overrides ConfigEntityInterface:: |
|
ConfigEntityBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
ConfigEntityBase:: |
public | function |
Gets the public URL for this entity. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Gets the URL object for the entity. Overrides EntityBase:: |
|
ConfigEntityBase:: |
public | function |
Constructs an Entity object. Overrides EntityBase:: |
10 |
ConfigEntityBase:: |
public | function |
Overrides EntityBase:: |
4 |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | Aliased as: traitSleep | 1 |
DependencySerializationTrait:: |
public | function | 2 | |
DependencyTrait:: |
protected | property | The object's dependencies. | |
DependencyTrait:: |
protected | function | Adds multiple dependencies. | |
DependencyTrait:: |
protected | function | Adds a dependency. Aliased as: addDependencyTrait | |
EntityBase:: |
protected | property | Boolean indicating whether the entity should be forced to be new. | |
EntityBase:: |
protected | property | The entity type. | |
EntityBase:: |
protected | property | A typed data object wrapping this entity. | |
EntityBase:: |
public | function |
Checks data value access. Overrides AccessibleInterface:: |
1 |
EntityBase:: |
public | function |
Gets the bundle of the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
public static | function |
Constructs a new entity object, without permanently saving it. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Deletes an entity permanently. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Enforces an entity to be new. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | Gets the entity manager. | |
EntityBase:: |
protected | function | Gets the entity type bundle info service. | |
EntityBase:: |
protected | function | Gets the entity type manager. | |
EntityBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyTrait:: |
|
EntityBase:: |
public | function |
Gets the key that is used to store configuration dependencies. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the entity type definition. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the ID of the type of the entity. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | The list cache tags to invalidate for this entity. | |
EntityBase:: |
public | function |
Gets a typed data object for this entity object. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Indicates if a link template exists for a given key. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets the identifier. Overrides EntityInterface:: |
11 |
EntityBase:: |
public | function |
Gets the label of the entity. Overrides EntityInterface:: |
6 |
EntityBase:: |
public | function |
Gets the language of the entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets the language manager. | |
EntityBase:: |
protected | function | Gets an array link templates. | 1 |
EntityBase:: |
public static | function |
Loads an entity. Overrides EntityInterface:: |
|
EntityBase:: |
public static | function |
Loads one or more entities. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Acts on a created entity before hooks are invoked. Overrides EntityInterface:: |
4 |
EntityBase:: |
public static | function |
Acts on deleted entities before the delete hook is invoked. Overrides EntityInterface:: |
16 |
EntityBase:: |
public static | function |
Acts on loaded entities. Overrides EntityInterface:: |
2 |
EntityBase:: |
public | function |
Acts on a saved entity before the insert or update hook is invoked. Overrides EntityInterface:: |
14 |
EntityBase:: |
public static | function |
Changes the values of an entity before it is created. Overrides EntityInterface:: |
5 |
EntityBase:: |
public | function |
Gets a list of entities referenced by this entity. Overrides EntityInterface:: |
1 |
EntityBase:: |
public | function |
Generates the HTML for a link to this entity. Overrides EntityInterface:: |
|
EntityBase:: |
public | function |
Gets a list of URI relationships supported by this entity. Overrides EntityInterface:: |
|
EntityBase:: |
protected | function | Gets an array of placeholders for this entity. | 2 |
EntityBase:: |
public | function |
Gets the entity UUID (Universally Unique Identifier). Overrides EntityInterface:: |
1 |
EntityBase:: |
protected | function | Gets the UUID generator. | |
Micon:: |
protected | property | The folder where Micon packages exist. | |
Micon:: |
protected | property | The available icons in this package. | |
Micon:: |
protected | property | The Micon ID. | |
Micon:: |
protected | property | The info of this package. | |
Micon:: |
protected | property | The Micon label. | |
Micon:: |
protected | property | The Micon type. Either 'font' or 'image'. Default is 'font'. | |
Micon:: |
protected | function | Take base64 encoded archive and save it to a temporary file for extraction. | |
Micon:: |
public | function | Properly extract and store an IcoMoon zip file. | |
Micon:: |
public | function |
Gets the archive from a base64 encoded string. Overrides MiconInterface:: |
|
Micon:: |
protected | function | Return the location where Micon packages exist. | |
Micon:: |
public | function |
Get Micon package icons with tag as key. Overrides MiconInterface:: |
|
Micon:: |
public | function |
Get Micon package information. Overrides MiconInterface:: |
|
Micon:: |
public | function |
Get unique IcoMoon package name. Overrides MiconInterface:: |
|
Micon:: |
public | function |
Get unique IcoMoon package prefix. Overrides MiconInterface:: |
|
Micon:: |
public | function |
Return the stylesheet of the Micon package if it exists. Overrides MiconInterface:: |
|
Micon:: |
public static | function |
Load all Micon packages. Overrides MiconInterface:: |
|
Micon:: |
public static | function |
Load all active Micon IDs. Overrides MiconInterface:: |
|
Micon:: |
public static | function |
Load all active Micon labels. Overrides MiconInterface:: |
|
Micon:: |
public static | function |
Acts on entities before they are deleted and before hooks are invoked. Overrides ConfigEntityBase:: |
|
Micon:: |
public | function |
Acts on an entity before the presave hook is invoked. Overrides ConfigEntityBase:: |
|
Micon:: |
public | function |
Set the archive as base64 encoded string. Overrides MiconInterface:: |
|
Micon:: |
public | function | ||
Micon:: |
public | function |
Gets the type of package. Overrides MiconInterface:: |
|
PluginDependencyTrait:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. | 1 |
PluginDependencyTrait:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. | |
PluginDependencyTrait:: |
protected | function | Wraps the module handler. | 1 |
PluginDependencyTrait:: |
protected | function | Wraps the theme handler. | 1 |
RefinableCacheableDependencyTrait:: |
public | function | 1 | |
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
RefinableCacheableDependencyTrait:: |
public | function | ||
SynchronizableEntityTrait:: |
protected | property | Whether this entity is being created, updated or deleted through a synchronization process. | |
SynchronizableEntityTrait:: |
public | function | ||
SynchronizableEntityTrait:: |
public | function |