AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.112
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/aix/administrator/components/com_community/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/aix/administrator/components/com_community/controllers/profiles.php
<?php
/**
* @copyright (C) 2013 iJoomla, Inc. - All rights reserved.
* @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @author iJoomla.com <webmaster@ijoomla.com>
* @url https://www.jomsocial.com/license-agreement
* The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0
* More info at https://www.jomsocial.com/license-agreement
*/

use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Table\Table;

// Disallow direct access to this file
defined('_JEXEC') or die('Restricted access');

jimport( 'joomla.application.component.controller' );

/**
 * JomSocial Profile Controller
 */
class CommunityControllerProfiles extends CommunityController
{
    public function __construct()
    {
        parent::__construct();

        $this->registerTask( 'publish' , 'savePublish' );
        $this->registerTask( 'unpublish' , 'savePublish' );
        $this->registerTask( 'orderup' , 'saveOrder' );
        $this->registerTask( 'orderdown' , 'saveOrder' );
    }

    /**
     * Removes the specific field
     *
     * @access public
     *
     **/
    public function removeField()
    {
        $mainframe  = Factory::getApplication();
        $jinput     = $mainframe->input;
        $ids    = $jinput->post->get( 'cid', array(), 'array' );
        $count  = count($ids);

        foreach( $ids as $id )
        {
            $table  = Table::getInstance( 'profiles', 'CommunityTable' );
            $table->load( $id );

            if(!$table->delete( $id ))
            {
                // If there are any error when deleting, we just stop and redirect user with error.
                $message    = Text::_('COM_COMMUNITY_PROFILE_FIELD_DELETE_ERROR');
                return $this->setRedirect( 'index.php?option=com_community&task=profile' , $message, 'error');
            }
        }

        $cache = Factory::getCache('com_content');
        $cache->clean();
        $message    = Text::sprintf('COM_COMMUNITY_PROFILE_FIELDS_REMOVED', $count );
        $this->setRedirect( 'index.php?option=com_community&view=profiles' , $message, 'message' );
    }

    /**
     * Save the ordering of the entire records.
     *
     * @access public
     *
     **/
    public function saveOrder($profileId = 0, $moveBy = 0, $orderBy = 1)
    {
        $mainframe  = Factory::getApplication();
        $jinput     = $mainframe->input;

        // Determine whether to order it up or down
        $direction  = ( $jinput->getWord( 'task' , '' ) == 'orderup' ) ? -1 : 1;

        // Get the ID in the correct location
        $id         = $jinput->post->get('cid', array(), 'array');
        $db         = Factory::getDBO();

        $loop = 0;
        //special case where id, moveby how many rows and the order are provided
        if($id > 0 && $moveBy>0){
            $id[0] = $profileId;
            $loop = $moveBy;
            $direction = ($orderBy > 0) ? 1 : -1;
        }

        if( isset( $id[0] ) )
        {
            $id     = (int) $id[0];

            // Load the Table Object.
            $table  = Table::getInstance( 'profiles' , 'CommunityTable' );

            $table->load( $id );

            do {

                if ($table->type == 'group') {
                    $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                        . 'WHERE ' . $db->quoteName('ordering') . ' > ' . $db->Quote($table->ordering) . ' '
                        . 'AND ' . $db->quoteName('type') . '=' . $db->Quote('group') . ' '
                        . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC '
                        . 'LIMIT 1';

                    $db->setQuery($query);
                    $nextGroup = $db->loadObject();

                    if ($nextGroup || $direction == -1) {
                        if ($direction == -1) {
                            // Get previous group in list
                            $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                . 'WHERE ' . $db->quoteName('ordering') . ' < ' . $db->Quote($table->ordering) . ' '
                                . 'AND ' . $db->quoteName('type') . '=' . $db->Quote('group') . ' '
                                . 'ORDER BY ' . $db->quoteName('ordering') . ' DESC LIMIT 1';

                            $db->setQuery($query);
                            $previousGroup = $db->loadObject();

                            $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                . 'WHERE ' . $db->quoteName('ordering') . ' >= ' . $db->Quote($table->ordering);

                            if ($nextGroup) {
                                $query .= ' AND ' . $db->quoteName('ordering') . ' < ' . $db->Quote($nextGroup->ordering);
                            }

                            $query .= 'ORDER BY ' . $db->quoteName('ordering') . ' ASC';

                            $db->setQuery($query);
                            $currentFields = $db->loadObjectList();

                            // Get previous fields in the group
                            $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                . 'WHERE ' . $db->quoteName('ordering') . ' >= ' . $db->Quote($previousGroup->ordering) . ' '
                                . 'AND ' . $db->quoteName('ordering') . ' < ' . $db->Quote($table->ordering) . ' '
                                . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC';

                            $db->setQuery($query);
                            $previousFields = $db->loadObjectList();

                            for ($i = 0; $i < count($previousFields); $i++) {
                                $row = $previousFields[$i];

                                $row->ordering = $row->ordering + count($currentFields);

                                $query = 'UPDATE ' . $db->quoteName('#__community_fields') . ' '
                                    . 'SET ' . $db->quoteName('ordering') . '=' . $db->Quote($row->ordering) . ' '
                                    . 'WHERE ' . $db->quoteName('id') . '=' . $db->Quote($row->id);
                                $db->setQuery($query);
                                $db->execute();
                            }

                            for ($i = 0; $i < count($currentFields); $i++) {
                                $row = $currentFields[$i];

                                $row->ordering = $row->ordering - count($previousFields);

                                $query = 'UPDATE ' . $db->quoteName('#__community_fields') . ' '
                                    . 'SET ' . $db->quoteName('ordering') . '=' . $db->Quote($row->ordering) . ' '
                                    . 'WHERE ' . $db->quoteName('id') . '=' . $db->Quote($row->id);
                                $db->setQuery($query);
                                $db->execute();
                            }
                        } else {
                            // Get end
                            $query = 'SELECT ordering FROM ' . $db->quoteName('#__community_fields') . ' '
                                . 'WHERE ' . $db->quoteName('ordering') . ' > ' . $db->Quote($nextGroup->ordering) . ' '
                                . 'AND ' . $db->quoteName('type') . '=' . $db->Quote('group') . ' '
                                . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC '
                                . 'LIMIT 1';
                            $db->setQuery($query);
                            $nextGroupLimit = $db->loadResult();

                            // Get the next group childs
                            if ($nextGroupLimit) {
                                $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                    . 'WHERE ' . $db->quoteName('ordering') . ' >=' . $nextGroup->ordering . ' '
                                    . 'AND ' . $db->quoteName('ordering') . ' < ' . $nextGroupLimit . ' '
                                    . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC';
                            } else {
                                $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                    . 'WHERE ' . $db->quoteName('ordering') . ' >=' . $nextGroup->ordering . ' '
                                    . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC';
                            }
                            $db->setQuery($query);
                            $nextGroupChilds = $db->loadObjectList();

                            $nextGroupsCount = count($nextGroupChilds);

                            // Get all childs of the current group field
                            $query = 'SELECT * FROM ' . $db->quoteName('#__community_fields') . ' '
                                . 'WHERE ' . $db->quoteName('ordering') . ' >=' . $table->ordering . ' '
                                . 'AND ' . $db->quoteName('ordering') . ' < ' . $nextGroup->ordering . ' '
                                . 'ORDER BY ' . $db->quoteName('ordering') . ' ASC';

                            $db->setQuery($query);
                            $currentGroupChilds = $db->loadObjectList();
                            $currentGroupsCount = count($currentGroupChilds);

                            for ($i = 0; $i < count($nextGroupChilds); $i++) {
                                $row = $nextGroupChilds[$i];

                                //$row->ordering        = $row->ordering - $currentGroupsCount;
                                $row->ordering = $table->ordering++;
                                $query = 'UPDATE ' . $db->quoteName('#__community_fields') . ' '
                                    . 'SET ' . $db->quoteName('ordering') . '=' . $db->Quote($row->ordering) . ' '
                                    . 'WHERE ' . $db->quoteName('id') . '=' . $db->Quote($row->id);

                                $db->setQuery($query);
                                $db->execute();
                            }

                            for ($i = 0; $i < count($currentGroupChilds); $i++) {
                                $child = $currentGroupChilds[$i];

                                $child->ordering = $nextGroupsCount + $child->ordering;

                                $query = 'UPDATE ' . $db->quoteName('#__community_fields') . ' '
                                    . 'SET ' . $db->quoteName('ordering') . '=' . $db->Quote($child->ordering) . ' '
                                    . 'WHERE ' . $db->quoteName('id') . '=' . $db->Quote($child->id);
                                $db->setQuery($query);
                                $db->execute();
                            }
                        }
                    }
                } else {
                    $table->move($direction);
                }
            }while($loop != 0 && --$loop);

            $cache  = Factory::getCache( 'com_content');
            $cache->clean();

            if($moveBy){
                return true;
            }
            $mainframe->redirect( 'index.php?option=com_community&view=profiles' );
        }

    }

