first commit

This commit is contained in:
2025-07-22 15:41:16 +02:00
commit 2a40a54622
81 changed files with 5614 additions and 0 deletions

View File

@ -0,0 +1,67 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use \Joomla\CMS\Factory;
use \Joomla\CMS\Form\FormField;
use \Joomla\CMS\User\UserFactoryInterface;
/**
* Supports an HTML select list of categories
*
* @since 1.0.0
*/
class CreatedbyField extends FormField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'createdby';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.0.0
*/
protected function getInput()
{
// Initialize variables.
$html = array();
// Load user
$user_id = $this->value;
if ($user_id)
{
$container = \Joomla\CMS\Factory::getContainer();
$userFactory = $container->get(UserFactoryInterface::class);
$user = $userFactory->loadUserById($user_id);
}
else
{
$user = Factory::getApplication()->getIdentity();
$html[] = '<input type="hidden" name="' . $this->name . '" value="' . $user->id . '" />';
}
if (!$this->hidden)
{
$html[] = "<div>" . $user->name . " (" . $user->username . ")</div>";
}
return implode($html);
}
}

View File

@ -0,0 +1,296 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use \Joomla\CMS\Factory;
use \Joomla\CMS\HTML\HTMLHelper;
use \Joomla\CMS\Language\Text;
use \Joomla\CMS\Form\Field\ListField;
/**
* Supports a value from an external table
*
* @since 1.0.0
*/
class ForeignKeyField extends ListField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'foreignkey';
protected $layout = 'joomla.form.field.list-fancy-select';
/**
* The translate.
*
* @var boolean
* @since 1.0.0
*/
protected $translate = true;
protected $header = false;
private $input_type;
private $table;
private $key_field;
private $value_field;
private $option_key_field;
private $option_value_field;
private $condition;
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.0.0
*/
protected function processQuery()
{
// Type of input the field shows
$this->input_type = $this->getAttribute('input_type');
// Database Table
$this->table = $this->getAttribute('table');
// The field that the field will save on the database
$this->key_field = (string) $this->getAttribute('key_field');
// The column that the field shows in the input
$this->value_field = (string) $this->getAttribute('value_field');
// The option field that the field will save on the database
$this->option_key_field = (string) $this->getAttribute('option_key_field');
// The option value that the field shows in the input
$this->option_value_field = (string) $this->getAttribute('option_value_field');
// Flag to identify if the fk_value is multiple
$this->value_multiple = (int) $this->getAttribute('value_multiple', 0);
$this->required = (string) $this->getAttribute('required', 0);
// Flag to identify if the fk_value hides the trashed items
$this->hideTrashed = (int) $this->getAttribute('hide_trashed', 0);
// Flag to identify if the fk_value hides the unpublished items
$this->hideUnpublished = (int) $this->getAttribute('hide_unpublished', 0);
// Flag to identify if the fk_value hides the published items
$this->hidePublished = (int) $this->getAttribute('hide_published', 0);
// Flag to identify if the fk_value hides the archived items
$this->hideArchived = (int) $this->getAttribute('hide_archived', 0);
// Flag to identify if the fk has default order
$this->fk_ordering = (string) $this->getAttribute('fk_ordering');
// The where SQL for foreignkey
$this->condition = (string) $this->getAttribute('condition');
// Flag for translate options
$this->translate = (bool) $this->getAttribute('translate');
// Initialize variables.
$html = '';
$fk_value = '';
// Load all the field options
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true);
// Support for multiple fields on fk_values
if ($this->value_multiple == 1)
{
// Get the fields for multiple value
$this->value_fields = (string) $this->getAttribute('value_field_multiple');
$this->value_fields = explode(',', $this->value_fields);
$this->separator = (string) $this->getAttribute('separator');
$fk_value = ' CONCAT(';
foreach ($this->value_fields as $field)
{
$fk_value .= $db->quoteName($field) . ', \'' . $this->separator . '\', ';
}
$fk_value = substr($fk_value, 0, -(strlen($this->separator) + 6));
$fk_value .= ') AS ' . $db->quoteName($this->value_field);
}
else
{
$fk_value = $db->quoteName($this->value_field);
}
$query
->select(
array(
$db->quoteName($this->key_field),
$fk_value
)
)
->from($this->table);
if ($this->hideTrashed)
{
$query->where($db->quoteName('state') . ' != -2');
}
if ($this->hideUnpublished)
{
$query->where($db->quoteName('state') . ' != 0');
}
if ($this->hidePublished)
{
$query->where($db->quoteName('state') . ' != 1');
}
if ($this->hideArchived)
{
$query->where($db->quoteName('state') . ' != 2');
}
if ($this->fk_ordering)
{
$query->order($this->fk_ordering);
}
if($this->condition)
{
$query->where($this->condition);
}
return $query;
}
/**
* Method to get the field input for a foreignkey field.
*
* @return string The field input.
*
* @since 1.0.0
*/
protected function getInput()
{
$data = $this->getLayoutData();
if (!\is_array($this->value) && !empty($this->value))
{
if (\is_object($this->value))
{
$this->value = get_object_vars($this->value);
}
// String in format 2,5,4
if (\is_string($this->value))
{
$this->value = explode(',', $this->value);
}
// Integer is given
if (\is_int($this->value))
{
$this->value = array($this->value);
}
$data['value'] = $this->value;
}
$data['options'] = $this->getOptions();
return $this->getRenderer($this->layout)->render($data);
}
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.0.0
*/
protected function getOptions()
{
$options = array();
$db = Factory::getContainer()->get('DatabaseDriver');
try
{
$db->setQuery($this->processQuery());
$results = $db->loadObjectList();
}
catch (ExecutionFailureException $e)
{
Factory::getApplication()->enqueueMessage(Text::_('JERROR_AN_ERROR_HAS_OCCURRED'), 'error');
}
// Add header.
if (!empty($this->header))
{
$options[] = (object) ["value" => '', "text" => Text::_($this->header)];
}
if(!empty($this->option_value_field) || !empty($this->option_key_field))
{
$options[] = (object) ["value" => $this->option_key_field, "text" => Text::_($this->option_value_field)];
}
// Build the field options.
if (!empty($results))
{
foreach ($results as $item)
{
$options[] = (object) [
"value" => $item->{$this->key_field},
"text" => $this->translate == true ? Text::_($item->{$this->value_field}) : $item->{$this->value_field}
];
}
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
/**
* Wrapper method for getting attributes from the form element
*
* @param string $attr_name Attribute name
* @param mixed $default Optional value to return if attribute not found
*
* @return mixed The value of the attribute if it exists, null otherwise
*/
public function getAttribute($attr_name, $default = null)
{
if (!empty($this->element[$attr_name]))
{
return $this->element[$attr_name];
}
else
{
return $default;
}
}
}

View File

@ -0,0 +1,53 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use \Joomla\CMS\Factory;
use \Joomla\CMS\Form\FormField;
/**
* Supports an HTML select list of categories
*
* @since 1.0.0
*/
class ModifiedbyField extends FormField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'modifiedby';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.0.0
*/
protected function getInput()
{
// Initialize variables.
$html = array();
$user = Factory::getApplication()->getIdentity();
$html[] = '<input type="hidden" name="' . $this->name . '" value="' . $user->id . '" />';
if (!$this->hidden)
{
$html[] = "<div>" . $user->name . " (" . $user->username . ")</div>";
}
return implode($html);
}
}

