Вход Регистрация
Файл: admin/applications/core/modules_admin/tools/help.php
Строк: 257
<?php
/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.3.3
 * Help Files
 * Last Updated: $LastChangedDate: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage    Core
 * @link        http://www.invisionpower.com
 * @version        $Rev: 10721 $
 */

if ( ! defined'IN_ACP' ) )
{
    print 
"<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'.";
    exit();
}


class 
admin_core_tools_help extends ipsCommand
{
    
/**
     * Skin object
     *
     * @var        object            Skin templates
     */
    
protected $html;
    
    
/**
     * Main class entry point
     *
     * @param    object        ipsRegistry reference
     * @return    @e void        [Outputs to screen]
     */
    
public function doExecuteipsRegistry $registry )
    {
        
/* Load lang and skin */
        
$this->registry->class_localization->loadLanguageFile( array( 'admin_tools' ) );
        
$this->html $this->registry->output->loadTemplate'cp_skin_help_files' );
                
        
/* URLs */
        
$this->form_code    $this->html->form_code    'module=tools&amp;section=help';
        
$this->form_code_js $this->html->form_code_js 'module=tools&section=help';
        
        
/* What to do */
        
switch( $this->request['do'] )
        {
            case 
'edit':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'helpfiles_manage' );
                
$this->helpFileForm'edit' );
            break;
            
            case 
'new':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'help_manage' );
                
$this->helpFileForm'new' );
            break;
            
            case 
'doedit':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'help_manage' );
                
$this->handleHelpFileForm'edit' );
            break;
                
            case 
'doreorder':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'helpfiles_manage' );
                
$this->helpFilesReorder();
            break;                
                
            case 
'donew':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'help_manage' );
                
$this->handleHelpFileForm'new' );
            break;
                
            case 
'remove':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'help_remove' );
                
$this->helpFileRemove();
            break;
                
            case 
'exportXml':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'helpfiles_manage' );
                
$this->helpFilesXMLExport();
            break;
            
            case 
'importXml':
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'helpfiles_manage' );
                
$this->helpFilesXMLImport();
            break;
            
            case 
'help_overview':
            default:
                
$this->registry->getClass('class_permissions')->checkPermissionAutoMsg'helpfiles_manage' );
                
$this->helpFilesList();
            break;
        }
        
        
/* Output */
        
$this->registry->output->html_main .= $this->registry->output->global_template->global_frame_wrapper();
        
$this->registry->output->sendOutput();
    }
    
    
/**
     * Import help files XML
     *
     * @return    @e void
     */
    
public function helpFilesXMLImport()
    {
        
/* INIT */
         
$messages = array();
        
        
/* Loop through all the applications */
        
foreach( $this->registry->getApplications() as $app => $__data )
        {
            
$done       $this->helpFilesXMLImport_app$app );
            
$messages[] = sprintf$this->lang->words['h_import_added'], $app$done['added'], $done['updated'] );
            
            
/* In dev time stamp? */
            
if ( IN_DEV )
            {
                
$cache $this->caches['indev'];
                
$cache['import']['help'][ $app ] = time();
                
$this->cache->setCache'indev'$cache, array( 'donow' => 1'array' => ) );
            }
        }
        
        
$this->registry->output->setMessage$this->lang->words['h_imported'] . "<br />" implode"<br />",  $messages ), );
        
$this->helpFilesList();
    }
    
    
/**
     * Import help files XML helper. Abstracted so
     * it can be used outside of this file.
     *
     * @param    string        App Directory
     * @param    bool        Allow overwrite. If FALSE, it will not update.
     * @return    array        Number of items added / updated
     */
    
public function helpFilesXMLImport_app$app$overwrite=TRUE )
    {
        
/* INIT */
        
$file      IPSLib::getAppDir$app ) . '/xml/' $app '_help.xml';
        
$processed = array( 'added' => 0'updated' => );
        
        
/* Got anything to import? */
        
if ( is_file$file ) )
        {
            require_once( 
IPS_KERNEL_PATH.'classXML.php' );/*noLibHook*/
            
            
$xml = new classXMLIPS_DOC_CHAR_SET );
            
$xml->load$file );

            foreach( 
$xml->fetchElements('row') as $row )
            {
                
$entry $xml->fetchElementsFromRecord$row );
                