    /**
     * AJAX method to save a field
     *
     * @param   int id  Current field id
     * @param   Array data  The fields data
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxSaveGroup( $id , $data )
    {
        $user   = Factory::getUser();

        if ( $user->get('guest'))
        {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }

        $response   = new JAXResponse();

        // Load the Table Object.
        $row    = Table::getInstance( 'profiles' , 'CommunityTable' );
        $row->load( $id );
        $isValid        = true;
        $data['type']   = 'group';
        $row->bind( $data );

        // Do some validation before blindly saving the profile.
        if( empty( $row->name ) )
        {
            $error      = Text::_('COM_COMMUNITY_PROFILE_NAME_EMPTY_WARN');

            $response->addScriptCall( 'joms.jQuery("#error-notice").html("' . $error . '");');
            $isValid    = false;
        }

        if( $isValid )
        {
            $groupOrdering  = isset($data['group']) ? $data['group'] : '';
            $row->store( $groupOrdering );
            $parent         = '';

            // Get the view
            $view       = $this->getView( 'profiles' , 'html' );

            if($id != 0)
            {
                $name   = '<a href="javascript:void(0);" onclick="azcommunity.editFieldGroup(\'' . $row->id . '\' , \'' . Text::_('COM_COMMUNITY_GROUPS_EDIT') . '\');">' . $row->name . '</a>';
                $type   = '<span id="type' . $row->id . '" onclick="$(\'typeOption\').style.display = \'block\';$(this).style.display = \'none\';">'
                        . JString::ucfirst($row->type)
                        . '</span>';

                $publish        = $view->getPublish( $row , 'published' , 'profiles,ajaxGroupTogglePublish' );
                $required       = $view->getPublish( $row , 'required' , 'profiles,ajaxGroupTogglePublish');
                $visible        = $view->getPublish( $row , 'visible' , 'profiles,ajaxGroupTogglePublish');
                $registration   = $view->getPublish( $row , 'registration' , 'profiles,ajaxGroupTogglePublish');

                // Set the parent id
                $parent     = $row->id;

                // Update the rows in the table at the page.
                //@todo: need to update the title in a way looks like Joomla initialize the tooltip on document ready
                $response->addAssign('name' . $row->id, 'innerHTML' , $name);

                $response->addAssign('type' . $row->id, 'innerHTML', $type);
                $response->addAssign('published' . $row->id, 'innerHTML', $publish);
                $response->addAssign('required' . $row->id, 'innerHTML', $required);
                $response->addAssign('visible' . $row->id, 'innerHTML', $visible);
                $response->addAssign('registration' . $row->id, 'innerHTML', $registration);
                $response->addAssign('min' . $row->id, 'value', $row->min);
                $response->addAssign('max' . $row->id, 'value', $row->max);

            }
            else
            {
                $response->addScriptCall('window.location.href = "' . JURI::base() . 'index.php?option=com_community&view=profiles";');
            }
            $response->addScriptCall('cWindowHide();');
        }

        $response->sendResponse();
    }

    /**
     * AJAX method to save a field
     *
     * @param   int id  Current field id
     * @param   Array data  The fields data
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxSaveField( $id , $data )
    {
        $user   = Factory::getUser();

        if ( $user->get('guest')) {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }

        $response   = new JAXResponse();

        // Load the Table Object.
        $row    = Table::getInstance( 'profiles' , 'CommunityTable' );
        $row->load( $id );
        $isValid    = true;
        $row->bindAjaxPost( $data );

        // override the option visiable, registration and required for label type.
        if($row->type == 'label')
        {
            //$row->visible         = 0;
            $row->required      = 0;
        }

        // Do some validation before blindly saving the profile.
        if( empty( $row->name ) )
        {
            $error      = Text::_('COM_COMMUNITY_PROFILE_NAME_EMPTY_WARN');

            $response->addScriptCall( 'joms.jQuery("#error-notice").html("' . $error . '");');
            $isValid    = false;
        }

        if( empty( $row->fieldcode ) )
        {
            $error      = Text::_('COM_COMMUNITY_PROFILE_FIELD_CODE_EMPTY_WARN');

            $response->addScriptCall( 'joms.jQuery("#error-notice").html("' . $error . '");');
            $isValid    = false;
        }

        if(
            ( $row->type == 'select'
            || $row->type == 'singleselect'
            || $row->type == 'list'
            || $row->type == 'radio'
            || $row->type == 'checkbox' )
            && empty($row->options)
        )
        {
            $error      = Text::_('COM_COMMUNITY_PROFILE_FIELD_OPTIONS_EMPTY_WARN');

            $response->addScriptCall( 'joms.jQuery("#error-notice").html("' . $error . '");');
            $isValid    = false;
        }

        if( $isValid )
        {
            $groupOrdering  = isset($data['group']) ? $data['group'] : '';

            /* Now, save optional params items */

