Current File : /home/pacjaorg/public_html/kmm/plugins/djclassifieds/conditionalfields/conditionalfields.php |
<?php
/**
* @package DJ-Classifieds
* @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
* @license http://www.gnu.org/licenses GNU/GPL
* @author url: http://dj-extensions.com
* @author email: contact@dj-extensions.com
*/
defined ( '_JEXEC' ) or die ( 'Restricted access' );
class plgDJClassifiedsConditionalfields extends JPlugin
{
protected static $trigger_fields = array();
public function __construct(& $subject, $config)
{
parent::__construct ( $subject, $config );
$this->loadLanguage();
}
static function getTriggerFields()
{
if(empty(self::$trigger_fields)){
$db = JFactory::getDBO();
$query = "SELECT DISTINCT cf.trig_field_id "
."FROM #__djcf_fields f "
."INNER JOIN #__djcf_conditionalfields cf ON f.id=cf.field_id "
."INNER JOIN #__djcf_fields ft ON cf.trig_field_id=ft.id "
."WHERE f.published=1 AND ft.published=1 "
."AND f.edition_blocked=0 AND ft.edition_blocked=0";
$db->setQuery($query);
self::$trigger_fields = $db->loadColumn();
}
return self::$trigger_fields;
}
//function onBeforeAdminDJClassifiedsSaveField(&$row)
function onDJClassifiedsModelAdminAfterSave($context, $item)
{
if($context != 'com_djclassifieds.field'){
return;
}
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$field_id = $item->id;
if(!$field_id){
return;
}
$trig_field_id = $app->input->getInt('trig_field_id', '0');
$trig_value = $app->input->getStr('trig_value', '');
if(is_array($app->input->getStr('trig_value'))){
$trig_value = implode(';', $app->input->getStr('trig_value'));
}elseif(empty($app->input->getStr('trig_value'))){ // handling empty checkboxes
$trig_value = '';
}
$query = "DELETE FROM #__djcf_conditionalfields WHERE field_id=".$field_id;
$db->setQuery($query);
$db->execute();
if($trig_field_id){
$query = "INSERT INTO #__djcf_conditionalfields(field_id, trig_field_id, trig_value) VALUES(".$field_id.", ".$trig_field_id.", ".$db->quote($trig_value).")";
$db->setQuery($query);
$db->execute();
}
}
function onAdminFieldEditTabTitle($field)
{
$document= JFactory::getDocument();
$document->addStyleSheetVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/css/style.css');
$output = '<li>';
$output .= '<a href="#conditional" data-toggle="tab">'.JText::_('PLG_DJCLASSIFIEDS_CONDITIONALFIELDS_CONDITIONAL_OPTIONS').'</a>';
$output .= '</li>';
return $output;
}
function onAdminFieldEditTabContent($field)
{
$db = JFactory::getDBO();
$output = '<div class="tab-pane" id="conditional">';
if($field->id){
$query = "SELECT * FROM #__djcf_conditionalfields WHERE field_id=".$field->id;
$db->setQuery($query);
$conditionalfield = $db->LoadObject();
JForm::addFormPath(JPATH_PLUGINS . '/djclassifieds/conditionalfields/forms');
$form = JForm::getInstance('djclassifieds.field', 'field');
$form->bind($conditionalfield);
foreach($form->getFieldset('conditional') as $f){
$output .= $f->renderField();
}
}else{
$output .= JText::_('PLG_DJCLASSIFIEDS_CONDITIONALFIELDS_SAVE_FIELD_FIRST');
}
$output .= '</div>';
/*
$js = "<script>
jQuery(function($){
toggleConditional();
$('#source').change(function(){
toggleConditional();
})
function toggleConditional(){
if(['0', '1', '3'].includes($('#source').val())){
$('a[href=\"#conditional\"]').closest('li').show();
}else{
$('a[href=\"#conditional\"]').closest('li').hide();
}
}
})
</script>";
$output .= $js;
*/
return $output;
}
function onAdminPrepareItemEdit(&$item, &$images, &$payment, &$custom_contact, &$bids, &$buynow)
{
$document = JFactory::getDocument();
$ajaxData = array();
if($item->id) $ajaxData['id'] = $item->id;
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root().'administrator/'."', null, '#ex_fields', 'item.getFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root().'administrator/'."', null, '#contact_ex_fields', 'item.getContactFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
}
function onDJClassifiedsAdminPrepareProfileEdit(&$profile)
{
$document = JFactory::getDocument();
$ajaxData = array(
'user_id' => $profile->user_id,
'group_id' => $profile->group_id
);
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root().'administrator/'."', null, '#profile_ex_fields', 'profile.getProfileFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
}
function onItemEditForm(&$item, &$par, $subscr_id, &$promotions, &$cats, &$types)
{
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$ajaxData = array();
if($item->id) $ajaxData['id'] = $item->id;
if($item->token) $ajaxData['token'] = $item->token;
if($app->input->getInt('copy')) $ajaxData['id_copy'] = $app->input->getInt('copy');
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'additem', '#ex_fields', 'getFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'additem', '#contact_ex_fields', 'getContactFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
}
function onDJClassifiedsPrepareProfile(&$profile, &$par, $context)
{
$document = JFactory::getDocument();
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'item', '#ask_ex_fields', 'getAskFields', null, {}); });");
}
function onPrepareDJClassifiedsSearchModule($params, $module)
{
$app = JFactory::getApplication();
$document = JFactory::getDocument();
$ajaxData = array(
'se' => $app->input->getInt('se', 0)
);
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'item', '#search".$module->id."_ex_fields', 'getSearchFields', '".$module->id."', ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
}
function onUserRegistrationForm()
{
$document = JFactory::getDocument();
$document = JFactory::getDocument();
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'registration', '#profile_ex_fields', 'getProfileFields', null, {}); });");
}
function onProfileEditFormSections($profile, &$custom_fields, &$custom_values_c, &$profile_image, &$par)
{
$document = JFactory::getDocument();
$ajaxData = array(
'user_id' => $profile->user_id,
'group_id' => $profile->group_id
);
$document->addScriptVersion(JURI::root(true).'/plugins/djclassifieds/conditionalfields/assets/js/conditionalfields.js');
$document->addScriptDeclaration("jQuery(function(){ DJConditionalFieldsInit('".JURI::root()."', 'profileedit', '#profile_ex_fields', 'getProfileFields', null, ".($ajaxData ? json_encode($ajaxData) : '{}')."); });");
}
function onDJClassifiedsAdminGetFormFieldsQuery(&$query, $context = 'item')
{
$this->onDJClassifiedsGetFormFieldsQuery($query, $context);
}
function onDJClassifiedsGetFormFieldsQuery(&$query, $context = 'additem')
{
$app = JFactory::getApplication();
$trig_field_id = $app->input->getInt('trigger_field_id', 0);
$trig_field_val = $app->input->getStr('trigger_field_value', '');
$query->join('LEFT', '#__djcf_conditionalfields cf ON f.id = cf.field_id');
if($trig_field_id){
$vals = array_filter(explode(';', $trig_field_val));
$query->where('cf.trig_field_id = '.$trig_field_id);
if($vals){
$conditional_where = "(";
foreach($vals as $key => $val){
$conditional_where .= $key ? " OR " : "";
$conditional_where .= "CONCAT(';',cf.trig_value,';') LIKE '%;".addslashes($val).";%'";
}
$conditional_where .= ")";
$query->where($conditional_where);
}else{
$query->where("cf.trig_value = ''");
}
}else{
$query->where('cf.trig_field_id IS NULL');
}
}
function onDJClassifiedsRenderFormFieldClass($f)
{
if(in_array($f->id, self::getTriggerFields())){
return 'trigger_field';
}
return '';
}
function onDJClassifiedsAdminRenderFormFieldClass($f)
{
return $this->onDJClassifiedsRenderFormFieldClass($f);
}
public function onAjaxGetTrigValues(){
header("Content-type: text/html; charset=utf-8");
$app = JFactory::getApplication();
$db = JFactory::getDBO();
$trig_field_id = $app->input->get('trig_field_id', '');
$field_id = $app->input->get('field_id', '');
if($trig_field_id){
$query = "SELECT f.*, cf.trig_field_id, cf.trig_value "
."FROM #__djcf_fields f LEFT JOIN #__djcf_conditionalfields cf ON f.id=cf.field_id "
."WHERE f.id=".$trig_field_id;
$db->setQuery($query);
$f = $db->loadObject();
if($field_id){
$query = "SELECT f.*, cf.trig_field_id, cf.trig_value "
."FROM #__djcf_fields f LEFT JOIN #__djcf_conditionalfields cf ON f.id=cf.field_id "
."WHERE f.id=".$field_id;
$db->setQuery($query);
$current_f = $db->loadObject();
}
$current_val = !empty($current_f->trig_value) && $current_f->trig_field_id == $f->id ? $current_f->trig_value : '';
if(in_array($f->type, array('checkbox', 'radio', 'selectlist'))){
$val = array_filter(explode(';', $f->values));
echo '<fieldset>';
foreach($val as $i => $v){
echo '<label><input'.($current_val && strstr(';'.$current_val.';', ';'.$val[$i].';') ? ' checked' : '').' type="checkbox" name="trig_value[]" value="'.$val[$i].'">'.$val[$i].'</label>';
}
echo '</fieldset>';
}
// elseif(in_array($f->type, array('date', 'date_from_to'))){
// echo JHTML::calendar($current_val, 'trig_value', 'trig_value', null, array('class' => 'djcalendar'));
// }
else{
echo '<input type="text" name="trig_value" value="'.$current_val.'">';
}
}
die();
}
function onDJClassifiedsAdminFieldsDisplayAfterName($field)
{
$db = JFactory::getDBO();
$query = "SELECT f.* "
."FROM #__djcf_fields f "
."INNER JOIN #__djcf_conditionalfields cf ON f.id=cf.trig_field_id "
."WHERE cf.field_id=".$field->id;
$db->setQuery($query);
$trig_field = $db->loadObject();
if($trig_field){
return ' <a href="index.php?option=com_djclassifieds&task=field.edit&id='.$trig_field->id.'" target="_blank"><span style="color:#CECECE" class="icon-stack" title="'.JText::_('PLG_DJCLASSIFIEDS_CONDITIONALFIELDS_CONFIG_FIELD_TRIG_FIELD_ID').': '.$trig_field->name.'"></span></a>';
}
}
}