primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,99 @@
<?php
/**
* @package AllediaFramework
* @contact www.joomlashack.com, help@joomlashack.com
* @copyright 2021-2023 Joomlashack.com. All rights reserved
* @license https://www.gnu.org/licenses/gpl.html GNU/GPL
*
* This file is part of AllediaFramework.
*
* AllediaFramework is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* AllediaFramework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AllediaFramework. If not, see <https://www.gnu.org/licenses/>.
*/
use Joomla\CMS\HTML\HTMLHelper;
// phpcs:disable PSR1.Files.SideEffects
defined('_JEXEC') or die();
// phpcs:enable PSR1.Files.SideEffects
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
abstract class JhtmlAlledia
{
/**
* Joomla version agnostic modal select field rendering
*
* @param array $options
*
* @return string
* @deprecated v3.3.5: Use AllediaModal::renderSelectField()
*/
public static function renderModal(array $options): string
{
return HTMLHelper::_('alledia.modal.renderSelectField', $options);
}
/**
* @param string $title
* @param string $text
* @param string $body
*
* @return string
*/
public static function tooltip(string $title, string $text, string $body): string
{
HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');
return sprintf(
'<span class="inactive tip-top hasTooltip" title="%s">%s</span>',
HTMLHelper::_('tooltipText', $title . ' :: ' . $text),
$body
);
}
/**
* Ensure Fontawesome is loaded
*
* @return void
*/
public static function fontawesome(): void
{
HTMLHelper::_(
'stylesheet',
'lib_allediaframework/fontawesome/css/all.min.css',
['relative' => true]
);
}
/**
* Truncate a string on word boundary within limit
* Recognize '-' and '_' along with standard whitespace
*
* @param string $string
* @param int $limit
* @param ?string $continued
*
* @return string
*/
public static function truncate(string $string, int $limit, ?string $continued = '...'): string
{
if (
mb_strlen($string) > $limit
&& mb_ereg('(.*?)[^\s_-]*\w$', trim(mb_substr($string, 0, $limit - strlen($continued) + 1) . 'a'), $match)
) {
return trim(trim($match[1]), '-_') . $continued;
}
return $string;
}
}

View File