$db    = array(  'title'       => $entry['title'],
                                 
'text'           => $entry['text'],
                                 
'description' => $entry['description'],
                                 
'position'    => $entry['position'],
                                 
'app'           => $app );
                                
                if ( 
$entry['title'] )
                {
                    
$curFaq $this->DB->buildAndFetch( array( 'select'    => 'id''from' => 'faq''where' => "app='" $app "' AND title = '".$this->DB->addSlashes$entry['title'] )."'" ) );

                    if ( 
$curFaq['id'] )
                    {
                        if ( 
$overwrite === TRUE )
                        {
                            
$processed['updated']++;
                            
                            
$this->DB->update'faq'$db"id = ".  $curFaq['id'] );
                        }
                    }
                    else
                    {
                        
$processed['added']++;
                        
                        
$this->DB->insert'faq'$db );
                    }
                }
            }
        }
        
        return 
$processed;
    }
    
    
/**
     * Export help files XML
     *
     * @return    @e void
     */
    
public function helpFilesXMLExport()
    {
        
/* INIT */
        
$entry = array();
        
        require_once( 
IPS_KERNEL_PATH.'classXML.php' );/*noLibHook*/
        
        /* Loop through all the applications */
        
foreach( $this->registry->getApplications() as $app => $__data )
        {
            
$c 0;
                
            
$xml = new classXMLIPS_DOC_CHAR_SET );
            
$xml->newXMLDocument();
            
$xml->addElement'export' );
            
$xml->addElement'help''export' );

            
/* Query tasks */
            
$this->DB->build( array( 'select' => '*''from' => 'faq''where' => "app='{$app}'" ) );        
            
$this->DB->execute();
            
            
/* Loop through and add tasks to XML */
            
while ( $r $this->DB->fetch() )
            {
                
$c++;
                unset( 
$r['id'] );
                
                
$r['text'] = str_replace'%7Bstyle_image_url%7D''{style_image_url}'$r['text'] );
                
                
$xml->addElementAsRecord'help''row'$r );
            }
            
            
/* Finish XML */    
            
$doc $xml->fetchDocument();
            
            @
unlinkIPSLib::getAppDir$app ) . '/xml/' $app '_help.xml' );
            
            
/* Write */
            
if( $doc and $c )
            {
                
$fh = @fopenIPSLib::getAppDir$app ) . '/xml/' $app '_help.xml''w' );
                @
fwrite$fh$doc );
                @
fclose$fh );
            }
            
            
/* In dev time stamp? */
            
if ( IN_DEV )
            {
                
$cache $this->caches['indev'];
                
$cache['import']['help'][ $app ] = time();
                
$this->cache->setCache'indev'$cache, array( 'donow' => 1'array' => ) );
            }
        }
        
        
$this->registry->output->global_message $this->lang->words['h_exported'];
        
$this->helpFilesList();
    }    
    
    
/**
     * Removes a help file
     *
     * @return    @e void
     * @author    Josh
     */
    
public function helpFileRemove()
    {
        
/* Check ID */
        
$id intval$this->request['id'] );    
        if( ! 
$id )
        {
            
$this->registry->output->showError$this->lang->words['h_noid'], 11149 );
        }
        
        
/* Delete the record */
        
$this->DB->delete'faq'"id={$id});
        
        
/* Log and bounce */
        
$this->registry->adminFunctions->saveAdminLog$this->lang->words['h_removed'] );
        
$this->registry->output->silentRedirect$this->settings['base_url'] . $this->form_code );        
    }    
    
    
/**
     * Handles the add/edit help file form
     *
     * @param    string    $type    Either new or edit
     * @return    @e void
     */
    
public function handleHelpFileForm$type='new' )
    {
        
/* Error Checking */
        
if( ! $this->request['title'] )
        {
            
$this->registry->output->showError$this->lang->words['h_entertitle'], 11150 );
        }

        
$text trim$_POST['editor_main'] );
        
$text preg_replace"/\/""&#092;"$text );
        
$text str_replace'%7Bstyle_image_url%7D''{style_image_url}'$text );
        
        
/* Build DB Array */
        
$db_array = array( 
                            
'title'       => $this->request['title'],
                            
'app'          => $this->request['appDir'],
                            
'text'        => $text,
                            
'description' => nl2br$this->request['description'] ),
                        );
        
        
/* Insert help file */
        
if( $type == 'new' )
        {
            
/* Update the DB */
            
$this->DB->insert'faq'$db_array );
            
            
$id $this->DB->getInsertId();
                        
            
/* Log */
            