            $xmlPath = JPATH_ROOT . '/components/com_community/libraries/fields/'. $row->type.'.xml';


            if( JFile::exists($xmlPath) )
            {
                $postvars = $data;
                $post = array();
                // convert $postvars to normal post
                $pattern    = "'params\[(.*?)\]'s";
                for($i =0; $i< count($postvars); $i++)
                {
                    if(!empty($postvars[$i]) && is_array($postvars[$i])){
                        $key = $postvars[$i][0];

                        // @TODO: support 'usergroup' param type
                        // ignoring if key is a array (for multiple select profile type)
                        if (!is_array($key)) {
                            preg_match($pattern, $key, $matches);
                            if($matches){
                                $key = $matches[1];
                                $post[$key] = $postvars[$i][1];
                            }
                        }
                    }
                }

                $params = new CParameter('', $xmlPath);
                $params->bind($post);
                $row->params = $params->toString();
            }

            if($row->type == 'gender'){
                $row->options = "COM_COMMUNITY_MALE\nCOM_COMMUNITY_FEMALE";
            }elseif($row->type == 'country'){
                $row->options = 'Afghanistan'."\n".'Albania'."\n".'Algeria'."\n".'American Samoa'."\n".'Andorra'."\n".'Angola'."\n".'Anguilla'."\n".'Antarctica'."\n".'Antigua and Barbuda'."\n".'Argentina'."\n".'Armenia'."\n".'Aruba'."\n".'Australia'."\n".'Austria'."\n".'Azerbaijan'."\n".'Bahamas'."\n".'Bahrain'."\n".'Bangladesh'."\n".'Barbados'."\n".'Belarus'."\n".'Belgium'."\n".'Belize'."\n".'Benin'."\n".'Bermuda'."\n".'Bhutan'."\n".'Bolivia'."\n".'Bosnia and Herzegovina'."\n".'Botswana'."\n".'Bouvet Island'."\n".'Brazil'."\n".'British Indian Ocean Territory'."\n".'Brunei Darussalam'."\n".'Bulgaria'."\n".'Burkina Faso'."\n".'Burundi'."\n".'Cambodia'."\n".'Cameroon'."\n".'Canada'."\n".'Cape Verde'."\n".'Cayman Islands'."\n".'Central African Republic'."\n".'Chad'."\n".'Chile'."\n".'China'."\n".'Christmas Island'."\n".'Cocos (Keeling) Islands'."\n".'Colombia'."\n".'Comoros'."\n".'Congo'."\n".'Cook Islands'."\n".'Costa Rica'."\n".'Cote D\'Ivoire (Ivory Coast)'."\n".'Croatia (Hrvatska)'."\n".'Cuba'."\n".'Cyprus'."\n".'Czechoslovakia (former)'."\n".'Czech Republic'."\n".'Denmark'."\n".'Djibouti'."\n".'Dominica'."\n".'Dominican Republic'."\n".'East Timor'."\n".'Ecuador'."\n".'Egypt'."\n".'El Salvador'."\n".'Equatorial Guinea'."\n".'Eritrea'."\n".'Estonia'."\n".'Ethiopia'."\n".'Falkland Islands (Malvinas)'."\n".'Faroe Islands'."\n".'Fiji'."\n".'Finland'."\n".'France'."\n".'France, Metropolitan'."\n".'French Guiana'."\n".'French Polynesia'."\n".'French Southern Territories'."\n".'Gabon'."\n".'Gambia'."\n".'Georgia'."\n".'Germany'."\n".'Ghana'."\n".'Gibraltar'."\n".'Great Britain (UK)'."\n".'Greece'."\n".'Greenland'."\n".'Grenada'."\n".'Guadeloupe'."\n".'Guam'."\n".'Guatemala'."\n".'Guinea'."\n".'Guinea-Bissau'."\n".'Guyana'."\n".'Haiti'."\n".'Heard and McDonald Islands'."\n".'Honduras'."\n".'Hong Kong'."\n".'Hungary'."\n".'Iceland'."\n".'India'."\n".'Indonesia'."\n".'Iran'."\n".'Iraq'."\n".'Ireland'."\n".'Israel'."\n".'Italy'."\n".'Jamaica'."\n".'Japan'."\n".'Jordan'."\n".'Kazakhstan'."\n".'Kenya'."\n".'Kiribati'."\n".'Korea, North'."\n".'South Korea'."\n".'Kuwait'."\n".'Kyrgyzstan'."\n".'Laos'."\n".'Latvia'."\n".'Lebanon'."\n".'Lesotho'."\n".'Liberia'."\n".'Libya'."\n".'Liechtenstein'."\n".'Lithuania'."\n".'Luxembourg'."\n".'Macau'."\n".'Macedonia'."\n".'Madagascar'."\n".'Malawi'."\n".'Malaysia'."\n".'Maldives'."\n".'Mali'."\n".'Malta'."\n".'Marshall Islands'."\n".'Martinique'."\n".'Mauritania'."\n".'Mauritius'."\n".'Mayotte'."\n".'Mexico'."\n".'Micronesia'."\n".'Moldova'."\n".'Monaco'."\n".'Mongolia'."\n".'Montserrat'."\n".'Morocco'."\n".'Mozambique'."\n".'Myanmar'."\n".'Namibia'."\n".'Nauru'."\n".'Nepal'."\n".'Netherlands'."\n".'Netherlands Antilles'."\n".'Neutral Zone'."\n".'New Caledonia'."\n".'New Zealand'."\n".'Nicaragua'."\n".'Niger'."\n".'Nigeria'."\n".'Niue'."\n".'Norfolk Island'."\n".'Northern Mariana Islands'."\n".'Norway'."\n".'Oman'."\n".'Pakistan'."\n".'Palau'."\n".'Panama'."\n".'Papua New Guinea'."\n".'Paraguay'."\n".'Peru'."\n".'Philippines'."\n".'Pitcairn'."\n".'Poland'."\n".'Portugal'."\n".'Puerto Rico'."\n".'Qatar'."\n".'Reunion'."\n".'Romania'."\n".'Russian Federation'."\n".'Rwanda'."\n".'Saint Kitts and Nevis'."\n".'Saint Lucia'."\n".'Saint Vincent and the Grenadines'."\n".'Samoa'."\n".'San Marino'."\n".'Sao Tome and Principe'."\n".'Saudi Arabia'."\n".'Senegal'."\n".'Seychelles'."\n".'S. Georgia and S. Sandwich Isls.'."\n".'Sierra Leone'."\n".'Singapore'."\n".'Slovak Republic'."\n".'Slovenia'."\n".'Solomon Islands'."\n".'Somalia'."\n".'South Africa'."\n".'Spain'."\n".'Sri Lanka'."\n".'St. Helena'."\n".'St. Pierre and Miquelon'."\n".'Sudan'."\n".'Suriname'."\n".'Svalbard and Jan Mayen Islands'."\n".'Swaziland'."\n".'Sweden'."\n".'Switzerland'."\n".'Syria'."\n".'Taiwan'."\n".'Tajikistan'."\n".'Tanzania'."\n".'Thailand'."\n".'Togo'."\n".'Tokelau'."\n".'Tonga'."\n".'Trinidad and Tobago'."\n".'Tunisia'."\n".'Turkey'."\n".'Turkmenistan'."\n".'Turks and Caicos Islands'."\n".'Tuvalu'."\n".'Uganda'."\n".'Ukraine'."\n".'United Arab Emirates'."\n".'United Kingdom'."\n".'United States'."\n".'Uruguay'."\n".'US Minor Outlying Islands'."\n".'USSR (former)'."\n".'Uzbekistan'."\n".'Vanuatu'."\n".'Vatican City State (Holy Sea)'."\n".'Venezuela'."\n".'Viet Nam'."\n".'Virgin Islands (British)'."\n".'Virgin Islands (U.S.)'."\n".'Wallis and Futuna Islands'."\n".'Western Sahara'."\n".'Yemen'."\n".'Yugoslavia'."\n".'Zaire'."\n".'Zambia'."\n".'Zimbabwe';
            }