@ -0,0 +1,394 @@
<?php
/**
* @package AllediaFramework
* @contact www.joomlashack.com, help@joomlashack.com
* @copyright 2021-2023 Joomlashack.com. All rights reserved
* @license https://www.gnu.org/licenses/gpl.html GNU/GPL
*
* This file is part of AllediaFramework.
*
* AllediaFramework is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* AllediaFramework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AllediaFramework. If not, see <https://www.gnu.org/licenses/>.
*/
use Alledia\Framework\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Version;
use Joomla\Utilities\ArrayHelper;
// phpcs:disable PSR1.Files.SideEffects
defined('_JEXEC') or die();
// phpcs:enable PSR1.Files.SideEffects
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
abstract class AllediaModal
{
/**
* @var string[]
*/
protected static $modalFunctions = [];
/**
* Joomla version agnostic modal select field rendering
*
* @param array $options = [
* 'id' => required: unique Field ID,
* 'name' => required: Field name,
* 'link' => required: button action,
* 'function' => required: parent window close modal function,
* 'itemType' => required: Unique item identifier
* 'title' => Modal window title - default: JSELECT,
* 'hint' => Input field value text - default: JGLOBAL_SELECT_AN_OPTION,
* 'button' => Button text - default: JSELECT,
* 'close' => Footer Close button text - default: JLIB_HTML_BEHAVIOR_CLOSE,
* 'value' => Currently selected value,
* 'height' => Modal height in pixels - default: 400,
* 'width' => Modal width in pixels - default: 800,
* 'bodyHeight' => 70,
* 'modalWidth' => 80,
* ]
*
* @return string
*/
public static function renderSelectField(array $options): string
{
$required = [
'id' => null,
'name' => null,
'link' => null,
'function' => null,
'itemType' => null,
];
$options = array_replace_recursive(
$required,
[
'title' => Text::_('JSELECT'),
'hint' => Text::_('JGLOBAL_SELECT_AN_OPTION'),
'button' => [
'select' => Text::_('JSELECT'),
'clear' => Text::_('JCLEAR')
],
'close' => Text::_('JLIB_HTML_BEHAVIOR_CLOSE'),
'value' => null,
'required' => false,
'height' => '400px',
'width' => '100%',
'bodyHeight' => 70,
'modalWidth' => 80,
],
$options
);
$requiredOptions = array_filter(array_intersect_key($options, $required));
$missing = array_diff_key($required, $requiredOptions);
if ($missing) {
return 'Missing Required options: ' . join(', ', array_keys($missing));
}
/**
* @var string $id
* @var string $name
* @var string $hint
* @var string $link
* @var string $function
* @var string $itemType
*/
extract($requiredOptions);
HTMLHelper::_('jquery.framework');
if (Version::MAJOR_VERSION < 4) {
HTMLHelper::_('script', 'system/modal-fields.js', ['version' => 'auto', 'relative' => true]);
} elseif ($doc = Factory::getDocument()) {
if (is_callable([$doc, 'getWebAssetManager'])) {
$wa = $doc->getWebAssetManager();
$wa->useScript('field.modal-fields');
}
} else {
return 'Unable to initialize Modal window';
}
if (empty(static::$modalFunctions[$function])) {
$script = <<<JSCRIPT
window.{$function} = function(id, name) {
window.processModalSelect('{$itemType}', '{$id}', id, name);
};
JSCRIPT;
Factory::getDocument()->addScriptDeclaration($script);
static::$modalFunctions[$function] = true;
}
$title = htmlspecialchars($options['title'], ENT_QUOTES);
$modalId = 'ModalSelect' . $itemType . '_' . $id;
// Begin field output
$html = '<span class="input-append input-group">';
// Read-only name field
$nameAttribs = [
'type' => 'text',
'id' => $id . '_name',
'value' => $options['hint'],
'class' => 'input-medium form-control',
'readonly' => 'readonly',
'size' => 35
];
$html .= sprintf('<input %s/>', ArrayHelper::toString($nameAttribs));
// Create read-only ID field
$idAttribs = [
'type' => 'hidden',
'id' => $id . '_id',
'name' => $name,
'value' => $options['value'],
'data-required' => (int)(bool)$options['required'],
'data-text' => $title
];
if ($options['required']) {
$idAttribs['class'] = 'required modal-value';
}
$html .= sprintf('<input %s/>', ArrayHelper::toString($idAttribs));
$html .= static::createSelectButton(
$options['value'],
$id,
$modalId,
$options['button']['select'],
$options['required']
);
$html .= static::createClearButton(
$options['value'],
$id,
$modalId,
$options['button']['clear'],
$options['required']
);
// Modal window
$html .= HTMLHelper::_(
'bootstrap.renderModal',
$modalId,
[
'title' => $title,
'url' => $link,
'height' => '400px',
'width' => '800px',
'bodyHeight' => '70',
'modalWidth' => '80',
'footer' => '<a role="button" class="btn" data-dismiss="modal" data-bs-dismiss="modal" aria-hidden="true">'
. Text::_('JLIB_HTML_BEHAVIOR_CLOSE')
. '</a>'
,
]
);
return $html;
}
/**
* @param string $value
* @param string $id
* @param string $modalId
* @param string $text
* @param bool $required
*
* @return string
*/
protected static function createSelectButton(
string $value,
string $id,
string $modalId,
string $text,
bool $required
): string {
$selectAttribs = [
'class' => 'btn btn-primary hasTooltip',
'id' => $id . ($required ? '_change' : '_select'),
'data-toggle' => 'modal',
'data-bs-toggle' => 'modal',
'data-bs-target' => '#' . $modalId,
'role' => 'button',
];
if (empty($required) && $value) {
$selectAttribs['class'] .= ' hidden';
}
return HTMLHelper::_(
'link',
'#' . $modalId,
'<span class="icon-list" aria-hidden="true"></span> ' . $text,
$selectAttribs
);
}
/**
* @param string $value
* @param string $id
* @param string $modalId
* @param string $text
* @param bool $required
*
* @return string
*/
protected static function createClearButton(
string $value,
string $id,
string $modalId,
string $text,
bool $required
): string {
if ($required == false) {
$clearAttribs = [
'class' => 'btn btn-secondary hasTooltip',
'id' => $id . '_clear',
'role' => 'button',
'onclick' => "window.processModalParent('{$id}');return false;",
];
if (empty($value)) {
$clearAttribs['class'] .= ' hidden';
}
return HTMLHelper::_(
'link',
'#' . $modalId,
'<span class="icon-remove" aria-hidden="true"></span> ' . $text,
$clearAttribs
);
}
return '';
}
/**
* @param string $text
* @param string $modalId
* @param array $params
*
* @return string
*/
public static function renderLink(string $text, string $modalId, array $params): string
{
$params = array_merge(
[
'title' => 'MODAL!',
'height' => '400px',
'width' => '800px',
'bodyHeight' => '70',
'modalWidth' => '80'
],
$params
);
$html = HTMLHelper::_('bootstrap.renderModal', $modalId, $params);
$html .= HTMLHelper::_(
'link',
'#' . $modalId,
$text,
[
'data-toggle' => 'modal',
'data-bs-toggle' => 'modal'
]
);
return $html;
}
/**
* @param ?string[] $attribs
* @param ?string $title
*
* @return string
*/
public static function footerSaveButton(array $attribs = [], ?string $title = null): string
{
$attribs = array_merge(
[
'class' => 'btn btn-primary',
'data-dismiss' => 'modal',
'data-bs-dismiss' => 'modal'
],
$attribs
);
return static::footerButton($title ?: Text::_('JSAVE'), $attribs);
}
/**
* @param ?string[] $attribs
* @param ?string $title
*
* @return string
*/
public static function footerApplyButton(array $attribs = [], ?string $title = null): string
{
$attribs = array_merge(
[
'class' => 'btn btn-success'
],
$attribs
);
return static::footerButton($title ?: Text::_('JAPPLY'), $attribs);
}
/**
* @param ?string[] $attribs
* @param ?string $title
*
* @return string
*/
public static function footerCloseButton(array $attribs = [], ?string $title = null): string
{
$attribs = array_merge(
[
'data-dismiss' => 'modal',
'data-bs-dismiss' => 'modal'
],
$attribs
);
return static::footerButton($title ?: Text::_('JLIB_HTML_BEHAVIOR_CLOSE'), $attribs);
}
/**
* @param string $title
* @param array $attribs
*
* @return string
*/
public static function footerButton(string $title, array $attribs = []): string
{
$attribs = array_merge(
[
'role' => 'button',
'class' => 'btn',
'aria-hidden' => 'true'
],
$attribs
);
return sprintf(
'<a %s>%s</a>',
ArrayHelper::toString($attribs),
$title
);
}
}

