Вход Регистрация
Файл: qa-include/qa-page-admin-userfields.php
Строк: 241
<?php
    
/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-include/qa-page-admin-userfields.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: Controller for admin page for editing custom user fields


    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    More about this license: http://www.question2answer.org/license.php
*/

    
if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
        
header('Location: ../');
        exit;
    }

    require_once 
QA_INCLUDE_DIR.'qa-app-admin.php';
    require_once 
QA_INCLUDE_DIR.'qa-db-selects.php';

    
//    Get current list of user fields and determine the state of this admin page

    
$fieldid=qa_post_text('edit');
    if (!isset(
$fieldid))
        
$fieldid=qa_get('edit');
        
    
$userfields=qa_db_select_with_pending(qa_db_userfields_selectspec());

    
$editfield=null;
    foreach (
$userfields as $userfield)
        if (
$userfield['fieldid']==$fieldid)
            
$editfield=$userfield;
    

//    Check admin privileges (do late to allow one DB query)

    
if (!qa_admin_check_privileges($qa_content))
        return 
$qa_content;
        
        
//    Process saving an old or new user field

    
if (qa_clicked('docancel'))
        
qa_redirect('admin/users');

    elseif (
qa_clicked('dosavefield')) {
        require_once 
QA_INCLUDE_DIR.'qa-db-admin.php';
        require_once 
QA_INCLUDE_DIR.'qa-util-string.php';
        
        if (
qa_post_text('dodelete')) {
            
qa_db_userfield_delete($editfield['fieldid']);
            
qa_redirect('admin/users');
        
        } else {
            
$inname=qa_post_text('name');
            
$inflags=qa_post_text('flags');
            
$inposition=qa_post_text('position');

            
$errors=array();
            
        
//    Verify the name is legitimate
        
            
if (qa_strlen($inname)>QA_DB_MAX_PROFILE_TITLE_LENGTH)
                
$errors['name']=qa_lang_sub('main/max_length_x'QA_DB_MAX_PROFILE_TITLE_LENGTH);

        
//    Perform appropriate database action
    
            
if (isset($editfield['fieldid'])) { // changing existing user field
                
qa_db_userfield_set_fields($editfield['fieldid'], isset($errors['name']) ? $editfield['content'] : $inname$inflags);
                
qa_db_userfield_move($editfield['fieldid'], $inposition);
                
                if (empty(
$errors))
                    
qa_redirect('admin/users');

                else {
                    
$userfields=qa_db_select_with_pending(qa_db_userfields_selectspec()); // reload after changes
                    
foreach ($userfields as $userfield)
                        if (
$userfield['fieldid']==$editfield['fieldid'])
                            
$editfield=$userfield;
                }
    
            } elseif (empty(
$errors)) { // creating a new user field

                
for ($attempt=0$attempt<1000$attempt++) {
                    
$suffix=$attempt ? ('-'.(1+$attempt)) : '';
                    
$newtag=qa_substr(implode('-'qa_string_to_words($inname)), 0QA_DB_MAX_PROFILE_TITLE_LENGTH-strlen($suffix)).$suffix;
                    
$uniquetag=true;
                
                    foreach (
$userfields as $userfield)    
                        if (
qa_strtolower(trim($newtag)) == qa_strtolower(trim($userfield['title'])))
                            
$uniquetag=false;
                            
                    if (
$uniquetag) {
                        
$fieldid=qa_db_userfield_create($newtag$inname$inflags);
                        
qa_db_userfield_move($fieldid$inposition);
                        
qa_redirect('admin/users');
                    }
                }
                
                
qa_fatal_error('Could not create a unique database tag');
            }
        }
    }
    
        
//    Prepare content for theme
    
    
$qa_content=qa_content_prepare();

    
$qa_content['title']=qa_lang_html('admin/admin_title').' - '.qa_lang_html('admin/users_title');
    
    
$qa_content['error']=qa_admin_page_error();

    
$positionoptions=array();
    
$previous=null;
    
$passedself=false;
    
    foreach (
$userfields as $userfield) {
        if (isset(
$previous))
            
$positionhtml=qa_lang_html_sub('admin/after_x'qa_html(qa_user_userfield_label($passedself $userfield $previous)));
        else
            
$positionhtml=qa_lang_html('admin/first');
                
        
$positionoptions[$userfield['position']]=$positionhtml;
            
        if (
$userfield['fieldid']==@$editfield['fieldid'])
            
$passedself=true;

        
$previous=$userfield;
    }
    
    if (isset(
$editfield['position']))
        
$positionvalue=$positionoptions[$editfield['position']];
    else {
        
$positionvalue=isset($previous) ? qa_lang_html_sub('admin/after_x'qa_html(qa_user_userfield_label($previous))) : qa_lang_html('admin/first');
        
$positionoptions[1+@max(array_keys($positionoptions))]=$positionvalue;
    }
    
    
$typeoptions=array(
        
=> qa_lang_html('admin/field_single_line'),
        
QA_FIELD_FLAGS_MULTI_LINE => qa_lang_html('admin/field_multi_line'),
        
QA_FIELD_FLAGS_LINK_URL => qa_lang_html('admin/field_link_url'),
    );
    
    
$qa_content['form']=array(
        
'tags' => 'METHOD="POST" ACTION="'.qa_path_html(qa_request()).'"',
        
        
'style' => 'tall',
        
        
'fields' => array(
            
'name' => array(
                
'tags' => 'NAME="name" ID="name"',
                
'label' => qa_lang_html('admin/field_name'),
                
'value' => qa_html(isset($inname) ? $inname qa_user_userfield_label($editfield)),
                
'error' => qa_html(@$errors['name']),
            ),
            
            
'type' => array(
                
'id' => 'type_display',
                
'tags' => 'NAME="flags"',
                
'label' => qa_lang_html('admin/field_type'),
                
'type' => 'select',
                
'options' => $typeoptions,
                
'value' => @$typeoptions[isset($inflags) ? $inflags : @$editfield['flags']],
            ),
            
            
'delete' => array(
                
'tags' => 'NAME="dodelete" ID="dodelete"',
                
'label' => qa_lang_html('admin/delete_field'),
                
'value' => 0,
                
'type' => 'checkbox',
            ),
            
            
'position' => array(
                
'id' => 'position_display',
                
'tags' => 'NAME="position"',
                
'label' => qa_lang_html('admin/position'),
                
'type' => 'select',
                
'options' => $positionoptions,
                
'value' => $positionvalue,
            ),
        ),

        
'buttons' => array(
            
'save' => array(
                
'label' => qa_lang_html(isset($editfield['fieldid']) ? 'main/save_button' : ('admin/add_field_button')),
            ),
            
            
'cancel' => array(
                
'tags' => 'NAME="docancel"',
                
'label' => qa_lang_html('main/cancel_button'),
            ),
        ),
        
        
'hidden' => array(
            
'dosavefield' => '1'// for IE
            
'edit' => @$editfield['fieldid'],
        ),
    );
    
    if (isset(
$editfield['fieldid']))
        
qa_set_display_rules($qa_content, array(
            
'position_display' => '!dodelete',
        ));
    else
        unset(
$qa_content['form']['fields']['delete']);
    
    
$qa_content['focusid']='name';

    
$qa_content['navigation']['sub']=qa_admin_sub_navigation();

    
    return 
$qa_content;


/*
    Omit PHP closing tag to help avoid accidental output
*/
Онлайн: 3
Реклама