            if ($row->store($groupOrdering)) {
                // re-assign field and group field to profile type
                $profiletypeIds = array();

                if (is_array($data[4])) {
                    foreach ($data[4] as $key => $value) {
                        if (isset($value[0] ) && $value[0] == 'profiletypes') {
                            $profiletypeIds[] = $value[1];
                        }
                    }

                    // delete existing mapping and re-map it again to ensure data integrity
                    $multiprofile = Table::getInstance('MultiProfile' , 'CTable');

                    $groupId = ($groupOrdering > 1) ? $groupOrdering - 1 : $groupOrdering;
                    $fieldId = ($id == 0) ? $row->id : $id;
                    $multiprofile->load($fieldId);
                    $multiprofile->deleteChilds($fieldId);

                    $fieldTable = Table::getInstance('MultiProfileFields' , 'CTable');
                    if ($profiletypeIds) {
                        foreach ($profiletypeIds as $profiletypeId) {
                            $field = Table::getInstance('MultiProfileFields' , 'CTable');
                            $field->parent = $profiletypeId;
                            $field->field_id  = $fieldId;
                            $field->store();

                            // add group field if not added yet
                            if (!$fieldTable->checkField($profiletypeId, $groupId)) {
                                $field = Table::getInstance('MultiProfileFields' , 'CTable');
                                $field->parent = $profiletypeId;
                                $field->field_id  = $groupId;
                                $field->store();
                            }
                        }
                    }
                    // delete group field if no assigned child field to profile type
                    $modelProfiles = $this->getModel('profiles');

                    $groupFields = $modelProfiles->getGroupFields($groupOrdering);
                    $fieldIds = array();
                    foreach ($groupFields as $field) {
                            $fieldIds[] = $field->id;
                    }

                    if($fieldIds) {
                        // get multiple profiles
                        $multiProfile = $this->getModel('multiprofile');
                        $profileTypes = $multiProfile->getMultiProfiles();

                        foreach ($profileTypes as $profileType) {
                            if (!$fieldTable->checkField($profileType->id, $fieldIds)) {
                                $removeGroup = Table::getInstance('MultiProfile' , 'CTable');
                                $removeGroup->load($profileType->id);
                                $removeGroup->deleteField($groupId);
                            }
                        }
                    };
                }
            }

