<?php
#shebang#
/*======================================================================*\
   || #################################################################### ||
   || # vBulletin Blog 4.0.3
   || # ---------------------------------------------------------------- # ||
   || # Copyright ©2000-2010 vBulletin Solutions Inc. All Rights Reserved. ||
   || # This file may not be redistributed in whole or significant part. # ||
   || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
   || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # ||
   || #################################################################### ||
   \*======================================================================*/

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// ##################### DEFINE IMPORTANT CONSTANTS #######################
define('CVS_REVISION', '$RCSfile$ - $Revision: 27874 $');
define('NOZIP', 1);
// #################### PRE-CACHE TEMPLATES AND DATA ######################
if (! count($phrasegroups))
{
	$phrasegroups = array('vbcms', 'global', 'cpcms', 'cphome');
	$globaltemplates = array(
		'pagenav_curpage', 'pagenav_pagelinkrel', 'pagenav_pagelink','pagenav'
	);
}


// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/adminfunctions_cms.php');
require_once(DIR . '/includes/functions_cms_layout.php');
require_once(DIR . '/includes/class_bootstrap_framework.php');
require_once(DIR . '/packages/vbcms/contentmanager.php');
require_once(DIR . '/includes/class_bootstrap_framework.php');
vB_Bootstrap_Framework::init();

if (! isset($vbulletin->userinfo['permissions']['cms']))
{
	vBCMS_Permissions::getUserPerms();
}

// ######################## CHECK ADMIN PERMISSIONS #######################
if (!($vbulletin->userinfo['permissions']['cms']['admin']))
{
	print_cp_no_permission();
}

vB_Bootstrap_Framework::init();

// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
$sect_js_varname = 'filter_section';
$current_user = new vB_Legacy_CurrentUser();
$per_page = vBCms_ContentManager::getPerPage($current_user);

$styles = false;
$layouts = false;

//It's possible we could have a post "do" and a get "do"that don't match. Let's make sure
// we get the right one.
if (isset($_POST['do']))
{
	$vbulletin->input->clean_array_gpc('p', array(
		'do'   => TYPE_STR,
		'mydo' => TYPE_STR,
	));
}
else
{
	$vbulletin->input->clean_array_gpc('r', array(
		'do'   => TYPE_STR,
	));
}


