Вход Регистрация
Файл: library/XenForo/ControllerAdmin/UserField.php
Строк: 215
<?php

/**
 * Controller for managing custom user fields.
 */
class XenForo_ControllerAdmin_UserField extends XenForo_ControllerAdmin_Abstract
{
    protected function 
_preDispatch($action)
    {
        
$this->assertAdminPermission('userField');
    }

    
/**
     * Displays a list of custom user fields.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionIndex()
    {
        
$fieldModel $this->_getFieldModel();

        
$fields $fieldModel->prepareUserFields($fieldModel->getUserFields());

        
$viewParams = array(
            
'fieldsGrouped' => $fieldModel->groupUserFields($fields),
            
'fieldCount' => count($fields),
            
'fieldGroups' => $fieldModel->getUserFieldGroups(),
            
'fieldTypes' => $fieldModel->getUserFieldTypes()
        );

        return 
$this->responseView('XenForo_ViewAdmin_UserField_List''user_field_list'$viewParams);
    }

    
/**
     * Gets the add/edit form response for a field.
     *
     * @param array $field
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
protected function _getFieldAddEditResponse(array $field)
    {
        
$fieldModel $this->_getFieldModel();

        
$typeMap $fieldModel->getUserFieldTypeMap();
        
$validFieldTypes $fieldModel->getUserFieldTypes();

        if (!empty(
$field['field_id']))
        {
            
$masterTitle $fieldModel->getUserFieldMasterTitlePhraseValue($field['field_id']);
            
$masterDescription $fieldModel->getUserFieldMasterDescriptionPhraseValue($field['field_id']);

            
$existingType $typeMap[$field['field_type']];
            foreach (
$validFieldTypes AS $typeId => $type)
            {
                if (
$typeMap[$typeId] != $existingType)
                {
                    unset(
$validFieldTypes[$typeId]);
                }
            }
        }
        else
        {
            
$masterTitle '';
            
$masterDescription '';
            
$existingType false;
        }

        
$viewParams = array(
            
'field' => $field,
            
'masterTitle' => $masterTitle,
            
'masterDescription' => $masterDescription,
            
'masterFieldChoices' => $fieldModel->getUserFieldChoices($field['field_id'], $field['field_choices'], true),

            
'fieldGroups' => $fieldModel->getUserFieldGroups(),
            
'validFieldTypes' => $validFieldTypes,
            
'fieldTypeMap' => $typeMap,
            
'existingType' => $existingType
        
);

        return 
$this->responseView('XenForo_ViewAdmin_UserField_Edit''user_field_edit'$viewParams);
    }

    
/**
     * Displays form to add a custom user field.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionAdd()
    {
        return 
$this->_getFieldAddEditResponse(array(
            
'field_id' => null,
            
'display_group' => 'personal',
            
'display_order' => 1,
            
'field_type' => 'textbox',
            
'field_choices' => '',
            
'match_type' => 'none',
            
'match_regex' => '',
            
'match_callback_class' => '',
            
'match_callback_method' => '',
            
'max_length' => 0,
            
'required' => 0,
            
'show_registration' => 0,
            
'user_editable' => 'yes',
            
'viewable_profile' => 1,
            
'display_template' => '',
            
'moderator_editable' => 0
        
));
    }

    
/**
     * Displays form to edit a custom user field.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionEdit()
    {
        
$field $this->_getFieldOrError($this->_input->filterSingle('field_id'XenForo_Input::STRING));
        return 
$this->_getFieldAddEditResponse($field);
    }

    
/**
     * Saves a custom user field.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionSave()
    {
        
$fieldId $this->_input->filterSingle('field_id'XenForo_Input::STRING);

        
$newFieldId $this->_input->filterSingle('new_field_id'XenForo_Input::STRING);
        
$dwInput $this->_input->filter(array(
            
'display_group' => XenForo_Input::STRING,
            
'display_order' => XenForo_Input::UINT,
            
'field_type' => XenForo_Input::STRING,
            
'match_type' => XenForo_Input::STRING,
            
'match_regex' => XenForo_Input::STRING,
            
'match_callback_class' => XenForo_Input::STRING,
            
'match_callback_method' => XenForo_Input::STRING,
            
'max_length' => XenForo_Input::UINT,
            
'required' => XenForo_Input::UINT,
            
'show_registration' => XenForo_Input::UINT,
            
'viewable_profile' => XenForo_Input::UINT,
            
'viewable_message' => XenForo_Input::UINT,
            
'display_template' => XenForo_Input::STRING,
            
'moderator_editable' => XenForo_Input::UINT,
        ));
        
$ueInput $this->_input->filter(array(
            
'user_editable_base' => XenForo_Input::UINT,
            
'user_editable_once' => XenForo_Input::UINT
        
));

        
$dw XenForo_DataWriter::create('XenForo_DataWriter_UserField');
        if (
$fieldId)
        {
            
$dw->setExistingData($fieldId);
        }
        else
        {
            
$dw->set('field_id'$newFieldId);
        }

        
$dw->bulkSet($dwInput);

        if (
$ueInput['user_editable_once'])
        {
            
$dw->set('user_editable''once');
        }
        else if (
$ueInput['user_editable_base'])
        {
            
$dw->set('user_editable''yes');
        }
        else
        {
            
$dw->set('user_editable''never');
        }

        
$dw->setExtraData(
            
XenForo_DataWriter_UserField::DATA_TITLE,
            
$this->_input->filterSingle('title'XenForo_Input::STRING)
        );
        
$dw->setExtraData(
            
XenForo_DataWriter_UserField::DATA_DESCRIPTION,
            
$this->_input->filterSingle('description'XenForo_Input::STRING)
        );

        
$fieldChoices $this->_input->filterSingle('field_choice'XenForo_Input::STRING, array('array' => true));
        
$fieldChoicesText $this->_input->filterSingle('field_choice_text'XenForo_Input::STRING, array('array' => true));
        
$fieldChoicesCombined = array();
        foreach (
$fieldChoices AS $key => $choice)
        {
            if (isset(
$fieldChoicesText[$key]))
            {
                
$fieldChoicesCombined[$choice] = $fieldChoicesText[$key];
            }
        }

        
$dw->setFieldChoices($fieldChoicesCombined);

        
$dw->save();

        return 
$this->responseRedirect(
            
XenForo_ControllerResponse_Redirect::SUCCESS,
            
XenForo_Link::buildAdminLink('user-fields') . $this->getLastHash($dw->get('field_id'))
        );
    }

    
/**
     * Deletes a custom user field.
     *
     * @return XenForo_ControllerResponse_Abstract
     */
    
public function actionDelete()
    {
        if (
$this->isConfirmedPost())
        {
            return 
$this->_deleteData(
                
'XenForo_DataWriter_UserField''field_id',
                
XenForo_Link::buildAdminLink('user-fields')
            );
        }
        else
        {
            
$field $this->_getFieldOrError($this->_input->filterSingle('field_id'XenForo_Input::STRING));

            
$viewParams = array(
                
'field' => $field
            
);

            return 
$this->responseView('XenForo_ViewAdmin_UserField_Delete''user_field_delete'$viewParams);
        }
    }

    
/**
     * Gets the specified field or throws an exception.
     *
     * @param string $id
     *
     * @return array
     */
    
protected function _getFieldOrError($id)
    {
        
$field $this->getRecordOrError(
            
$id$this->_getFieldModel(), 'getUserFieldById',
            
'requested_field_not_found'
        
);

        return 
$this->_getFieldModel()->prepareUserField($field);
    }

    
/**
     * @return XenForo_Model_UserField
     */
    
protected function _getFieldModel()
    {
        return 
$this->getModelFromCache('XenForo_Model_UserField');
    }
}
Онлайн: 0
Реклама