            $parent = '';

            // Get the view
            $view = $this->getView( 'profiles' , 'html' );

            if($id != 0)
            {
                $name   = '<a href="javascript:void(0);" onclick="azcommunity.editField(\'' . $row->id . '\');">' . $row->name . '</a>';
                $type   = '<span id="type' . $row->id . '" onclick="$(\'typeOption\').style.display = \'block\';$(this).style.display = \'none\';">'
                        . JString::ucfirst($row->type)
                        . '</span>';

                $publish        = $view->getPublish( $row , 'published' , 'profiles,ajaxTogglePublish' );
                if($row->type == 'label')
                {
                    $required       = $view->showPublish( $row , 'required');
                    //$visible      = $view->showPublish( $row , 'visible');
                    $visible        = $view->getPublish( $row , 'visible' , 'profiles,ajaxTogglePublish');
                }
                else
                {
                    $required       = $view->getPublish( $row , 'required' , 'profiles,ajaxTogglePublish');
                    $visible        = $view->getPublish( $row , 'visible' , 'profiles,ajaxTogglePublish');
                }

                $registration   = $view->getPublish( $row , 'registration' , 'profiles,ajaxTogglePublish');

                // Set the parent id
                $parent     = $row->id;
                $response->addScriptCall('location.reload();');
            }
            else
            {
                $response->addScriptCall('location.reload();');
            }

