Skip to content

Commit

Permalink
[!!!][FEATURE] Allow multiple icon sources for text and icon - fixes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaminkott committed Aug 12, 2018
1 parent ace965d commit c9e9a12
Show file tree
Hide file tree
Showing 30 changed files with 343 additions and 3,807 deletions.
118 changes: 118 additions & 0 deletions Classes/Updates/TexticonIconUpdate.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php

/*
* This file is part of the package bk2k/bootstrap-package.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/

namespace BK2K\BootstrapPackage\Updates;

use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
use TYPO3\CMS\Core\Utility\GeneralUtility;

/**
* TexticonIconUpdate
*/
class TexticonIconUpdate extends \TYPO3\CMS\Install\Updates\AbstractUpdate
{
/**
* @var string
*/
protected $title = '[BootstrapPackage] Migrate text and icon identifier and name';

/**
* @var string
*/
protected $table = 'tt_content';

/**
* @var string
*/
protected $field = 'icon';

/**
* Checks if an update is needed
*
* @param string &$description The description for the update
*
* @return bool Whether an update is needed (TRUE) or not (FALSE)
*/
public function checkForUpdate(&$description)
{
if ($this->isWizardDone()) {
return false;
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));

$elementCount = $queryBuilder->count('uid')
->from($this->table)
->orWhere(
$queryBuilder->expr()->like(
$this->field,
$queryBuilder->expr()->literal('Glyphicons%')
),
$queryBuilder->expr()->like(
$this->field,
$queryBuilder->expr()->literal('Ionicons%')
)
)
->execute()->fetchColumn(0);

return (bool)$elementCount;
}

/**
* Performs the database update
*
* @param array &$databaseQueries Queries done in this update
* @param string &$customMessage Custom message
* @return bool
*/
public function performUpdate(array &$databaseQueries, &$customMessage)
{
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->table);
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$statement = $queryBuilder->select('uid', $this->field)
->from($this->table)
->orWhere(
$queryBuilder->expr()->like(
$this->field,
$queryBuilder->expr()->literal('Glyphicons%')
),
$queryBuilder->expr()->like(
$this->field,
$queryBuilder->expr()->literal('Ionicons%')
)
)
->execute();
while ($record = $statement->fetch()) {
$icon = explode('__', $record[$this->field]);
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->update($this->table)
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($record['uid'], \PDO::PARAM_INT)
)
)
->set(
'icon_set',
'EXT:bootstrap_package/Resources/Public/Images/Icons/' . $icon[0] . '/'
)
->set(
$this->field,
'EXT:bootstrap_package/Resources/Public/Images/Icons/' . $icon[0] . '/' . $icon[1] . '.svg'
);
$databaseQueries[] = $queryBuilder->getSQL();
$queryBuilder->execute();
}
$this->markWizardAsDone();
return true;
}
}
25 changes: 10 additions & 15 deletions Classes/Utility/TextIconUtility.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,12 @@ class TextIconUtility
*/
public function addIconItems(array $parameters)
{
if (is_array($parameters['TSconfig']) && isset($parameters['TSconfig']['directory'])) {
$directory = $parameters['TSconfig']['directory'];
} else {
$directory = 'EXT:bootstrap_package/Resources/Public/Images/Icons/Glyphicons/';
}
$icons = $this->getIcons($directory);
if ($icons) {
$parameters['items'] = array_merge($parameters['items'], $icons);
$directory = $parameters['row']['icon_set'][0];
if ($directory !== '') {
$icons = $this->getIcons($directory);
if ($icons) {
$parameters['items'] = array_merge($parameters['items'], $icons);
}
}
}

Expand All @@ -55,14 +53,11 @@ protected function getIcons($directory)
);
ksort($files);
foreach ($files as $key => $fileinfo) {
if ($fileinfo->isFile() && in_array($fileinfo->getExtension(), ['svg', 'png', 'jpg', 'gif'])) {
$pathinfo = pathinfo($fileinfo->getPathname());
$iconPath = str_replace(PATH_site . 'typo3conf/ext/', 'EXT:', $fileinfo->getPathname());
$iconPath = str_replace('\\', '/', $iconPath);
if ($fileinfo->isFile() && in_array($fileinfo->getExtension(), ['svg', 'png', 'gif'])) {
$icons[] = [
$pathinfo['filename'],
$identifier . '__' . $pathinfo['filename'],
$iconPath
$fileinfo->getBasename('.' . $fileinfo->getExtension()),
$directory . $fileinfo->getFilename(),
$directory . $fileinfo->getFilename()
];
}
}
Expand Down
7 changes: 0 additions & 7 deletions Configuration/TCA/Overrides/pages.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,6 @@
* Register PageTS
*/

// Ionicons
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
$extensionKey,
'Configuration/TsConfig/Page/Feature/Ionicons.tsconfig',
'Bootstrap Package: Use Ionicons as Iconset'
);

