HEX
Server: Apache
System: Linux webm010.cluster103.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: iestorre (46869)
PHP: 8.0.30
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/iestorre/www/modules/mod_social_slider/fields/sorting.php
<?php
/**
 * @package    JJ_Social_Slider
 * @author     JoomJunk <admin@joomjunk.co.uk>
 * @copyright  Copyright (C) 2011 - 2021 JoomJunk. All Rights Reserved
 * @license    GPL v3.0 or later https://gnu.org/licenses/gpl-3.0.html
 */

defined('_JEXEC') or die('Restricted access');

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Uri\Uri;

/**
 * Form Field class for JoomJunk.
 * Provides a jQuery UI drag and drop form field for the social slider fields
 *
 * @package     JJ_Social_Slider
 * @since       1.4.0
 */
class JFormFieldSorting extends Joomla\CMS\Form\FormField
{
	/**
	 * The form field type.
	 *
	 * @var    string
	 * @since  1.4.0
	 */
	protected $type = 'Sorting';

	/**
	 * Method to get the list field input markup.
	 *
	 * @return  string  The field input markup.
	 *
	 * @since   1.4.0
	 */
	protected function getInput()
	{
		$options = [
			'sort_1' => Text::_('COM_MODULES_FACEBOOK_FIELDSET_LABEL'),
			'sort_2' => Text::_('COM_MODULES_TWITTER_FIELDSET_LABEL'),
			'sort_3' => Text::_('COM_MODULES_GOOGLES_FIELDSET_LABEL'),
			'sort_4' => Text::_('COM_MODULES_MYSPACE_FIELDSET_LABEL'),
			'sort_5' => Text::_('COM_MODULES_YOUTUBE_FIELDSET_LABEL'),
			'sort_6' => Text::_('COM_MODULES_LINKEDIN_FIELDSET_LABEL'),
			'sort_7' => Text::_('COM_MODULES_STEAM_FIELDSET_LABEL'),
			'sort_8' => Text::_('COM_MODULES_LASTFM_FIELDSET_LABEL'),
			'sort_9' => Text::_('COM_MODULES_PINTEREST_FIELDSET_LABEL'),
			'sort_10' => Text::_('COM_MODULES_SOUNDCLOUD_FIELDSET_LABEL'),
			'sort_11' => Text::_('COM_MODULES_TUMBLR_FIELDSET_LABEL'),
			'sort_12' => Text::_('COM_MODULES_GITHUB_FIELDSET_LABEL'),
			'sort_13' => Text::_('COM_MODULES_FLICKR_FIELDSET_LABEL'),
			'sort_14' => Text::_('COM_MODULES_RSS_FIELDSET_LABEL'),
			'sort_15' => Text::_('COM_MODULES_VIMEO_FIELDSET_LABEL'),
			'sort_16' => Text::_('COM_MODULES_CUSTOM1_FIELDSET_LABEL'),
			'sort_17' => Text::_('COM_MODULES_CUSTOM2_FIELDSET_LABEL'),
			'sort_18' => Text::_('COM_MODULES_CUSTOM3_FIELDSET_LABEL'),
			'sort_19' => Text::_('COM_MODULES_CUSTOM4_FIELDSET_LABEL'),
			'sort_20' => Text::_('COM_MODULES_CUSTOM5_FIELDSET_LABEL')
		];
		$doc = Factory::getDocument();

		// Inject jQuery onto the page
		HTMLHelper::_('jquery.framework');

		// Next insert the jQuery plugin
		HTMLHelper::_('script', 'mod_social_slider/jquery-sortable.js', ['version' => 'auto', 'relative' => true]);

		// Now initialize the plugin
		$doc->addScriptDeclaration('
			jQuery(document).ready(function($) {
				var group = $("#sortable").sortable({
					pullPlaceholder: false,
					onDrop: function (item, container, _super) {
						$("#' . $this->id . '").val(group.sortable("serialize").get().join("\n"))
						_super(item, container)
					},
					serialize: function (parent, children, isContainer) {
						return isContainer ? children.join() : parent.attr("id")
					},
				})
			});
		');

		// Add in relevant styles
		$icon = Uri::root() . 'media/mod_social_slider/icons/';
		$doc->addStyleDeclaration('
			body.dragging, body.dragging * {
			  cursor: move !important;
			}

			.dragged {
			  position: absolute;
			  opacity: 0.5;
			  z-index: 2000;
			}
			
			ul#sortable {
				float: left;
				list-style: none;
			}
			ul#sortable li {
				background: #ECECEC;
				border-color: #D8D8D8 #D8D8D8 #CCCCCC;
				border-style: solid;
				border-width: 1px;
				margin: 1px 0px;
				box-shadow: 0 2px 2px rgba(0, 0, 0, 0.027), 0 1px 0 rgba(255, 255, 255, 0.69) inset, 0 -1px 0 rgba(0, 0, 0, 0.02) inset, 0 15px 14px rgba(255, 255, 255, 0.57) inset;
				color: #666666;
				padding: 6px 50px 7px 5px;
				text-shadow: 0 1px 0 rgba(255, 255, 255, 0.59);
				cursor: move !important;
				text-align: center;
			}
			ul#sortable .sort span {
				position: relative;
				bottom: 2px;
				height: 20px;
				width: 20px;
				display: block;
				float: left;
				background-repeat: no-repeat !important;
				background-size: 20px 20px !important;
				padding-right: 25px;
				margin: 1px 0px;
			}			
			ul#sortable .sort::before {
				background: url("' . $icon . 'sprite-black.png") no-repeat;
				content: "";
				display: inline-block;
				float: left;
				height: 32px;
				width: 32px;
				margin-right: 20px;
				position: relative;
				bottom: 6px;
			}		
			ul#sortable #sort_1.sort::before { background-position: 0 0; }
			ul#sortable #sort_2.sort::before { background-position: 0 -96px; }
			ul#sortable #sort_3.sort::before { background-position: 0 -32px; }
			ul#sortable #sort_4.sort::before { background-position: 0 -64px; }
			ul#sortable #sort_5.sort::before { background-position: -64px -96px; }
			ul#sortable #sort_6.sort::before { background-position: -64px -32px; }
			ul#sortable #sort_7.sort::before { background-position: -96px -32px; }
			ul#sortable #sort_8.sort::before { background-position: -32px -32px; }
			ul#sortable #sort_9.sort::before { background-position: -32px -64px; }
			ul#sortable #sort_10.sort::before { background-position: -96px 0; }
			ul#sortable #sort_11.sort::before { background-position: -96px -64px; }
			ul#sortable #sort_12.sort::before { background-position: -64px 0; }
			ul#sortable #sort_13.sort::before { background-position: -32px 0; }
			ul#sortable #sort_14.sort::before { background-position: -64px -64px; }
			ul#sortable #sort_15.sort::before { background-position: -32px -96px; }
			ul#sortable #sort_16.sort::before,
			ul#sortable #sort_17.sort::before,
			ul#sortable #sort_18.sort::before,
			ul#sortable #sort_19.sort::before,
			ul#sortable #sort_20.sort::before {
				background-position: -96px -96px; 
			}
		');

		// If there is no value we'll set the default layout
		if (!$this->value)
		{
			$this->value = 'sort_1,sort_2,sort_3,sort_4,sort_5,sort_6,sort_7,sort_8,sort_9,sort_10,sort_11,sort_12,sort_13,sort_14,sort_15,sort_16,sort_17,sort_18,sort_19,sort_20';
		}

		// Explode the options
		$items = explode(',', $this->value);

		$input = '<ul id="sortable">';

		foreach ($items as $item)
		{
			$input .= '<li class="sort" id="' . $item . '">' . $options[$item] . '</li>';
		}

		$input .= '</ul>
		<input type="hidden" name="' . $this->name . '" value="' . $this->value . '" id="' . $this->id . '" />';
		return $input;
	}
}