View File

@ -0,0 +1,88 @@
<?php
/**
* @package AllediaFramework
* @contact www.joomlashack.com, help@joomlashack.com
* @copyright 2023 Joomlashack.com. All rights reserved
* @license https://www.gnu.org/licenses/gpl.html GNU/GPL
*
* This file is part of AllediaFramework.
*
* AllediaFramework is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* AllediaFramework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AllediaFramework. If not, see <https://www.gnu.org/licenses/>.
*/
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Version;
// phpcs:disable PSR1.Files.SideEffects
defined('_JEXEC') or die();
// phpcs:enable PSR1.Files.SideEffects
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
abstract class AllediaTab
{
/**
* @param string $selector
* @param ?array $params
*
* @return string
*/
public static function startTabSet(string $selector = 'myTab', array $params = []): string
{
if (Version::MAJOR_VERSION < 4) {
return HTMLHelper::_('bootstrap.startTabSet', $selector, $params);
}
return HTMLHelper::_('uitab.startTabSet', $selector, $params);
}
/**
* @param string $selector
* @param string $id
* @param string $title
*
* @return string
*/
public static function addTab(string $selector, string $id, string $title): string
{
if (Version::MAJOR_VERSION < 4) {
return HTMLHelper::_('bootstrap.addTab', $selector, $id, $title);
}
return HTMLHelper::_('uitab.addTab', $selector, $id, $title);
}
/**
* @return string
*/
public static function endTab(): string
{
if (Version::MAJOR_VERSION < 4) {
return HTMLHelper::_('bootstrap.endTab');
}
return HTMLHelper::_('uitab.endTab');
}
/**
* @return string
*/
public static function endTabset(): string
{
if (Version::MAJOR_VERSION < 4) {
return HTMLHelper::_('bootstrap.endTabSet');
}
return HTMLHelper::_('uitab.endTabSet');
}
}