$this->registry->adminFunctions->saveAdminLog$this->lang->words['h_addlog'] );
        }
        
/* Update help file */
        
else
        {
            
/* ID */
            
$id intval$this->request['id'] );
            
            if( ! 
$id )
            {
                
$this->registry->output->showError$this->lang->words['h_noid'], 11151 );
            }
            
            
/* Update the DB */
            
$this->DB->update'faq'$db_array"id={$id});
            
            
$this->registry->adminFunctions->saveAdminLog$this->lang->words['h_edited']);            
        }

        
/* Bounce */
        
$this->registry->output->silentRedirect$this->settings['base_url'] . $this->form_code );
    }    
    
    
/**
     * Form for adding/editing help files
     *
     * @param    string    $type    New or edit
     * @return    @e void
     */
    
public function helpFileForm$type='new' )
    {
        
/* INIT */
        
$dropdown = array();
        
        
/* Build Drop */
        
foreach( ipsRegistry::$applications as $appDir => $appData )
        {
            
$dropdown[] = array( $appDir$appData['app_title'] );
        }
    
        
/* Edit Help File */
        
if( $type != 'new' )
        {
            
/* ID */
            
$id intval$this->request['id'] );
            
            if( ! 
$id )
            {
                
$this->registry->output->showError$this->lang->words['h_noid'], 11152 );
            }
        
            
/* Query the help file */
            
$this->DB->build( array( 'select' => '*''from' => 'faq''where' => "id=" $id ) );
            
$this->DB->execute();
            
            
/* Make sure we found one */    
            
if( ! $r $this->DB->fetch() )
            {
                
$this->registry->output->showError$this->lang->words['h_404'], 11153 );
            }
        
            
/* Text bits */
            
$button $this->lang->words['h_editbutton'];
            
$code   'doedit';
        }
        else
        {
            
/* Data */
            
$r  = array();
            
$id 0;
            
            
/* Text Bits */
            
$button $this->lang->words['h_addbutton'];
            
$code   'donew';
        }
        
        
/* Form Elements */
        
$form = array();        
        
        
$form['title']       = $this->registry->output->formInput('title'  $r['title'] );
        
$form['description'] = $this->registry->output->formTextarea('description'$r['description'] );
        
$form['appDir']         = $this->registry->output->formDropdown'appDir'$dropdown$r['app'] );
        
$form['text']        = IPSText::textToForm$r['text'] );
        
        
/* Ouput */
        
$this->registry->output->html .= $this->html->helpFileForm$code$id$form$button );
    }    
    
    
/**
     * Reorders help files
     *
     * @return    @e void
     */
    
public function helpFilesReorder()
    {
        
//-----------------------------------------
        // INIT
        //-----------------------------------------

        
$classToLoad IPSLib::loadLibraryIPS_KERNEL_PATH 'classAjax.php''classAjax' );
        
$ajax         = new $classToLoad();
        
        
//-----------------------------------------
        // Checks...
        //-----------------------------------------

        
if( $this->registry->adminFunctions->checkSecurityKey$this->request['md5check'], true ) === false )
        {
            
$ajax->returnString$this->lang->words['postform_badmd5'] );
            exit();
        }
         
         
//-----------------------------------------
         // Save new position
         //-----------------------------------------

         
$position    1;
         
         if( 
is_array($this->request['faq']) AND count($this->request['faq']) )
         {
             foreach( 
$this->request['faq'] as $this_id )
             {
                 
$this->DB->update'faq', array( 'position' => $position ), 'id=' $this_id );
                 
                 
$position++;
             }
         }

         
//$this->registry->output->silentRedirect( $this->settings['base_url'] . $this->form_code );
         
$ajax->returnString'OK' );
         exit();
    }    
    
    
/**
     * List current help files
     *
     * @return    @e void
     */
    
public function helpFilesList()
    {
        
/* Query Help Files */
        
$this->DB->build( array( 'select' => '*''from' => 'faq''order' => "position" ) );
        
$this->DB->execute();
        
        
/* Do we have help files? */
        
$rows = array();
        
        if( 
$this->DB->getTotalRows() )
        {
            while( 
$r $this->DB->fetch() )
            {
                
/* Add to output array */
                
$rows[] = $r;
            }
        }
        
        
/* Output */
        
$this->registry->output->html           .= $this->html->helpFilesList$rows );
    }    
}
Онлайн: 2
Реклама