Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/public_html/media/system/js/ |
/**
* @copyright (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
/**
* Edit Associations javascript behavior
*
* Used for editing associations in the backend.
*
* @package Joomla
* @since 3.7.0
*/
window.hideAssociation = function(formControl, languageCode)
{
jQuery('#associations .control-group').each(function()
{
// Current selected language. Hide it.
if (jQuery(this).find('.control-label label').attr('for').replace(new RegExp('_id$'), '') == formControl + '_associations_' + languageCode.replace('-', '_'))
{
jQuery(this).hide();
}
});
}
window.showAssociationMessage = function()
{
jQuery('#associations .control-group').hide();
jQuery('#associations').prepend('<div id="associations-notice" class="alert alert-info">' + Joomla.JText._('JGLOBAL_ASSOC_NOT_POSSIBLE') + '</div>');
}
/**
* Inject associations into other association fields
*
* This function is called whenever the Ajax request within propagateAssociation() completes successfully.
* Its purpose is to inject the associations which have been returned in the Ajax response into the other
* association fields in the form.
* It does this by invoking the various callback functions of those association fields (i.e. the function which
* gets called whenever the administrator selects an association via the modal), and passing the appropriate
* associated record details.
*
* @param js object result The response from the Ajax request.
* Its structure is that generated by the JResponseJson class,
* with the data field containing the associations
* @param string fieldPrefix The stem of the html ids for the elements comprising the modal field
* @param string callbackFunctionPrefix The name of the callback function which the modal window uses to set the
* selected item as the association, but minus the language tag at the end
*
* @return boolean
*
* @since 3.9.0
*/
Joomla.injectAssociations = function(result, callbackFunctionPrefix)
{
var functionName;
if (result.success)
{
if (result.data.length !== 0)
{
for (var lang in result.data)
{
functionName = callbackFunctionPrefix + lang.replace("-","_");
window[functionName](result.data[lang].id, result.data[lang].title, result.data[lang].catid, null, null, lang);
}
}
if (result.message)
{
Joomla.renderMessages({"notice":[result.message]});
}
}
else
{
Joomla.renderMessages({"warning":[(Joomla.JText._('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'))]});
}
}
/**
* Propagate associations from this field into other association fields
*
* This function is called whenever an administrator populates an association (in the association modal field)
* and then clicks on the Propagate button.
* The purpose of this function is to find what other records (if any) are associated with the one which the
* administrator has selected, and populate the other association fields with these records. (Otherwise, if the
* administrator just clicks on Save without clicking on Propagate, those other associations will be deleted).
* It does this by finding the id of the selected associated record (from a hidden field) and makes an Ajax call
* to the server to find the other associations, also passing up the language of the record currently being edited,
* as it should be excluded.
* Once it has received from the server the other associations it calls injectAssociations to inject them into
* the other association fields within the form.
*
* @param string fieldPrefix The stem of the html ids for the elements comprising the modal field
* @param string callbackFunctionPrefix The name of the callback function which the modal window uses to set the
* selected item as the association, but minus the language tag at the end
*
* @return boolean
*
* @since 3.9.0
*/
Joomla.propagateAssociation = function(fieldPrefix, callbackFunctionPrefix)
{
// Find the id of the record which has been set as an assocation
var assocId = jQuery("#" + fieldPrefix + "_id").val();
// Find the language of the record being edited
var currentLang = jQuery('#jform_language').find(":selected").val();
// Find the token so that it can be sent in the Ajax request as well
var token = Joomla.getOptions('csrf.token', '');
// Find the action url associated with the form - we need to add the token to this
var url = jQuery("form[name='adminForm']").attr("action");
url += '&' + token + '=1';
jQuery.ajax(
{
url: url,
data: { task: "ajax.fetchAssociations", format: "json", assocId: assocId, excludeLang: currentLang },
success: function(result, status, xhr) { Joomla.injectAssociations(result, callbackFunctionPrefix); },
error: function() { Joomla.renderMessages({"warning":[(Joomla.JText._('JGLOBAL_ASSOCIATIONS_PROPAGATE_FAILED'))]}); },
});
return false;
}
!(function()
{
jQuery(document).ready(function($)
{
var associationsEditOptions = Joomla.getOptions('system.associations.edit'), formControl = associationsEditOptions.formControl || 'jform';
// Hide the associations tab if needed.
if (associationsEditOptions.hidden == 1)
{
window.showAssociationMessage();
}
// Hide only the associations for the current language.
else
{
window.hideAssociation(formControl, $('#' + formControl + '_language').val());
}
// When changing the language.
$('#' + formControl + '_language').on('change', function(event)
{
// Remove message if any.
Joomla.removeMessages();
$('#associations-notice').remove();
var existsAssociations = false;
// For each language, remove the associations, ie, empty the associations fields and reset the buttons to Select/Create.
$('#associations .control-group').each(function()
{
var languageCode = $(this).find('.control-label label').attr('for').replace('_id', '').replace('jform_associations_', '');
// Show the association fields.
$(this).show();
// Check if there was an association selected for this language.
if (!existsAssociations && $('#' + formControl + '_associations_' + languageCode + '_id').val() !== '')
{
existsAssociations = true;
}
// Call the modal clear button.
$('#' + formControl + '_associations_' + languageCode + '_clear').click();
});
// If associations existed, send a warning to the user.
if (existsAssociations)
{
Joomla.renderMessages({warning: [Joomla.JText._('JGLOBAL_ASSOCIATIONS_RESET_WARNING')]});
}
var selectedLanguage = $(this).val();
// If the selected language is All hide the fields and add a message.
if (selectedLanguage == '*')
{
window.showAssociationMessage();
}
// Else show the associations fields/buttons and hide the current selected language.
else
{
window.hideAssociation(formControl, selectedLanguage);
}
});
});
})(window, document, Joomla);