View File

@ -0,0 +1,83 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use Joomla\CMS\Helper\UserGroupsHelper;
use \Joomla\CMS\Factory;
use Joomla\CMS\Form\Field\ListField;
/**
* Supports an HTML select list of categories
*
* @since 1.0.0
*/
class NestedparentField extends ListField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'nestedparent';
/**
* Method to get the field options.
*
* @return array The field option objects.
*
* @since 1.0.0
*/
protected function getOptions()
{
$options = array();
$table = $this->getAttribute('table');
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true)
->select('DISTINCT(a.id) AS value, a.title AS text, a.level, a.lft')
->from($table . ' AS a');
// Prevent parenting to children of this item.
if ($id = $this->form->getValue('id'))
{
$query->join('LEFT', $db->quoteName($table) . ' AS p ON p.id = ' . (int) $id)
->where('NOT(a.lft >= p.lft AND a.rgt <= p.rgt)');
}
$query->order('a.lft ASC');
// Get the options.
$db->setQuery($query);
try
{
$options = $db->loadObjectList();
}
catch (\RuntimeException $e)
{
\JError::raiseWarning(500, $e->getMessage());
}
// Pad the option text with spaces using depth level as a multiplier.
for ($i = 0, $n = count($options); $i < $n; $i++)
{
$options[$i]->text = str_repeat('- ', $options[$i]->level) . $options[$i]->text;
}
// Merge any additional options in the XML definition.
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}

