Your IP : 216.73.216.224


Current Path : /var/www/html/administrator/components/com_jssupportticket/models/
Upload File :
Current File : /var/www/html/administrator/components/com_jssupportticket/models/userfields.php

<?php

/**
 * @Copyright Copyright (C) 2015 ... Ahmad Bilal
 * @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
 * Company:		Buruj Solutions
 + Contact:		www.burujsolutions.com , info@burujsolutions.com
 * Created on:	May 22, 2015
  ^
  + Project: 	JS Tickets
  ^
 */
defined('_JEXEC') or die('Not Allowed');
jimport('joomla.application.component.model');
jimport('joomla.html.html');

class JSSupportticketModelUserFields extends JSSupportTicketModel {

    function __construct() {
        parent::__construct();
    }

   
    function isFieldRequiredByField($field){
        $db = JFactory::getDbo();
        $query = "SELECT field.required FROM `#__js_ticket_fieldsordering` AS field WHERE field.field = ".$db->quote($field);
        $db->setQuery($query);
        $result = $db->loadResult();
        return $result;
    }

    function fieldPublished($field_id, $value) {
        if (is_numeric($field_id) == false)
            return false;
        $db = JFactory::getDBO();

        $query = " UPDATE `#__js_ticket_fieldsordering` SET published = " . $value . " WHERE id = " . $field_id. " AND cannotunpublish = 0";

        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }
        return true;
    }

    function visitorFieldPublished($field_id, $value) {
        if (is_numeric($field_id) == false)
            return false;
        $db = JFactory::getDBO();

        $query = " UPDATE `#__js_ticket_fieldsordering` SET isvisitorpublished = " . $value . " WHERE id = " . $field_id. " AND cannotunpublish = 0";

        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }
        return true;
    }

    function fieldRequired($field_id, $value) {
        if (is_numeric($field_id) == false)
            return false;
        $db = JFactory::getDBO();

        $query = " UPDATE `#__js_ticket_fieldsordering` SET required = " . $value . " WHERE id = " . $field_id. " AND cannotunpublish = 0";
        
        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }
        return true;
    }

    function fieldOrderingUp($field_id) {
        if (is_numeric($field_id) == false)
            return false;
        $db = JFactory::getDBO();

        $query = "UPDATE `#__js_ticket_fieldsordering` AS f1, `#__js_ticket_fieldsordering` AS f2
                    SET f1.ordering = f1.ordering - 1 WHERE f1.ordering = f2.ordering + 1 AND f1.fieldfor = f2.fieldfor
                    AND f2.id = " . $field_id . " ; ";
        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }

        $query = " UPDATE `#__js_ticket_fieldsordering` SET ordering = ordering + 1 WHERE id = " . $field_id . ";"
        ;
        
        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }
        return true;
    }

    function fieldOrderingDown($field_id) {
        if (is_numeric($field_id) == false)
            return false;
        $db = JFactory::getDBO();

        $query = "UPDATE `#__js_ticket_fieldsordering` AS f1, `#__js_ticket_fieldsordering` AS f2 SET f1.ordering = f1.ordering + 1
                    WHERE f1.ordering = f2.ordering - 1 AND f1.fieldfor = f2.fieldfor AND f2.id = " . $field_id . " ; ";

        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }

        $query = " UPDATE `#__js_ticket_fieldsordering` SET ordering = ordering - 1 WHERE id = " . $field_id . ";";
        
        $db->setQuery($query);
        if (!$db->execute()) {
            return false;
        }
        return true;
    }

    

    // New_New
    function getFieldOrderingForList($fieldfor) {
        $db = JFactory::getDbo();
        if (is_numeric($fieldfor) == false)
            return false;
        $query = "SELECT * FROM `#__js_ticket_fieldsordering` WHERE fieldfor = ".$fieldfor." ORDER BY ordering ";
        $db->setQuery($query);
        $result[0] = $db->loadObjectList();
        return $result;
    }

    function getFieldsForListing($fieldfor) {
        if (is_numeric($fieldfor) == false)
            return false;
        $db = JFactory::getDbo();
        $query = "SELECT field,showonlisting FROM `#__js_ticket_fieldsordering`
                WHERE  fieldfor =  " . $fieldfor ." ORDER BY ordering";
        $db->setQuery($query);
        $fields = $db->loadObjectList();
        $fielddata = array();
        foreach ($fields AS $field) {
            $fielddata[$field->field] = $field->showonlisting;
        }
        return $fielddata;
    }

    function getFieldsOrderingforForm($fieldfor) {
        if (is_numeric($fieldfor) == false)
            return false;
        $db = $this->getDBO();

        $user = JSSupportticketCurrentUser::getInstance();
        if($user->getIsGuest()){
            $published = ' isvisitorpublished = 1 ';
        }else{
            $published = ' published = 1 ';
        }

        $query = "SELECT  * FROM `#__js_ticket_fieldsordering`
                    WHERE ".$published." AND fieldfor =  " . $fieldfor 
                . " ORDER BY ordering";
        
        $db->setQuery($query);
        $fieldordering = $db->loadObjectList();
        return $fieldordering;
    }

    function storeUserField() {
        $db = JFactory::getDBO();
        $data = JFactory::getApplication()->input->post->getArray();
        if (empty($data)) {
            return false;
        }
        if ($data['isuserfield'] == 1) {
            // value to add as field ordering
            if ($data['id'] == '') { // only for new
                $query = "SELECT max(ordering) FROM #__js_ticket_fieldsordering WHERE fieldfor=".$_SESSION['ffusr'];
                $db->setQuery($query);
                $var = $db->loadResult();
                $data['ordering'] = $var + 1;
                if(isset($data['userfieldtype']) && $data['userfieldtype'] == 'file' || $data['userfieldtype'] == 'termsandconditions'){
                    $data['cannotsearch'] = 1;
                    $data['cannotshowonlisting'] = 1;
                }else{
                    $data['cannotsearch'] = 0;
                }
                // Unique field
                $query = "SELECT max(id) FROM #__js_ticket_fieldsordering ";
                $db->setQuery($query);
                $var = $db->loadResult();
                $data['field'] = 'ufield_'. ($var + 1);
                $data['fieldfor'] = $_SESSION['ffusr'];

            }

            $params = array();
            //code for depandetn field
            if (isset($data['userfieldtype']) && $data['userfieldtype'] == 'depandant_field') {
                if (!empty($data['arraynames2']) && empty($data['arraynames'])) {
                    //to handle edit case of depandat field
                    $data['arraynames'] = $data['arraynames2'];
                }
                $flagvar = $this->updateParentField($data['parentfield'], $data['field']);
                if ($flagvar == false) {
                    return SAVE_ERROR;
                }
                if (!empty($data['arraynames'])) {
                    $valarrays = explode(',', $data['arraynames']);
                    foreach ($valarrays as $key => $value) {
                        $keyvalue = $value;
                        $value = str_replace(' ','_',$value);
                        if ($data[$value] != null) {
                            $params[$keyvalue] = array_filter($data[$value]);
                        }
                    }
                }
            }
            if (!empty($data['values'])) {
                foreach ($data['values'] as $key => $value) {
                    if ($value != null) {
                        $params[] = trim($value);
                    }
                }
            }

            if (isset($data['userfieldtype']) && $data['userfieldtype'] == 'termsandconditions') { // to manage terms and condition field
                $params['termsandconditions_text'] = $data['termsandconditions_text'];
                $params['termsandconditions_linktype'] = $data['termsandconditions_linktype'];
                $params['termsandconditions_link'] = $data['termsandconditions_link'];
                $params['termsandconditions_page'] = $data['termsandconditions_page'];
            }

            if(!empty($params)){
                $params = json_encode($params);
                $data['userfieldparams'] = $params;
            }
        }

		if($data["isuserfield"] == "") $data["isuserfield"] = 0;
        $row = $this->getTable('fieldordering');
        if (!$row->bind($data)) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->check()) {
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        if (!$row->store()) {
            $this->getJSModel('systemerrors')->updateSystemErrors($row->getError());
            $this->setError($row->getError());
            return SAVE_ERROR;
        }
        return SAVED;
    }

    function updateField($data) {
        if (empty($data)) {
            return false;
        }

        $db = JFactory::getDBO();

        $inquery = '';
        $clasue = '';
        if(isset($data['fieldtitle']) && $data['fieldtitle'] != null){
            $inquery .= $clasue." fieldtitle = '". $data['fieldtitle']."'";
            $clasue = ' , ';
        }
        if(isset($data['published']) && $data['published'] != null){
            $inquery .= $clasue." published = ". $data['published'];
            $clasue = ' , ';
        }
        if(isset($data['isvisitorpublished']) && $data['isvisitorpublished'] != null){
            $inquery .= $clasue." isvisitorpublished = ". $data['isvisitorpublished'];
            $clasue = ' , ';
        }
        if(isset($data['required']) && $data['required'] != null){
            $inquery .= $clasue." required = ". $data['required'];
            $clasue = ' , ';
        }
        if(isset($data['search_user']) && $data['search_user'] != null){
            $inquery .= $clasue." search_user = ". $data['search_user'];
            $clasue = ' , ';
        }
        if(isset($data['search_visitor']) && $data['search_visitor'] != null){
            $inquery .= $clasue." search_visitor = ". $data['search_visitor'];
            $clasue = ' , ';
        }
        if(isset($data['showonlisting']) && $data['showonlisting'] != null){
            $inquery .= $clasue." showonlisting = ". $data['showonlisting'];
            $clasue = ' , ';
        }
        
        $query = "UPDATE `#__js_ticket_fieldsordering` SET ".$inquery." WHERE id = " . $data['id'] ;
        $db->setQuery($query);
        $db->execute();        
        return true;
    }

    function updateParentField($parentfield, $field) {
        $db = $this->getDBO();
        if(!is_numeric($parentfield)) return false;
        $query = "UPDATE `#__js_ticket_fieldsordering` SET depandant_field = '' WHERE depandant_field = '" . $field . "'";
        $db->setQuery($query);
        $db->execute();
        $query = "UPDATE `#__js_ticket_fieldsordering` SET depandant_field = '" . $field . "' WHERE id = " . $parentfield;
        $db->setQuery($query);
        $db->execute();
        return true;
    }

    function getOptionsForFieldEdit($field) {
        $db = $this->getDBO();

        $yesno = array(
            '0' => array('value' => '1', 'text' => JText::_('Yes')),
            '1' => array('value' => '0', 'text' => JText::_('No')),);

        $query = "SELECT * FROM `#__js_ticket_fieldsordering` WHERE id = $field";
        $db->setQuery($query);
        $data = $db->loadObject();
        $html = '<span class="popup-top">
                    <span id="popup_title" >
                    ' . JText::_("Edit Field") . '
                    </span>
                    <span id="popup_cross" onClick="close_popup();" class="close"></span>
                </span>';
        $html .= '<form id="adminForm" class="popup-field-from" method="post" action="index.php?option=com_jssupportticket&c=userfields&task=storeUserFields&'.JSession::getFormToken().'=1">';
        $title_value = JText::_('Text');
        if(isset($data->fieldtitle)){
            $title_value = $data->fieldtitle;
        }
        $html .= '<div class="popup-field-wrapper">
                    <div class="popup-field-title">' . JText::_('Field Title') . '<font class="required-notifier">*</font></div>
                    <div class="popup-field-obj">
                        <input type="text" id="fieldtitle" name="fieldtitle" value="'.$title_value.'" class="inputbox one" data-validation="required" />
                    </div>
                </div>';
        if ($data->cannotunpublish == 0 && $data->userfieldtype != 'termsandconditions') {
            $html .= '<div class="popup-field-wrapper">
                        <div class="popup-field-title">' . JText::_('User Published') . '</div>
                        <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'published','class="inputbox one"', 'value' , 'text' , isset($data->published) ? $data->published : 0) . '</div>
                    </div>';
            $html .= '<div class="popup-field-wrapper">
                        <div class="popup-field-title">' . JText::_('Visitor published') . '</div>
                        <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'isvisitorpublished','class="inputbox one"', 'value' , 'text' , isset($data->isvisitorpublished) ? $data->isvisitorpublished : 0) . '</div>
                    </div>';

            $html .= '<div class="popup-field-wrapper">
                    <div class="popup-field-title">' . JText::_('Required') . '</div>
                    <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'required','class="inputbox one"', 'value' , 'text' , isset($data->required) ? $data->required : 0) . '</div>
                </div>';
        }

        if ($data->cannotsearch == 0 && $data->userfieldtype != 'termsandconditions') {
            $html .= '<div class="popup-field-wrapper">
                        <div class="popup-field-title">' . JText::_('User Search') . '</div>
                        <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'search_user','class="inputbox one"', 'value' , 'text' , isset($data->search_user) ? $data->search_user : 0) . '</div>
                    </div>';
            $html .= '<div class="popup-field-wrapper">
                        <div class="popup-field-title">' . JText::_('Visitor Search') . '</div>
                        <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'search_visitor','class="inputbox one"', 'value' , 'text' , isset($data->search_visitor) ? $data->search_visitor : 0) . '</div>
                    </div>';
        }
        if (($data->isuserfield == 1 || $data->cannotshowonlisting == 0) && $data->userfieldtype != 'termsandconditions') {
            $html .= '<div class="popup-field-wrapper">
                        <div class="popup-field-title">' . JText::_('Show On Listing') . '</div>
                        <div class="popup-field-obj">' . JHTML::_('select.genericList', $yesno , 'showonlisting','class="inputbox one"', 'value' , 'text' , isset($data->showonlisting) ? $data->showonlisting : 0) . '</div>
                    </div>';
        }
        

        $html .= '
            <input type="hidden" id="id" name="id" value="'.$data->id.'" />
            <input type="hidden" id="isuserfield" name="isuserfield" value="'.$data->isuserfield.'" />
            <input type="hidden" id="fieldfor" name="fieldfor" value="'.$data->fieldfor.'" />';
        $html .=     JHtml::_('form.token');    
        $html .='<div class="js-submit-container">
                <input type="submit" id="save" name="save" value="'.JText::_('Save').'" class="button" />';
        if ($data->isuserfield == 1) {
            $html .= '<a class="button" style="margin-left:15px;" id="user-field-anchor" href="index.php?option=com_jssupportticket&c=userfields&view=userfields&layout=formuserfield&cid[]=' . $data->id .'&ff='.$data->fieldfor.'"> ' . JText::_('Advanced') . ' </a>';
        }

        $html .='</div>
            </form>';
        return $html;
    }

    function deleteUserField($id){
        if (is_numeric($id) == false)
           return false;
        $db = $this->getDBO();

        $query = "SELECT field,fieldfor FROM `#__js_ticket_fieldsordering` WHERE id = $id";
        $db->setQuery($query);
        $result = $db->loadObject();
        if ($this->userFieldCanDelete($result) == true) {
            $query = "DELETE FROM `#__js_ticket_fieldsordering` WHERE id = $id";
            $db->setQuery($query);
            $db->execute();
            return DELETED;
        }else{
            return IN_USE;
        }
    }

    function enforceDeleteUserField($id){
        if (is_numeric($id) == false)
           return false;
        $db = $this->getDBO();
        $query = "SELECT field,fieldfor FROM `#__js_ticket_fieldsordering` WHERE id = $id";
        $db->setQuery($query);
        $result = $db->loadObject();
        if (true) {
            $query = "DELETE FROM `js_ticket_fieldsordering` WHERE id = $id";
            $db->setQuery($query);
            $db->execute();
            return DELETE;
        }else{
            return IN_USE;
        }
    }

    function userFieldCanDelete($field) {

        $fieldname = $field->field;
        $fieldfor = $field->fieldfor; 

        $db = $this->getDBO();
        
        if($fieldfor == 1){//for deleting a ticket field
            $table = "tickets";
        }else if($fieldfor == 2){
            $table = "feedbacks";            
        }
        $query = ' SELECT
                    ( SELECT COUNT(id) FROM `#__js_ticket_'.$table.'` WHERE 
                        params LIKE \'%"' . $fieldname . '":%\' 
                    )
                    AS total';
        $db->setQuery($query);
        $total = $db->loadResult();
        if ($total > 0)
            return false;
        else
            return true;
    }

    function getFieldTitleByFieldfor($fieldfor) {
        if (!is_numeric($fieldfor))
            return false;
        $db = $this->getDBO();
        $query = "SELECT field,fieldtitle FROM `#__js_ticket_fieldsordering` WHERE fieldfor = " . $fieldfor ;
        $db->setQuery($query);
        $fields = $db->loadObjectList();
        $fielddata = array();
        foreach ($fields as $value) {
            $fielddata[$value->field] = $value->fieldtitle;
        }
        return $fielddata;
    }

    function getUserFieldbyId($id,$fieldfor) {
        if ($id) {
            if (is_numeric($id) == false)
                return false;
            $db = $this->getDBO();
            $query = "SELECT * FROM `#__js_ticket_fieldsordering` WHERE id = " . $id;
            $db->setQuery($query);
            $result['userfield'] = $db->loadObject();
            $params = $result['userfield']->userfieldparams;

            $result['userfieldparams'] = !empty($params) ? json_decode($params, true) : '';
        }
        $result['fieldfor'] = $fieldfor;
        $result['joomlaarticles'] = $this->getJSModel('jssupportticket')->joomlaContentArticles();
        return $result;
    }

    function dataForDepandantField( $val , $childfield){ 
        $db = $this->getDBO();
        $query = "SELECT userfieldparams,fieldtitle,field,depandant_field FROM `#__js_ticket_fieldsordering` WHERE field = '".$childfield."'"; 
        $db->setQuery($query);
        $data = $db->loadObject();
        $decoded_data = json_decode($data->userfieldparams); 
        $comboOptions = array(); 
        $flag = 0; 
        foreach ($decoded_data as $key => $value) { 
            if($key == $val){ 
               for ($i=0; $i < count($value) ; $i++) {  
                if($flag == 0){
                    $comboOptions[] = array('value' => null, 'text' => JText::_('Select').' '.$data->fieldtitle); 
                }
                $comboOptions[] = array('value' => $value[$i], 'text' => $value[$i]); 
                $flag = 1; 
               } 
            } 
        }
        $jsFunction = ''; 
        if ($data->depandant_field != null) {
            $jsFunction = "onchange=getDataForDepandantField('" . $data->field . "','" . $data->depandant_field . "',1,'". JSession::getFormToken() ."');";
        }
        $html = JHTML::_('select.genericList', $comboOptions , $childfield,'class="inputbox js-form-select-field one"'.$jsFunction, 'value' , 'text' ,'');
        return $html; 
    }

    function getFieldsForComboByFieldFor( $fieldfor, $parentfield ) {
        $db = JFactory::getDbo();
        $query = "SELECT fieldtitle AS text , id AS value FROM `#__js_ticket_fieldsordering` WHERE fieldfor = $fieldfor AND (userfieldtype = 'radio' OR userfieldtype = 'combo' OR userfieldtype = 'depandant_field') ";
        $db->setQuery($query);
        $data = $db->loadObjectList();
        $result = array(array('text' => JText::_('Select parent field'), 'value' => null));
        foreach($data AS $da){
            $result[] = $da;
        }
        $query = "SELECT id FROM `#__js_ticket_fieldsordering` WHERE fieldfor = $fieldfor AND (userfieldtype = 'radio' OR userfieldtype = 'combo' OR userfieldtype = 'depandant_field') AND depandant_field = '" . $parentfield . "' ";
        $db->setQuery($query);
        $parent = $db->loadResult();
        $jsFunction = 'onchange="getDataOfSelectedField();"';
        $html = JHTML::_('select.genericList', $result, 'parentfield', 'class="inputbox inputbox one" ' .$jsFunction, 'value', 'text', $parent);

        return $html;
    }

    function getSectionToFillValues( $field ) {
            if( ! is_numeric($field))
                return false;
        $db = JFactory::getDbo();
        $query = "SELECT userfieldparams FROM `#__js_ticket_fieldsordering` WHERE id = $field";
        $db->setQuery($query);
        $data = $db->loadResult();
        $datas = json_decode($data);
        $html = '';
        $fieldsvar = '';
        $comma = '';
        foreach ($datas as $data) {
            if(is_array($data)){
                for ($i = 0; $i < count($data); $i++) {
                    $fieldsvar .= $comma . "$data[$i]";
                    $textvar = $data[$i];
                    $textvar .='[]';
                    $html .= "<div class='js-field-wrapper js-row no-margin'>";
                    $html .= "<div class='js-field-title js-col-lg-3 js-col-md-3 no-padding'>" . $data[$i] . "</div>";
                    $html .= "<div class='js-col-lg-9 js-col-md-9 no-padding combo-options-fields' id=" . $data[$i] . ">
                                    <span class='input-field-wrapper'>
                                        <input type='text' id='".$textvar."' name='".$textvar."' class='inputbox one user-field' />
                                        <img class='input-field-remove-img' src='components/com_jssupportticket/include/images/deletes.png' />
                                    </span>
                                    <input type='button' id='depandant-field-button' onClick='getNextField(\"" . $data[$i] . "\",this);'  value='Add More' />
                                </div>";
                    $html .= "</div>";
                    $comma = ',';
                }
            }else{
                $fieldsvar .= $comma . "$data";
                $textvar = $data;
                $textvar .='[]';
                $html .= "<div class='js-field-wrapper js-row no-margin'>";
                $html .= "<div class='js-field-title js-col-lg-3 js-col-md-3 no-padding'>" . $data . "</div>";
                $html .= "<div class='js-col-lg-9 js-col-md-9 no-padding combo-options-fields' id=" . $data . ">
                                <span class='input-field-wrapper'>
                                    <input type='text' id='".$textvar."' name='".$textvar."' class='inputbox one user-field' />
                                    <img class='input-field-remove-img' src='components/com_jssupportticket/include/images/deletes.png' />
                                </span>
                                <input type='button' id='depandant-field-button' onClick='getNextField(\"" . $data . "\",this);'  value='Add More' />
                            </div>";
                $html .= "</div>";
                $comma = ',';
            }
        }

        $html .= " <input type='hidden' name='arraynames' value='" . $fieldsvar . "' />";
        return $html;
    }

    function getUserUnpublishFieldsfor($fieldfor) {
        if (!is_numeric($fieldfor))
            return false;
        $db = JFactory::getDbo();
        
        $user = JSSupportticketCurrentUser::getInstance();
        if ($user->getIsGuest()) {
            $published = ' isvisitorpublished = 0 ';
        } else {
            $published = ' published = 0 ';
        }

        $query = "SELECT field FROM `#__js_ticket_fieldsordering` WHERE fieldfor = " . $fieldfor . " AND isuserfield = 1 AND " . $published;
        $db->setQuery($query);
        $fields = $db->loadObjectList();
        return $fields;
    }


    function getUserfieldsfor($fieldfor) {        
        if (!is_numeric($fieldfor))
            return false;
        $db = JFactory::getDbo();
        $user = JSSupportticketCurrentUser::getInstance();
        if ($user->getIsGuest()) {
            $published = ' isvisitorpublished = 1 ';
        } else {
            $published = ' published = 1 ';
        }
        $query = "SELECT field,userfieldparams,userfieldtype,fieldtitle FROM `#__js_ticket_fieldsordering` WHERE fieldfor = " . $fieldfor . " AND isuserfield = 1 AND " . $published;
        $db->setQuery($query);
        $fields = $db->loadObjectList();
        return $fields;
    }    
}
?>