325 lines
9.9 KiB
PHP
325 lines
9.9 KiB
PHP
<?php
|
|
/**
|
|
* <pre>
|
|
* Invision Power Services
|
|
* IP.Board v3.3.4
|
|
* Archive stuff (AJAX) - Matt Mecham
|
|
* Last Updated: $Date: 2011-05-05 12:03:47 +0100 (Thu, 05 May 2011) $
|
|
* </pre>
|
|
*
|
|
* @author $Author: ips_terabyte $
|
|
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
|
|
* @license http://www.invisionpower.com/company/standards.php#license
|
|
* @package IP.Board
|
|
* @subpackage Forums
|
|
* @link http://www.invisionpower.com
|
|
* @since 17 November 2011
|
|
* @version $Revision: 8644 $
|
|
*
|
|
*/
|
|
|
|
if ( ! defined( 'IN_IPB' ) )
|
|
{
|
|
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
|
|
exit();
|
|
}
|
|
|
|
class admin_forums_ajax_archive extends ipsAjaxCommand
|
|
{
|
|
/**
|
|
* Main class entry point
|
|
*
|
|
* @param object ipsRegistry reference
|
|
* @return @e void [Outputs to screen]
|
|
*/
|
|
public function doExecute( ipsRegistry $registry )
|
|
{
|
|
//-----------------------------------------
|
|
// Load skin
|
|
//-----------------------------------------
|
|
|
|
$this->html = ipsRegistry::getClass('output')->loadTemplate('cp_skin_archive');
|
|
$this->form_code = $this->html->form_code = 'module=archive&section=archive&';
|
|
//-----------------------------------------
|
|
// Load lang
|
|
//-----------------------------------------
|
|
|
|
ipsRegistry::getClass('class_localization')->loadLanguageFile( array( 'admin_archive' ) );
|
|
|
|
/* Load up archive class */
|
|
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/archive/writer.php', 'classes_archive_writer' );
|
|
$this->archiveWriter = new $classToLoad();
|
|
|
|
$this->archiveWriter->setApp('forums');
|
|
|
|
switch( $this->request['do'] )
|
|
{
|
|
case 'updateCounter':
|
|
default:
|
|
$this->_updateCounter();
|
|
break;
|
|
case 'showRestoreDialog':
|
|
$this->_showRestoreDialog();
|
|
break;
|
|
case 'showAddForumDialog':
|
|
$this->_showAddForumDialog();
|
|
break;
|
|
case 'saveAddForumDialog':
|
|
$this->_saveAddForumDialog();
|
|
break;
|
|
case 'showAddMemberDialog':
|
|
$this->_showAddMemberDialog();
|
|
break;
|
|
case 'saveAddMemberDialog':
|
|
$this->_saveAddMemberDialog();
|
|
break;
|
|
case 'deleteMember':
|
|
$this->_deleteMember();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Deletes a member
|
|
*/
|
|
protected function _deleteMember()
|
|
{
|
|
$type = trim( $this->request['type'] );
|
|
$id = intval( $this->request['id'] );
|
|
$rules = $this->archiveWriter->getRulesFromDb();
|
|
$int = ( $type == 'archive' ) ? 0 : 1;
|
|
$return = array();
|
|
$members = array();
|
|
|
|
/* Existing names */
|
|
$current = ( IPSLib::isSerialized( $rules[ $type ]['member']['text'] ) ) ? unserialize( $rules[ $type ]['member']['text'] ) : array();
|
|
|
|
foreach( $current as $_id )
|
|
{
|
|
if ( $id != $_id )
|
|
{
|
|
$return[] = $_id;
|
|
}
|
|
}
|
|
|
|
$return = array_unique( $return );
|
|
|
|
/* Update DB */
|
|
$this->DB->replace( 'core_archive_rules', array( 'archive_key' => md5( 'forums_member_' . $int ),
|
|
'archive_app' => 'forums',
|
|
'archive_field' => 'member',
|
|
'archive_value' => '',
|
|
'archive_text' => serialize( $return ),
|
|
'archive_unit' => '',
|
|
'archive_skip' => $int ), array( 'archive_key' ) );
|
|
|
|
/* Update members */
|
|
if ( count( $return ) )
|
|
{
|
|
$members = IPSMember::load( $return, 'all' );
|
|
|
|
foreach( $members as $id => $data )
|
|
{
|
|
$members[ $id ] = IPSMember::buildProfilePhoto( $members[ $id ]);
|
|
$members[ $id ]['photoTag'] = IPSMember::buildPhotoTag( $members[ $id ], 'inset' );
|
|
}
|
|
}
|
|
|
|
$this->returnJsonArray( array( 'count' => count( $members ), 'data' => $members, 'ids' => serialize( array_keys( $members ) ) ) );
|
|
}
|
|
/**
|
|
* Saves the add forum dialog
|
|
*/
|
|
protected function _saveAddMemberDialog()
|
|
{
|
|
$type = trim( $this->request['type'] );
|
|
$rules = $this->archiveWriter->getRulesFromDb();
|
|
$int = ( $type == 'archive' ) ? 0 : 1;
|
|
$return = array();
|
|
|
|
/* INIT */
|
|
$memberName = trim( $this->request['addName'] );
|
|
|
|
/* Existing names */
|
|
$current = ( IPSLib::isSerialized( $rules[ $type ]['member']['text'] ) ) ? unserialize( $rules[ $type ]['member']['text'] ) : array();
|
|
|
|
/* Fetch from DB */
|
|
$member = $this->DB->buildAndFetch( array( 'select' => 'member_id',
|
|
'from' => 'members',
|
|
'where' => "members_display_name = '" . $this->DB->addSlashes( $memberName ) . "'" ) );
|
|
|
|
if ( $member['member_id'] )
|
|
{
|
|
$current[] = $member['member_id'];
|
|
}
|
|
|
|
$current = array_unique( $current );
|
|
|
|
/* Update DB */
|
|
$this->DB->replace( 'core_archive_rules', array( 'archive_key' => md5( 'forums_member_' . $int ),
|
|
'archive_app' => 'forums',
|
|
'archive_field' => 'member',
|
|
'archive_value' => '',
|
|
'archive_text' => serialize( $current ),
|
|
'archive_unit' => '',
|
|
'archive_skip' => $int ), array( 'archive_key' ) );
|
|
|
|
/* Update members */
|
|
if ( count( $current ) )
|
|
{
|
|
$members = IPSMember::load( $current, 'all' );
|
|
|
|
foreach( $members as $id => $data )
|
|
{
|
|
$members[ $id ] = IPSMember::buildProfilePhoto( $members[ $id ]);
|
|
$members[ $id ]['photoTag'] = IPSMember::buildPhotoTag( $members[ $id ], 'inset' );
|
|
}
|
|
}
|
|
|
|
$this->returnJsonArray( array( 'count' => count( $members ), 'data' => $members, 'ids' => serialize( array_keys( $members ) ) ) );
|
|
}
|
|
|
|
/**
|
|
* Show the add members dialog
|
|
*/
|
|
protected function _showAddMemberDialog()
|
|
{
|
|
$type = trim( $this->request['type'] );
|
|
$rules = $this->archiveWriter->getRulesFromDb();
|
|
|
|
//IPSText::jsonEncodeForTemplate( $rules )
|
|
|
|
$this->returnHtml( $this->html->showAddMemberDialog( $type ) );
|
|
}
|
|
|
|
/**
|
|
* Saves the add forum dialog
|
|
*/
|
|
protected function _saveAddForumDialog()
|
|
{
|
|
$type = trim( $this->request['type'] );
|
|
$rules = $this->archiveWriter->getRulesFromDb();
|
|
$forums = array();
|
|
$int = ( $type == 'archive' ) ? 0 : 1;
|
|
$return = '';
|
|
|
|
/* Mix in data */
|
|
if ( is_array( $_POST['forumIds'] ) )
|
|
{
|
|
$forums = IPSLib::cleanIntArray( $_POST['forumIds'] );
|
|
}
|
|
else
|
|
{
|
|
$forums = array();
|
|
}
|
|
|
|
/* Update DB */
|
|
$this->DB->replace( 'core_archive_rules', array( 'archive_key' => md5( 'forums_forum_' . $int ),
|
|
'archive_app' => 'forums',
|
|
'archive_field' => 'forum',
|
|
'archive_value' => '',
|
|
'archive_text' => serialize( $forums ),
|
|
'archive_unit' => '',
|
|
'archive_skip' => $int ), array( 'archive_key' ) );
|
|
|
|
/* Send back serialized data */
|
|
$return['ids'] = serialize( $forums );
|
|
|
|
/* Now return the data */
|
|
foreach( $forums as $fid )
|
|
{
|
|
$return['data'][ $fid ] = array( 'data' => $this->registry->class_forums->getForumbyId( $fid ),
|
|
'nav' => $this->html->buildForumNav( $this->registry->class_forums->forumsBreadcrumbNav( $fid, 'showforum=', true ) ) );
|
|
}
|
|
|
|
$this->returnJsonArray( $return );
|
|
}
|
|
|
|
/**
|
|
* Show the add forum dialog
|
|
*/
|
|
protected function _showAddForumDialog()
|
|
{
|
|
$type = trim( $this->request['type'] );
|
|
$rules = $this->archiveWriter->getRulesFromDb();
|
|
$current = array();
|
|
|
|
if ( IPSLib::isSerialized( $rules[ $type ]['forum']['text'] ) )
|
|
{
|
|
$current = unserialize( $rules[ $type ]['forum']['text'] );
|
|
}
|
|
|
|
$multiSelect = $this->registry->class_forums->forumsForumJump( 1, 0, 1, $current, true );
|
|
|
|
$this->returnHtml( $this->html->showAddForumDialog( $multiSelect, $type ) );
|
|
}
|
|
|
|
/**
|
|
* Shows the restore prefs
|
|
*
|
|
* @return @e void [Outputs to screen]
|
|
*/
|
|
protected function _showRestoreDialog()
|
|
{
|
|
/* Load up archive class */
|
|
$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/archive/restore.php', 'classes_archive_restore' );
|
|
$archiveRestore = new $classToLoad();
|
|
|
|
$archiveRestore->setApp('forums');
|
|
|
|
/* Show topics waiting unarchiving */
|
|
$restoreData = $archiveRestore->getRestoreData();
|
|
|
|
$this->returnHtml( $this->html->showRestorePrefs( $restoreData ) );
|
|
}
|
|
|
|
/**
|
|
* Returns updated count data
|
|
*
|
|
* @return @e void [Outputs to screen]
|
|
*/
|
|
protected function _updateCounter()
|
|
{
|
|
/* Get fields to save */
|
|
$archiveFields = $this->archiveWriter->getArchiveOnFields();
|
|
$skipFields = $this->archiveWriter->getArchiveSkipFields();
|
|
|
|
/* To save */
|
|
$rules = array();
|
|
|
|
/* Loop through and get archive data */
|
|
foreach( $archiveFields as $k )
|
|
{
|
|
if ( isset( $_POST[ 'archive_field_' . $k ] ) )
|
|
{
|
|
$rules['archive'][ $k ] = array( 'value' => $_POST[ 'archive_field_' . $k ],
|
|
'text' => isset( $_POST[ 'archive_field_' . $k . '_text' ] ) ? $_POST[ 'archive_field_' . $k . '_text' ] : '',
|
|
'unit' => isset( $_POST[ 'archive_field_' . $k . '_unit' ] ) ? $_POST[ 'archive_field_' . $k . '_unit' ] : '' );
|
|
}
|
|
}
|
|
|
|
/* Loop through and get skup data */
|
|
foreach( $skipFields as $k )
|
|
{
|
|
if ( isset( $_POST[ 'skip_field_' . $k ] ) )
|
|
{
|
|
$rules['skip'][ $k ] = array( 'value' => $_POST[ 'skip_field_' . $k ],
|
|
'text' => isset( $_POST[ 'skip_field_' . $k . '_text' ] ) ? $_POST[ 'skip_field_' . $k . '_text' ] : '',
|
|
'unit' => isset( $_POST[ 'skip_field_' . $k . '_unit' ] ) ? $_POST[ 'skip_field_' . $k . '_unit' ] : '' );
|
|
}
|
|
}
|
|
|
|
$result = $this->archiveWriter->getArchivePossibleCount( $rules );
|
|
|
|
if ( $result['count'] < 1 )
|
|
{
|
|
$result['textString'] = $this->lang->words['archive_no_query'];
|
|
}
|
|
else
|
|
{
|
|
$result['textString'] = sprintf( $this->lang->words['archive_x_query'], $result['percentage'], $this->lang->formatNumber( $result['count'] ), $this->lang->formatNumber( $result['total'] ) );
|
|
}
|
|
|
|
$this->returnJsonArray( $result );
|
|
}
|
|
} |