// BackendLayouts
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
$extensionKey,
Expand Down
66 changes: 65 additions & 1 deletion Configuration/TCA/Overrides/tt_content_element_texticon.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@
'showitem' => '
icon_position, icon_type, icon_size, --linebreak--,
icon_color, icon_background, --linebreak--,
icon
icon_set, --linebreak--,
icon, icon_file
'
];

Expand Down Expand Up @@ -101,8 +102,22 @@
$GLOBALS['TCA']['tt_content']['columns'] = array_replace_recursive(
$GLOBALS['TCA']['tt_content']['columns'],
[
'icon_set' => [
'label' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:field.icon_set',
'onChange' => 'reload',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:option.none', ''],
['Ionicons', 'EXT:bootstrap_package/Resources/Public/Images/Icons/Ionicons/'],
['Glyphicons', 'EXT:bootstrap_package/Resources/Public/Images/Icons/Glyphicons/'],
],
],
],
'icon' => [
'label' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:field.icon',
'displayCond' => 'FIELD:icon_set:REQ:true',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
Expand All @@ -117,6 +132,55 @@
],
],
],
'icon_file' => [
'label' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:field.icon_file',
'displayCond' => 'FIELD:icon_set:REQ:false',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'icon_file',
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference'
],
'overrideChildTca' => [
'types' => [
\TYPO3\CMS\Core\Resource\File::FILETYPE_UNKNOWN => [
'showitem' => '
--palette--;;filePalette
'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_TEXT => [
'showitem' => '
--palette--;;filePalette
'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;;filePalette
'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_AUDIO => [
'showitem' => '
--palette--;;filePalette
'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_VIDEO => [
'showitem' => '
--palette--;;filePalette
'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_APPLICATION => [
'showitem' => '
--palette--;;filePalette
'
],
],
],
'minitems' => 1,
'maxitems' => 1,
],
'gif,png,svg'
),
],
'icon_position' => [
'label' => 'LLL:EXT:bootstrap_package/Resources/Private/Language/Backend.xlf:field.icon_position',
'config' => [
Expand Down
34 changes: 18 additions & 16 deletions Configuration/TypoScript/ContentElement/Element/Texticon.typoscript
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,26 @@ tt_content.texticon {
################
templateName = Texticon

#################
### VARIABLES ###
#################
variables {
identifier = TEXT
identifier {
field = icon
split {
token = __
returnKey = 0
##########################
### DATA PREPROCESSING ###
##########################
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = icon_file
as = icon
if {
isFalse.field = icon_set
}
}
icon = TEXT
icon {
field = icon
split {
token = __
returnKey = 1
20 = BK2K\BootstrapPackage\DataProcessing\StaticFilesProcessor
20 {
files {
0.field = icon
}
as = icon
if {
isTrue.field = icon_set
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,26 @@ lib.contentElement {
crop = {$plugin.bootstrap_package_contentelements.menu_card.abstract.crop}
}
}
texticon {
icon {
default {
height = {$plugin.bootstrap_package_contentelements.texticon.icon.default.height}
width = {$plugin.bootstrap_package_contentelements.texticon.icon.default.height}
}
medium {
height = {$plugin.bootstrap_package_contentelements.texticon.icon.medium.height}
width = {$plugin.bootstrap_package_contentelements.texticon.icon.medium.height}
}
large {
height = {$plugin.bootstrap_package_contentelements.texticon.icon.large.height}
width = {$plugin.bootstrap_package_contentelements.texticon.icon.large.height}
}
awesome {
height = {$plugin.bootstrap_package_contentelements.texticon.icon.awesome.height}
width = {$plugin.bootstrap_package_contentelements.texticon.icon.awesome.height}
}
}
}
timeline {
date {
format = {$plugin.bootstrap_package_contentelements.timeline.date.format}
Expand Down
Loading

0 comments on commit c9e9a12

Please sign in to comment.