            $response->addScriptCall('cWindowHide();');
        }
        else
        {
            //release the form input back to enabled.
            $response->addScriptCall('joms.jQuery(\'#cWindowContent\').find(\'input, textarea, button\').attr(\'disabled\', false)');
        }

        $response->sendResponse();
    }

    /**
     * AJAX method to toggle publish group and its associated fields status
     *
     * @param   int id  Current field id
     * @param   string field    The field publish type
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxGroupTogglePublish( $id , $field )
    {

        $user   = Factory::getUser();

        $images = array(    0   =>  'publish_x.png',
                            1   =>  'tick.png',
                            2   =>  'publish_y.png');

        // @rule: Disallow guests.
        if ( $user->get('guest'))
        {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }

        $this->_registerFieldCheck($id , $field);

        // Get the view
        $view       = $this->getView( 'profiles' , 'html' );
        $response   = new JAXResponse();

        $gRow   = Table::getInstance( 'profiles' , 'CommunityTable' );
        $gRow->load( $id );

        $model          = $this->getModel( 'profiles' );
        $groupFields    = $model->getGroupFields($gRow->ordering);

        if($field ==='visible'){
            $gRow->$field   = ($gRow->$field + 1) % 3;
        } else {
            $gRow->$field   = ($gRow->$field + 1) % 2;
        }
        //update all the fields
        if(count($groupFields) > 0)
        {
            foreach($groupFields as $item)
            {
                // Load the Table Object.
                $row    = Table::getInstance( 'profiles' , 'CommunityTable' );
                $row->load( $item->id );

                $row->$field    = $gRow->$field;
                $row->store();
                $image          = $images[$row->$field];
                $html   = $view->getPublish( $row , $field , 'profiles' . ',ajaxTogglePublish' );
                $response->addAssign( $field . $row->id , 'innerHTML' , $html );

            }
        }


        //now update group
        $gRow->store();
        $image          = $images[$gRow->$field];

        $html   = $view->getPublish( $gRow , $field , 'profiles' . ',ajaxGroupTogglePublish' );
        $response->addAssign( $field . $gRow->id , 'innerHTML' , $html );

        return $response->sendResponse();

    }

    public function ajaxGetFieldParams( $type )
    {
        $html   = $this->_buildFieldParams( $type );

        $response = new JAXResponse();

        $response->addScriptCall( 'azcommunity.insertParams' , $html );
        return $response->sendResponse();

    }

    /**
     * AJAX method to toggle publish status
     *
     * @param   int id  Current field id
     * @param   string field    The field publish type
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxTogglePublish( $id , $field, $viewName=false )
    {
        $user   = Factory::getUser();
        $images = array(    0   =>  'publish_x.png',
                            1   =>  'tick.png',
                            2   =>  'publish_y.png');

        // @rule: Disallow guests.
        if ( $user->get('guest'))
        {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }


        $this->_registerFieldCheck($id , $field);

        $response   = new JAXResponse();
        $view       = $this->getView( 'profiles' , 'html' );

        $row        = Table::getInstance( 'profiles' , 'CommunityTable' );
        $row->load( $id );
        if($field ==='visible'){
            $row->$field    = ($row->$field + 1) % 3;
        } else {
            $row->$field    = ($row->$field + 1) % 2;
        }
        $row->store();
        $image = $images[$row->$field];

        $html   = $view->getPublish( $row , $field , 'profiles' . ',ajaxTogglePublish' );
        $response->addAssign( $field . $id , 'innerHTML' , $html );

        //we need to check group status as well.
        $model  = $this->getModel( 'profiles' );
        $group  = $model->getFieldGroup($row->ordering);

        $gRow   = Table::getInstance( 'profiles' , 'CommunityTable' );
        $gRow->load( $group->id );

        if( !$gRow->$field && $row->$field)
        {
            //this mean group currently was disabled. and the new status for child is enabled.
            //so we need to enable this group as well.

            $gRow->$field   = $row->$field;
            $gRow->store();
            $image          = $images[$gRow->$field];

            $html   = $view->getPublish( $gRow , $field , 'profiles' . ',ajaxGroupTogglePublish' );
            $response->addAssign( $field . $gRow->id , 'innerHTML' , $html );
        }
        else
        {
            //check if all the fields under this group are disabled.
            $groupFields    = $model->getGroupFields($gRow->ordering);
            $countDisabled  = 0;

            //update all the fields
            if(count($groupFields) > 0)
            {
                foreach($groupFields as $item)
                {
                    if(! $item->$field)
                        $countDisabled++;
                }

                if( count($groupFields) == $countDisabled)
                {

                    $gRow->$field   = 0;
                    $gRow->store();
                    $image          = $images[$gRow->$field];

                    $html   = $view->getPublish( $gRow , $field , 'profiles' . ',ajaxGroupTogglePublish' );
                    $response->addAssign( $field . $gRow->id , 'innerHTML' , $html );
                }
            }
        }

        //return parent::ajaxTogglePublish( $id , $field , 'profiles' );
        return $response->sendResponse();
    }

    public function _registerFieldCheck($id , $field)
    {
        $failed = false;

        if($field == 'registration' || $field == 'required')
        {
            //if current toggle field is registration, we need to check on 'required'
            // if user disabled this registration field.
            $html   = '';
            $row    = Table::getInstance( 'profiles' , 'CommunityTable' );
            $row->load( $id );

            // Remove required fields restrictions
            // if(($field == 'registration') && ($row->required && $row->registration))
            // {
            //     // this mean the action is to toggle registration from true to false when required is true.
            //     // if thats the case, it defeated the rules where required field must
            //     // be a registration field as well.
            //     $html   = Text::_('COM_COMMUNITY_PROFILE_ERROR_REGISTRATION_FIELD_DISABLE');
            //     $failed = true;
            // }
            // else if(($field == 'required') && (!$row->required && !$row->registration))
            // {
            //     // this mean the action is to toggle required from false to true when registration is false
            //     // if thats the case, it defeated the rules where required field must
            //     // be a registration field as well.
            //     $html   = Text::_('COM_COMMUNITY_PROFILE_ERROR_REQUIRED_FIELD_DISABLE');
            //     $failed = true;
            // }


            if($failed)
            {
                $response   = new JAXResponse();

                $response->addScriptCall('cAdminWindowShow','','Error');
                $response->addAssign('cWindowContent', 'innerHTML', $html);
                $response->addScriptCall("joms.jQuery('#cWindowContent').css('overflow','auto');");
                return $response->sendResponse();
            }
        }
    }

    /**
     * AJAX method to display the form
     *
     * @param   int fieldId The fieldId that we are editing
     * @param   boolean isGroup Determines whether the current field is a group
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxEditGroup( $fieldId , $isGroup = false )
    {
        $user   = Factory::getUser();

        if ( $user->get('guest'))
        {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }

        $response   = new JAXResponse();

        $model          = $this->getModel( 'profiles' );
        $fieldGroups    = $model->getGroups();

        // Load the Table Object.
        $row    = Table::getInstance( 'profiles' , 'CommunityTable' );
        $row->load( $fieldId );

        $windowTitle    = ($row->id == 0 ) ? Text::_('COM_COMMUNITY_PROFILES_NEW_GROUP') : Text::_('COM_COMMUNITY_GROUPS_EDIT');
        ob_start();
?>
<div style="background-color: #F9F9F9; border: 1px solid #D5D5D5; margin-bottom: 10px; padding: 5px;font-weight: bold;">
    <?php echo Text::_('COM_COMMUNITY_PROFILE_NEW_GROUP');?>
</div>
<div id="error-notice" style="color: red; font-weight:700;"></div>
<div style="clear: both;"></div>
<form action="#" method="post" name="editField" id="editField">
<table cellspacing="0" class="admintable" border="0" width="100%">
    <tbody>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_COSTUMPROFILE_NAME_TIPS');?>"><?php echo Text::_('COM_COMMUNITY_NAME');?></span></td>
            <td>
                <input type="text" value="<?php echo $row->name;?>" name="name" style="width:250px;" />
            </td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_COSTUMPROFILE_PUBLISHED_TIPS');?>"><?php echo Text::_('COM_COMMUNITY_PUBLISHED');?></span></td>
            <td>
                <span><?php echo $this->_buildRadio($row->published, 'published', array( Text::_('COM_COMMUNITY_NO_OPTION'),Text::_('COM_COMMUNITY_YES_OPTION')));?></span>
            </td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_COSTUMPROFILE_VISIBLE_TIPS');?>"><?php echo Text::_('COM_COMMUNITY_VISIBLE');?></span></td>
            <td><?php echo $this->_buildRadio($row->visible, 'visible', array( Text::_('COM_COMMUNITY_PROFILEFIELD_PERSONAL_OPTION'), Text::_('COM_COMMUNITY_PROFILEFIELD_ALL_OPTION'), Text::_('COM_COMMUNITY_PROFILEFIELD_ADMINONLY_OPTION')));?></td>
        </tr>
    </tbody>
</table>
</form>
<?php
        $contents   = ob_get_contents();
        ob_end_clean();

        $buttons    = '<input type="button" class="btn btn-small btn-primary pull-right" onclick="javascript:azcommunity.saveFieldGroup(\'' . $row->id . '\');return false;" value="' . Text::_('COM_COMMUNITY_SAVE') . '"/>';
        $buttons    .= '<input type="button" class="btn btn-small pull-left" onclick="javascript:cWindowHide();" value="' . Text::_('COM_COMMUNITY_CANCEL') . '"/>';
        $response->addAssign( 'cWindowContent' , 'innerHTML' , $contents );
        $response->addAssign('cwin_logo', 'innerHTML', $windowTitle );
        $response->addScriptCall( 'cWindowActions' , $buttons );
        return $response->sendResponse();
    }

    /**
     * AJAX method to display the form
     *
     * @param   int fieldId The fieldId that we are editing
     * @param   boolean isGroup Determines whether the current field is a group
     *
     * @return  JAXResponse object  Azrul's AJAX Response object
     **/
    public function ajaxEditField( $fieldId , $isGroup = false )
    {
        $user   = Factory::getUser();
        //CFactory::load( 'helpers' , 'string' );

        if ( $user->get('guest')) {
            Factory::getApplication()->enqueueMessage(Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN'), 'error');
            return;
        }

        $response   = new JAXResponse();

        $model          = $this->getModel( 'profiles' );
        $fieldOrder     = $model->getFields(false);
        //$fieldGroups    = $model->getGroups();

        // Load the Table Object.
        $row    = Table::getInstance( 'profiles' , 'CommunityTable' );

        $row->load( $fieldId );

        $windowTitle    = ($row->id == 0 ) ? Text::_('COM_COMMUNITY_NEW_FIELD') : Text::_('COM_COMMUNITY_PROFILE_EDIT_FIELD');
        $group          = $model->getFieldGroup( $row->ordering );

        // get multiple profiles
        $multiProfile   = $this->getModel( 'multiprofile' );
        $profileTypes   = $multiProfile->getMultiProfiles();

        ob_start();
?>
<div class="alert alert-info">
    <?php echo Text::_('COM_COMMUNITY_NEW_CUSTOM_PROFILE_LABEL');?>
</div>
<div id="error-notice" style="color:red"></div>
<div style="clear: both;"></div>
<form action="#" method="post" name="editField" id="editField">
<table cellspacing="0" border="0" width="100%">
    <tbody>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_NAME_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_NAME');?></span> <span class="required-sign">*</span></td>
            <td>
                <input type="text" value="<?php echo CStringHelper::escape( $row->name );?>" name="name" placeholder="Name"/>
            </td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_TYPE_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_TYPE');?></span></td>
            <td><?php echo $this->_buildTypes($row->type);?></td>
        </tr>
        <tr style="<?php echo ($row->type != 'group') ? 'display: table-row;' : 'display: none;'; ?>" class="fieldGroups">
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILES_ORDERING_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_PROFILES_ORDERING');?></span></td>
            <td colspan="4">
                <select name="group">
            <?php
                for( $i = 0; $i < count( $fieldOrder ); $i++ ) {
                    $selected   = ($fieldOrder[$i]->id == $fieldId) ? ' selected="selected"' : '';
                    $orderingLabel = ($i + 1) . '. ' . $fieldOrder[$i]->name;
            ?>
                <option value="<?php echo $fieldOrder[$i]->ordering;?>"<?php echo $selected;?> class="<?php echo $fieldOrder[$i]->type; ?>"><?php echo $orderingLabel; ?></option>
            <?php } ?>
                </select>
            </td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_FIELD_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_FIELD_CODE');?> </span><span class="required-sign">*</span></td>
            <td><input type="text" value="<?php echo CStringHelper::escape( $row->fieldcode ); ?>" name="fieldcode" maxlength="255" placeholder="Field Code"/></td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_MULTIPLE_PROFILES_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_MULTIPLE_PROFILES');?></span></td>
            <td>
                <select multiple name="profiletypes">
                    <?php foreach ($profileTypes as $profileType): ?>
                        <?php
                            $selected = null;
                            $selectedProfileFields = $multiProfile->getFieldsByProfileID( $profileType->id );

                            foreach ( $selectedProfileFields as $selectedProfileField ) {
                                if ($selectedProfileField == $fieldId && $fieldId != 0) {
                                    $selected = 'selected="selected"';
                                    break;
                                }
                            }
                        ?>
                        <option value="<?php echo $profileType->id; ?>" <?php echo $selected; ?>><?php echo $profileType->name; ?></option>
                    <?php endforeach; ?>
                </select>
            </td>
        </tr>
        <tr>
            <td valign="top" class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_REGISTRATION_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_REGISTRATION');?></span></td>
            <td colspan="4">
                <?php echo $this->_buildRadio($row->registration, 'registration', array( Text::_('COM_COMMUNITY_NO_OPTION'),Text::_('COM_COMMUNITY_YES_OPTION')));?>
                <?php // echo CHTMLInput::checkbox('registration' ,'ace-switch ace-switch-5', null , $row->registration ); ?>
            </td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_VISIBLE_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_VISIBLE');?></span></td>
            <td><?php echo $this->_buildRadio($row->visible, 'visible', array( Text::_('COM_COMMUNITY_PROFILEFIELD_PERSONAL_OPTION'), Text::_('COM_COMMUNITY_PROFILEFIELD_ALL_OPTION'), Text::_('COM_COMMUNITY_PROFILEFIELD_ADMINONLY_OPTION')));?></td>
        </tr>
        <tr>
            <td class="key"><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_PUBLISHED_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_PUBLISHED');?></span></td>
            <td>
                <span><?php echo $this->_buildRadio($row->published, 'published', array( Text::_('COM_COMMUNITY_NO_OPTION'),Text::_('COM_COMMUNITY_YES_OPTION')));?></span>
            </td>
        </tr>
        <tr>
            <td class="key" width="200" ><span class="js-tooltip" title="<?php echo Text::_('COM_COMMUNITY_PROFILE_REQUIRED_TIPS');?> "><?php echo Text::_('COM_COMMUNITY_REQUIRED');?></span></td>
            <td><?php echo $this->_buildRadio($row->required, 'required', array( Text::_('COM_COMMUNITY_NO_OPTION'),Text::_('COM_COMMUNITY_YES_OPTION')));?></td>
        </tr>

        <?php echo $this->_buildOptions($row, $row->id, $row->type);?>
    </tbody>
</table>
<!-- Start custom params -->
<div id="fieldParams" class="fieldParams">
    <?php

        $type = $row->type;
        if (!$type) {
            $type = 'text';
        }
        echo $this->_buildFieldParams($type, $row->params);

    ?>
</div>
<!-- End custom params -->
</form>
<?php
        $contents   = ob_get_contents();
        ob_end_clean();
        $buttons    = '<input type="button" class="btn btn-small btn-primary pull-right" onclick="javascript:azcommunity.saveField(\'' . $row->id . '\');return false;" value="' . Text::_('COM_COMMUNITY_SAVE') . '"/>';
        $buttons    .= '<input type="button" class="btn btn-small pull-left" onclick="javascript:cWindowHide();" value="' . Text::_('COM_COMMUNITY_CANCEL') . '"/>';
        $response->addAssign( 'cWindowContent' , 'innerHTML' , $contents );
        $response->addAssign( 'cwin_logo' , 'innerHTML' , $windowTitle );
        $response->addScriptCall('jQuery(".js-tooltip, .hasTooltip").tooltip({html: true,placement:\'right\'});');
        $response->addScriptCall('if (window.MooTools) (function($) { $$(".js-tooltip, .hasTooltip").each(function (e) {e.hide = null;});})(MooTools);');
        $response->addScriptCall('cWindowActions', $buttons );
        return $response->sendResponse();
    }

    /**
     * Method to build field types data
     *
     * @access  private
     * @param   string  Selected type
     *
     * @return  string  HTML output
     **/
    public function _buildTypes( $selectedType )
    {
        $model  = $this->getModel( 'profiles' );
        $html   = '';
        $types  = $model->getProfileTypes();

        $html   .= '<select name="type" onchange="azcommunity.changeType(this.value);" id="type">';

        foreach( $types as $type => $value)
        {
            $selected   = ( trim($type) == $selectedType ) ? ' selected="true"' : '';
            $html       .= '<option value="' . $type . '"' . $selected . '>' . $value . '</option>';
        }
        $html   .= '</select>';
        return $html;
    }

    /**
     * Method to build Radio fields
     *
     * @access  private
     * @param   string
     *
     * @return  string  HTML output
     **/
    public function _buildRadio($status, $fieldname, $values)
    {
        $html   = '';
        if(isset($values[$status])){
            foreach ($values as $index=>$val){
                $check  = ($index==$status)? ' checked="checked" ':'';
                $html   .= '<input type="radio" name="' . $fieldname . '" value="'.$index.'"'.$check.' /><span class="lbl">&nbsp;' . $val.'</span>&nbsp;&nbsp;';
            }
        }
        $html .='';
        return $html;
    }

    /**
     * Read custom params from XML file and render them
     **/
    public function _buildFieldParams( $type , $params = '' ) {
        $xmlPath = JPATH_ROOT . '/components/com_community/libraries/fields/'. $type.'.xml';

        $html = '';

        if( is_file($xmlPath) )
        {
            $params = new CParameter($params, $xmlPath);
            $html   = $params->render_customform();

        }

        return $html;
    }

    public function _buildOptions(& $row, $id, $type)
    {
        if( $row->type == 'select' || $row->type == 'singleselect' || $row->type == 'radio' || $row->type == 'list' || $row->type == 'checkbox')
        {
            $html   = '<tr style="display: table-row;" class="fieldOptions">';
        }
        else
        {
            $html   = '<tr style="display: none;" class="fieldOptions">';
        }


        $html   .= '    <td class="key" valign="top">
                            <span class="js-tooltip" title="'.Text::_('COM_COMMUNITY_PROFILE_OPTIONS_TIPS').'">Option</span><br />
                        </td>
                        <td colspan="4">';
        $html   .= '<textarea rows="4" cols="50" name="options">' . $row->options . '</textarea><br />'
                 . '<span>Separate each options with a new line</span></td></tr>';

        return $html;
    }

    public function ajaxSortField($id, $move){
        $this->saveOrder($id, abs($move), $move);
        $response = new JAXResponse();
        $response->sendResponse();
    }
}

Anon7 - 2022
AnonSec Team