View File

@ -0,0 +1,49 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');
use \Joomla\CMS\Language\Text;
use \Joomla\CMS\Form\FormField;
/**
* Class SubmitField
*
* @since 1.0.0
*/
class SubmitField extends FormField
{
protected $type = 'submit';
protected $value;
protected $for;
/**
* Get a form field markup for the input
*
* @return string
*/
public function getInput()
{
$this->value = $this->getAttribute('value');
return '<button id="' . $this->id . '"'
. ' name="submit_' . $this->for . '"'
. ' value="' . $this->value . '"'
. ' title="' . Text::_('JSEARCH_FILTER_SUBMIT') . '"'
. ' class="btn" style="margin-top: -10px;">'
. Text::_('JSEARCH_FILTER_SUBMIT')
. ' </button>';
}
}

View File

@ -0,0 +1,65 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use \Joomla\CMS\Factory;
use \Joomla\CMS\Language\Text;
use \Joomla\CMS\Form\FormField;
use \Joomla\CMS\Date\Date;
use Joomla\CMS\HTML\HTMLHelper;
/**
* Supports an HTML select list of categories
*
* @since 1.0.0
*/
class TimecreatedField extends FormField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'timecreated';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.0.0
*/
protected function getInput()
{
// Initialize variables.
$html = array();
$time_created = $this->value;
if (!strtotime($time_created))
{
$time_created = Factory::getDate()->toSql();
$html[] = '<input type="hidden" name="' . $this->name . '" value="' . $time_created . '" />';
}
$hidden = (boolean) $this->element['hidden'];
if ($hidden == null || !$hidden)
{
$pretty_date = HTMLHelper::_('date', $time_created, Text::_('DATE_FORMAT_LC2'), true);
$html[] = "<div>" . $pretty_date . "</div>";
}
return implode($html);
}
}

View File

@ -0,0 +1,68 @@
<?php
/**
* @version CVS: 1.0.0
* @package Com_Circolari
* @author Tommaso Cippitelli <tommaso.cippitelli@protocollicreativi.it>
* @copyright 2025 Tommaso Cippitelli
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Pcrt\Component\Circolari\Site\Field;
defined('JPATH_BASE') or die;
use \Joomla\CMS\Factory;
use \Joomla\CMS\Language\Text;
use \Joomla\CMS\Form\FormField;
use \Joomla\CMS\Date\Date;
use Joomla\CMS\HTML\HTMLHelper;
/**
* Supports an HTML select list of categories
*
* @since 1.0.0
*/
class TimeupdatedField extends FormField
{
/**
* The form field type.
*
* @var string
* @since 1.0.0
*/
protected $type = 'timeupdated';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
*
* @since 1.0.0
*/
protected function getInput()
{
// Initialize variables.
$html = array();
$old_time_updated = $this->value;
$hidden = (boolean) $this->element['hidden'];
if ($hidden == null || !$hidden)
{
if (!strtotime($old_time_updated))
{
$html[] = '-';
}
else
{
$pretty_date = HTMLHelper::_('date', $old_time_updated, Text::_('DATE_FORMAT_LC2'), true);
$html[] = "<div>" . $pretty_date . "</div>";
}
}
$time_updated = Factory::getDate()->toSql();
$html[] = '<input type="hidden" name="' . $this->name . '" value="' . $time_updated . '" />';
return implode($html);
}
}

View File

@ -0,0 +1 @@
<html><body></body></html>