switch($vbulletin->GPC['do'])
{
	case 'list_nodes': //This is called from ajax.php. It returns a list of
		// sections and leaves for a display panel. Because
		//we're just returning xml for ajax we don't want any headers, etc.
		require_once DIR . '/includes/functions_misc.php';
		$vbulletin->input->clean_array_gpc('r', array(
			'nodeid' => TYPE_UINT,
			'level'  => TYPE_UINT,
		));

		if ($vbulletin->GPC_exists['nodeid'])
		{
			$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
			$xml->add_group('root');

			$xml->add_tag('html',  vBCms_ContentManager::getLeafPanel($vbulletin->GPC['nodeid'],
				   'sel_node_' . $vbulletin->GPC['nodeid'] , $vbulletin->GPC['level']));

			$xml->close_group();
			$xml->print_xml();
		}

		break;

	case 'find_leaves':  //This is also called from ajax.php. It returns a list of
		// sections and leaves for a display panel, with only leaves clickable. Because
		//we're just returning xml for ajax we don't want any headers, etc.
		require_once DIR . '/includes/functions_misc.php';

		$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
		$xml->add_group('root');

		$xml->add_tag('html',  vBCms_ContentManager::getNodeSearchResults());

		$xml->close_group();
		$xml->print_xml();

		break;


	case 'list_sections': //This is called from ajax.php. It returns a list of
		// sub-categories of the current node. Because
		//we're just returning xml for ajax we don't want any headers, etc.
		require_once DIR . '/includes/functions_misc.php';
		$vbulletin->input->clean_array_gpc('r', array(
			'sectionid' => TYPE_UINT,
			'level'     => TYPE_UINT,
		));

		$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
		$xml->add_group('root');

		$xml->add_tag('html',  vBCms_ContentManager::showSections($per_page));
		$xml->close_group();
		$xml->print_xml();

		break;

	case 'list_allsection': //This is called from ajax.php. It returns a list of
		// sub-categories of the current node. Because
		//we're just returning xml for ajax we don't want any headers, etc.
		require_once DIR . '/includes/functions_misc.php';
		$vbulletin->input->clean_array_gpc('r', array(
			'order' => TYPE_UINT,
		));

		$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
		$xml->add_group('root');
		$xml->add_tag('html',  vBCms_ContentManager::getSectionList($vbulletin->GPC['order']));
		$xml->close_group();
		$xml->print_xml();
		break;


	case 'list_categories' : //This is called from ajax with a sectionid to
		// list the categories in that section
		require_once DIR . '/includes/functions_misc.php';
		$vbulletin->input->clean_array_gpc('r', array(
			'sectionid' => TYPE_UINT,
		));

		$xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
		$xml->add_group('root');

		$xml->add_tag('html',  vBCms_ContentManager::getCategoryList($vbulletin->GPC['sectionid']));
		$xml->close_group();
		$xml->print_xml();
		break;

	case 'clear_cache':
		print_cp_header($vbphrase['vbcms']);
		if (method_exists(vB_Cache::instance(), 'clean'))
		{
			vB_Cache::instance()->clean(false);
			print_cp_message($vbphrase['cache_cleared']);
		}
		else
		{
			print_cp_message($vbphrase['no_cache_clean']);
		}
		print_cp_footer();
		break;

	case 'perpage': //Here are are updating the number of rows per page
		// This needs to be saved as a user preference. Then we will display
		// results again, which we will do because we don't have a "break"
		$current_user = new vB_Legacy_CurrentUser();
		$vbulletin->input->clean_array_gpc('r', array(
			'perpage' => TYPE_UINT,
			'sentfrom' => TYPE_STR,
		));

		// print_cp_header needs to come before calling vBCms_ContentManager::savePerPage
		// which starts printing a table, creating whitespace before the CP header
		print_cp_header($vbphrase['vbcms']);
		$per_page = vBCms_ContentManager::savePerPage($current_user);

		switch($vbulletin->GPC['sentfrom'])
		{
			case 'section':
				$redirect_do = 'section';
				break;
			case 'category':
				$redirect_do = 'category';
				break;
			case 'nodes':
			default:
				$redirect_do = 'list';
		}
		print_cp_message($vbphrase['saved_perpage'], 'cms_content_admin.php?' . $vbulletin->session->vars['sessionurl'] . "do=$redirect_do");
		print_cp_footer();
		break;

	case 'filter_category':
	case 'category': //Here we are viewing the category browser.
		$vbulletin->input->clean_array_gpc('r', array(
			'nodeid' => TYPE_INT,
			'title_filter' => TYPE_STR,
			'categoryid' => TYPE_INT,
			'sectionid' => TYPE_INT,
			'page' => TYPE_INT,
			'level' => TYPE_UINT,
			));
		print_cp_header($vbphrase['category_manager']);

		if ($vbulletin->GPC_exists['sectionid'])
		{
			echo vBCms_ContentManager::showCategories($vbulletin->GPC['sectionid'], $per_page,
				$vbulletin->GPC['page']);
		} else
		{
			echo vBCms_ContentManager::showCategories(false, $per_page,
				$vbulletin->GPC['page']);
		}
		print_cp_footer();
		break;

	case 'delete_category' :
	case 'save_category':
	case 'new_category' :
	case 'save_categories':
	case 'move_category' :
	case 'saveonecategorystate':
		$vbulletin->input->clean_array_gpc('r', array(
			'categoryid'        => TYPE_INT,
			'sectionid'         => TYPE_INT,
			'target_categoryid' => TYPE_INT,
			'title'             => TYPE_STR,
			'page'              => TYPE_INT,
		));

		if ($vbulletin->GPC_exists['sectionid'] OR $vbulletin->GPC_exists['categoryid'])
		{
			echo vBCms_ContentManager:: updateCategories();
		}
		print_cp_header($vbphrase['category_manager']);
		echo vBCms_ContentManager::showCategories($vbulletin->GPC['sectionid'], $per_page,
				$vbulletin->GPC['page']);
		print_cp_footer();
		break;

	case 'move_node' :
	case 'publish_nodes' :
	case 'unpublish_nodes' :
	case 'save_nodes':
	case 'delete_nodes' :
	case 'set_order':
	case 'new':
		echo vBCms_ContentManager:: updateSections();

		print_cp_header($vbphrase['content_manager']);
		echo vBCms_ContentManager::showNodes($per_page);
		print_cp_footer();
		break;


	case 'delete_section' :
	case 'move_section' :
	case 'publish_section' :
	case 'unpublish_section' :
	case 'saveonetitle':
	case 'saveonelayout':
	case 'saveonestyle':
	case 'save_section' :
	case 'saveonecl':
	case 'sectionpriority':
	case 'sectionpp':
	case 'saveonesectionstate':
	case 'new_section':
	case 'set_order':
	case 'swap_sections':
		echo vBCms_ContentManager::updateSections();

		print_cp_header($vbphrase['section_manager']);
		echo vBCms_ContentManager::showSections($per_page);
		print_cp_footer();
		break;

	case 'saveonenodestate':
		vBCms_ContentManager::updateSections();

		print_cp_header($vbphrase['content_manager']);
		echo vBCms_ContentManager::showNodes($per_page);
		print_cp_footer();
		break;

	case 'section': //Here we are viewing the category browser.
		$vbulletin->input->clean_array_gpc('r', array(
			'nodeid'    => TYPE_INT,
			'sectionid' => TYPE_INT,
			'level'     => TYPE_UINT,
		));
		print_cp_header($vbphrase['section_manager']);

		if (! $vbulletin->GPC_exists['level'])
		{
			$vbulletin->GPC['level'] = '-1';
		}

		echo vBCms_ContentManager::showSections($per_page);
		print_cp_footer();

		break;

	case 'nodecontent': //Here we are view a specific node contents
		$vbulletin->input->clean_array_gpc('r', array(
			'nodegroup' => TYPE_INT,
		));
		print_cp_header($vbphrase['content_manager']);
		echo vBCms_ContentManager::showNodes($per_page);
		print_cp_footer();
		break;

	case 'sort':
	case 'filter':
		//figure out what type we're doing. It could be category or section.
		$vbulletin->input->clean_array_gpc('r', array(
			'sortby'         => TYPE_STR,
			'sortdir'        => TYPE_STR,
			'title_filter'   => TYPE_STR,
			'submit'         => TYPE_STR,
			'state_filter'   => TYPE_INT,
			'author_filter'  => TYPE_STR,
			'filter_section' => TYPE_STR,
			'sentfrom'       => TYPE_STR,
			'contenttypeid'  => TYPE_INT,
		));

		if ($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'nodes')
		{
			print_cp_header($vbphrase['content_manager']);
			echo vBCms_ContentManager::showNodes($per_page);
			print_cp_footer();
		}

		if (($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'section')
			or ($vbulletin->GPC_exists['contenttypeid']
			and $vbulletin->GPC['contenttypeid'] == vB_Types::instance()->getContentTypeID('vBCms_Section')))
		{
			print_cp_header($vbphrase['section_manager']);
			echo vBCms_ContentManager::showSections($per_page);
			print_cp_footer();
		}
		else if (($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'category') or
			($vbulletin->GPC_exists['contenttypeid']
			and $vbulletin->GPC['contenttypeid'] == vB_Types::instance()->getContentTypeID('vBCms_Category')))
		{
			print_cp_header($vbphrase['category_manager']);
			echo vBCms_ContentManager::showNodes($per_page, 'category');
			print_cp_footer();
		}
		 else
		{
			print_cp_header($vbphrase['content_manager']);
			echo vBCms_ContentManager::showNodes($per_page);
			print_cp_footer();
		}
	break;

	case 'filter_section':
		//figure out what type we're doing. It could be category or section.
		$vbulletin->input->clean_array_gpc('r', array(
			'sectionid' => TYPE_INT));
		print_cp_header($vbphrase['section_manager']);
		echo vBCms_ContentManager::showSections($per_page);
		print_cp_footer();
	break;

	case 'filter_nodesection':
		//figure out what type we're doing. It could be category or section.
		$vbulletin->input->clean_array_gpc('r', array(
			'sectionid' => TYPE_INT));
		print_cp_header($vbphrase['content_manager']);
		echo vBCms_ContentManager::showNodes($per_page);
		print_cp_footer();
		break;

	case 'save':
		//figure out what type we're doing. It could be category or section.
		$vbulletin->input->clean_array_gpc('r', array(
			'sortby' => TYPE_STR,
			'title_filter' => TYPE_STR,
			'submit' => TYPE_STR,
			'state_filter' => TYPE_INT,
			'author_filter' => TYPE_STR,
			'filter_section' => TYPE_STR,
			'sentfrom' => TYPE_STR,
			'contenttypeid' => TYPE_INT));

		if ($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'section')
		{
			print_cp_header($vbphrase['section_manager']);
			vBCms_ContentManager::updateSections();
			echo vBCms_ContentManager::showSections($per_page);
			print_cp_footer();
		}
		else if (($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'category') or
			($vbulletin->GPC_exists['contenttypeid']
			and $vbulletin->GPC['contenttypeid'] == vB_Types::instance()->getContentTypeID('vBCms_Category')))
		{
			print_cp_header($vbphrase['category_manager']);
			vBCms_ContentManager::updateCategories();
			echo vBCms_ContentManager::showNodes($per_page, 'category');
			print_cp_footer();
		}
		else if ($vbulletin->GPC_exists['sentfrom'] and $vbulletin->GPC['sentfrom'] == 'nodes')
		{
			print_cp_header($vbphrase['content_manager']);
			vBCms_ContentManager::updateSections();
			echo vBCms_ContentManager::showNodes($per_page);
			print_cp_footer();
		}

	case 'fix_nodes':
		print_cp_header($vbphrase['vbcms']);
		echo vBCms_ContentManager::fixNodeLR();
		print_cp_message($vbphrase['nodetable_repaired']);
		print_cp_footer();
		break;

	case 'list': //This is our default action. We need to display a list of items.

	default:
		$vbulletin->input->clean_array_gpc('r', array(
			'sortby' => TYPE_STR,
			'sortdir' => TYPE_STR,
			'title_filter' => TYPE_STR,
			'submit' => TYPE_STR,
			'state_filter' => TYPE_INT,
			'author_filter' => TYPE_STR,
			'filter_section' => TYPE_STR,
			'contenttypeid' => TYPE_INT));
		print_cp_header($vbphrase['content_manager']);
		echo vBCms_ContentManager::showNodes($per_page);
		print_cp_footer();

	break;
}


/*======================================================================*\
   || ####################################################################
   || # SVN: $Revision: 27874 $
   || ####################################################################
   \*======================================================================*/