Esempio n. 1
0
 public function getXml(vB_XML_Builder &$xml = NULL)
 {
     if (empty($xml)) {
         $xml = new vB_XML_Builder();
         $returnString = TRUE;
     } else {
         $returnString = FALSE;
     }
     $xml->add_group('pages');
     $pageTable = $this->db->fetchTableStructure('page');
     $pageTableColumns = array_diff($pageTable['structure'], array('guid', 'routeid', 'pagetemplateid', 'parentid', $pageTable['key']));
     $pages = $this->db->assertQuery('getPageInfoExport', array('productid' => $this->productid));
     if (!empty($pages)) {
         foreach ($pages as $page) {
             $xml->add_group('page', array('guid' => $page['guid']));
             foreach ($pageTableColumns as $column) {
                 if ($page[$column] != NULL) {
                     $xml->add_tag($column, $page[$column]);
                 }
             }
             $xml->add_tag('parentGuid', $page['parentGuid']);
             $xml->add_tag('pageTemplateGuid', $page['pageTemplateGuid']);
             $xml->add_tag('routeGuid', $page['routeGuid']);
             $xml->close_group();
         }
     }
     $xml->close_group();
     if ($returnString) {
         return $xml->fetch_xml();
     }
 }
Esempio n. 2
0
 public function getXml(vB_XML_Builder &$xml = NULL)
 {
     if (empty($xml)) {
         $xml = new vB_XML_Builder();
         $returnString = TRUE;
     } else {
         $returnString = FALSE;
     }
     $xml->add_group('routes');
     $routeTable = $this->db->fetchTableStructure('routenew');
     $routeTableColumns = array_diff($routeTable['structure'], array('guid', 'contentid', $routeTable['key']));
     $routes = $this->db->assertQuery('routenew', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, vB_dB_Query::CONDITIONS_KEY => array('product' => $this->productid)));
     if (!empty($routes)) {
         foreach ($routes as $route) {
             $routeClass = (isset($route['class']) and !empty($route['class']) and class_exists($route['class'])) ? $route['class'] : vB5_Route::DEFAULT_CLASS;
             $route['arguments'] = call_user_func(array($routeClass, 'exportArguments'), $route['arguments']);
             $xml->add_group('route', array('guid' => $route['guid']));
             foreach ($routeTableColumns as $column) {
                 if ($route[$column] != NULL) {
                     $xml->add_tag($column, $route[$column]);
                 }
             }
             $xml->close_group();
         }
     }
     $xml->close_group();
     if ($returnString) {
         return $xml->fetch_xml();
     }
 }
Esempio n. 3
0
			$xml->close_group('channel');

			if (!$vbulletin->GPC['nohtml'])
			{
				require_once(DIR . '/includes/class_postbit.php');
				$postbit_factory = new vB_Postbit_Factory();
				$postbit_factory->registry =& $vbulletin;
				$postbit_factory->bbcode_parser = new vB_BbCodeParser($vbulletin, fetch_tag_list($vbulletin->options['bburl'] . '/'));
				$postbit_factory->bbcode_parser->printable = true;
			}
			require_once(DIR . '/includes/class_bbcode_alt.php');

		break;
		case 'RSS2':
			require_once(DIR . '/includes/class_xml.php');
			$xml = new vB_XML_Builder($vbulletin);
			$rsstag = array(
				'version'       => '2.0',
				'xmlns:dc'      => 'http://purl.org/dc/elements/1.1/',
				'xmlns:content' => 'http://purl.org/rss/1.0/modules/content/'
			);
			if ($podcastinfo)
			{
				$rsstag['xmlns:itunes'] = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
			}
			$xml->add_group('rss', $rsstag);
				$xml->add_group('channel');
					$xml->add_tag('title', $rsstitle);
					$xml->add_tag('link', $vbulletin->options['bburl'] . '/', array(), false, true);
					$xml->add_tag('description', $description);
					$xml->add_tag('language', vB_Template_Runtime::fetchStyleVar('languagecode'));
Esempio n. 4
0
/**
* Generates the style for the style generator
*
* @param	array 	contains all color data
* @param	int 	Number for the parent id
* @param	string	Title for the genrated style
* @param	boolean	Override version check
* @param	int		Display order for the style
* @param	boolean	True / False whether it will be user selectable
* @param	int		Version
*
*/
function generate_style($data, $parentid, $title, $anyversion = false, $displayorder, $userselect, $version)
{
    global $vbulletin;
    require_once DIR . '/includes/class_xml.php';
    // Need to check variable for values - Check to make sure we have a name etc
    $arr = explode('{', stripslashes($data));
    // checked below
    $hex = array(0 => '');
    // start at one
    $match = $match2 = array();
    // initialize
    $type = 'lps';
    // checked below
    // Get master stylevar data
    $svdata = $vbulletin->db->query_read("\n\t\tSELECT stylevarid\n\t\tFROM " . TABLE_PREFIX . "stylevar\n\t\tWHERE styleid = -1\n\t");
    // Generate list
    $masterlist = array();
    while ($svlist = $vbulletin->db->fetch_array($svdata)) {
        $masterlist[$svlist['stylevarid']] = true;
    }
    foreach ($arr as $key => $value) {
        if (preg_match("/\"hex\":\"([0-9A-F]{6})\"/", $value, $match) == 1) {
            $hex[] = '#' . $match[1];
        }
        if (preg_match("/\"type\":\"([a-z0-9]{3})\"/", $value, $match2) == 1) {
            $type = $match2[1];
        }
    }
    switch (count($hex)) {
        case '11':
            break;
        default:
            print_stop_message('incorrect_color_mapping');
    }
    switch ($type) {
        case 'lpt':
            // White : Similar to the current style
            $sample_file = "style_generator_sample_white.xml";
            $from = array('#A60000', '#BF3030', '#FF4040', '#FF7373');
            $to = array($hex[3], $hex[2], $hex[1], $hex[1]);
            break;
        case 'gry':
            // Grey :: Primary 3 and Primary 4 only
            $sample_file = "style_generator_sample_gray.xml";
            $from = array('#A60000', '#FF4040');
            $to = array($hex[1], $hex[4]);
            break;
        case 'drk':
            // Dark : Primary 3 and Primary 4 only
            $sample_file = "style_generator_sample_dark.xml";
            $from = array('#A60000', '#FF4040');
            $to = array($hex[1], $hex[4]);
            break;
        case 'lps':
            // Light : Primary and Secondary
        // Light : Primary and Secondary
        default:
            // Default to lps (as previously set at start of function, not dark).
            $sample_file = "style_generator_sample_light.xml";
            $from = array('#FF0000', '#BF3030', '#A60000', '#FF4040', '#FF7373', '#009999', '#1D7373', '#5CCCCC');
            $to = array($hex[1], $hex[2], $hex[3], $hex[4], $hex[5], $hex[6], $hex[7], $hex[10]);
            break;
    }
    $decode = $match = array();
    $xmlobj = new vB_XML_Parser(false, DIR . '/includes/xml/' . $sample_file);
    $styledata = $xmlobj->parse();
    foreach ($styledata['stylevars']['stylevar'] as $stylevars) {
        // The XML Parser outputs 2 values for the value field when one is set as an attribute.
        // The work around for now is to specify the first value (the attribute). In reality
        // the parser shouldn't add a blank 'value' if it exists as an attribute.
        $decode[$stylevars['name']] = vb_base64_decode($stylevars['value'][0]);
    }
    // Preg match and then replace. Shutter, a better method is on the way.
    $match = array();
    foreach ($decode as $name => $value) {
        if (preg_match("/\"(#[a-zA-Z0-9]{6})\"/", $value, $match) == 1) {
            $upper = '"' . strtoupper($match[1]) . '"';
            $stylevarparts[$name] = str_replace($from, $to, preg_replace("/\"(#[a-zA-Z0-9]{6})\"/", $upper, $value));
        }
    }
    if ($title === '') {
        $title = 'Style ' . time();
    }
    $xml = new vB_XML_Builder($vbulletin);
    $xml->add_group('style', array('name' => $title, 'vbversion' => $version, 'product' => 'vbulletin', 'type' => 'custom'));
    $xml->add_group('stylevars');
    foreach ($stylevarparts as $stylevarid => $stylevar) {
        // Add if exists
        if ($masterlist[$stylevarid]) {
            $xml->add_tag('stylevar', '', array('name' => htmlspecialchars_uni($stylevarid), 'value' => vb_base64_encode($stylevar)));
        }
    }
    // Close stylevar group
    $xml->close_group();
    // Close style group
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    if ($parentid == -1 or $parentid == -2) {
        $masterstyleid = $parentid;
    } else {
        $style = $vbulletin->db->query_first("\n\t\t\tSELECT IF(type = 'standard', '-1', '-2') AS masterstyleid\n\t\t\tFROM " . TABLE_PREFIX . "style\n\t\t\tWHERE styleid = {$parentid}\n\t\t");
        $masterstyleid = $style['masterstyleid'];
    }
    xml_import_style($doc, $masterstyleid, $parentid, $title, $anyversion, $displayorder, $userselect, null, null, 1);
    print_cp_redirect("template.php?" . $vbulletin->session->vars['sessionurl'] . "do=rebuild&amp;goto=template.php?" . $vbulletin->session->vars['sessionurl']);
}
Esempio n. 5
0
 public function getXml(vB_XML_Builder &$xml = NULL)
 {
     if (empty($xml)) {
         $xml = new vB_XML_Builder();
         $returnString = TRUE;
     } else {
         $returnString = FALSE;
     }
     $xml->add_group('pagetemplates');
     $pageTemplateTable = $this->db->fetchTableStructure('pagetemplate');
     $pageTemplateTableColumns = array_diff($pageTemplateTable['structure'], array('guid', $pageTemplateTable['key']));
     $widgetInstanceTable = $this->db->fetchTableStructure('widgetinstance');
     $widgetInstanceTableColumns = array_diff($widgetInstanceTable['structure'], array('guid', 'widgetid', 'pagetemplateid', $widgetInstanceTable['key']));
     $pageTemplates = $this->db->assertQuery('pagetemplate', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, vB_dB_Query::CONDITIONS_KEY => array('product' => $this->productid)));
     if (!empty($pageTemplates)) {
         foreach ($pageTemplates as $pageTemplate) {
             $info[$pageTemplate[$pageTemplateTable['key']]] = $pageTemplate;
         }
         if (!empty($info)) {
             // fetch widget instances
             $widgetsInfo = array();
             $widgetInstances = $this->db->getRows('widgetinstance', array('pagetemplateid' => array_keys($info)));
             foreach ($widgetInstances as $widgetInstance) {
                 $info[$widgetInstance['pagetemplateid']]['widgets'][$widgetInstance['widgetinstanceid']] = $widgetInstance;
                 $widgetsInfo[$widgetInstance['widgetid']] = '';
             }
             // fetch widget titles
             if (!empty($widgetsInfo)) {
                 $widgets = $this->db->getRows('widget', array('widgetid' => array_keys($widgetsInfo)));
                 foreach ($widgets as $widget) {
                     $widgetsInfo[$widget['widgetid']] = $widget['guid'];
                 }
             }
             // create XML
             foreach ($info as $pageTemplate) {
                 $xml->add_group('pagetemplate', array('guid' => $pageTemplate['guid']));
                 // adding pagetemplate elements
                 foreach ($pageTemplateTableColumns as $column) {
                     if ($pageTemplate[$column] != NULL) {
                         $xml->add_tag($column, $pageTemplate[$column]);
                     }
                 }
                 // adding widgetinstances
                 if (isset($pageTemplate['widgets']) and !empty($pageTemplate['widgets'])) {
                     $xml->add_group('widgets');
                     foreach ($pageTemplate['widgets'] as $widgetInstance) {
                         $xml->add_group('widgetinstance');
                         foreach ($widgetInstanceTableColumns as $column) {
                             $xml->add_tag($column, $widgetInstance[$column]);
                         }
                         // add widget title
                         $xml->add_tag('widgetguid', $widgetsInfo[$widgetInstance['widgetid']]);
                         $xml->close_group();
                     }
                     $xml->close_group();
                 }
                 $xml->close_group();
             }
         }
     }
     $xml->close_group();
     if ($returnString) {
         return $xml->fetch_xml();
     }
 }
Esempio n. 6
0
            //if we just don't define the back url we'll get a javascript "back" as default.
            //an empty string (instead of null) triggers no back button, which is what we want.
            //ugly, but it avoids rewriting a lot of the logic in print_stop_message here.
            define('CP_BACKURL', '');
            //handle the merge redirect as a continue url instead of immediately redirecting.
            define('CP_CONTINUE', $merge_url);
            print_stop_message('product_x_imported_need_merge', $info['productid'], htmlspecialchars($merge_url));
        }
    } else {
        print_stop_message('product_x_imported', $info['productid']);
    }
}
// #############################################################################
if ($_REQUEST['do'] == 'productexport') {
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin);
    $vbulletin->input->clean_array_gpc('r', array('productid' => TYPE_STR));
    //	Set up the parent tag
    $product_details = $db->query_first("\r\n\t\tSELECT *\r\n\t\tFROM " . TABLE_PREFIX . "product\r\n\t\tWHERE productid = '" . $db->escape_string($vbulletin->GPC['productid']) . "'\r\n\t");
    if (!$product_details) {
        print_stop_message('invalid_product_specified');
    }
    $export_styleid = -1;
    $export_languageids = array(-1, 0);
    // ############## main product info
    $xml->add_group('product', array('productid' => strtolower($product_details['productid']), 'active' => $product_details['active']));
    // Parent for product
    $xml->add_tag('title', $product_details['title']);
    $xml->add_tag('description', $product_details['description']);
    $xml->add_tag('version', $product_details['version']);
    $xml->add_tag('url', $product_details['url']);
Esempio n. 7
0
 // get folder names the easy way...
 construct_folder_jump();
 ($hook = vBulletinHook::fetch_hook('private_downloadpm_start')) ? eval($hook) : false;
 // do the business...
 switch ($vbulletin->GPC['dowhat']) {
     // *****************************
     // download as XML
     case 'xml':
         $pmfolders = array();
         while ($pm = $db->fetch_array($pms)) {
             $pmfolders["{$pm['folder']}"][] = $pm;
         }
         unset($pm);
         $db->free_result($pms);
         require_once DIR . '/includes/class_xml.php';
         $xml = new vB_XML_Builder($vbulletin);
         $xml->add_group('privatemessages');
         foreach ($pmfolders as $folder => $messages) {
             $foldername =& $foldernames["{$folder}"];
             $xml->add_group('folder', array('name' => $foldername));
             foreach ($messages as $pm) {
                 $pm['datestamp'] = vbdate('Y-m-d H:i', $pm['datestamp'], false, false);
                 $pm['touser'] = fetch_touser_string($pm);
                 $pm['folder'] = $foldernames["{$pm['folder']}"];
                 $pm['message'] = preg_replace("/(\r\n|\r|\n)/s", "\r\n", $pm['message']);
                 $pm['message'] = fetch_censored_text($pm['message']);
                 unset($pm['folder']);
                 ($hook = vBulletinHook::fetch_hook('private_downloadpm_bit')) ? eval($hook) : false;
                 $xml->add_group('privatemessage');
                 foreach ($pm as $key => $val) {
                     $xml->add_tag($key, $val);
Esempio n. 8
0
 protected function buildOutputFromItems($items, $options)
 {
     $xml = new vB_XML_Builder();
     $xml->add_group('source');
     $xml->add_tag('url', vB::getDatastore()->getOption('frontendurl') . '/');
     $items = $this->formatItems($items, $options);
     foreach ($items as $id => $item) {
         $item = $item['content'];
         $xml->add_group('thread', array('id' => $item['external_nodeid']));
         $xml->add_tag('title', $item['external_prefix_plain'] . vB_String::unHtmlSpecialChars($item['external_title']));
         $xml->add_tag('author', vB_String::unHtmlSpecialChars($item['authorname']));
         $xml->add_tag('date', $this->callvBDate(vB::getDatastore()->getOption('dateformat'), $item['publishdate']));
         $xml->add_tag('time', $this->callvBDate(vB::getDatastore()->getOption('timeformat'), $item['publishdate']));
         $xml->close_group('thread');
     }
     $xml->close_group('source');
     return $xml->fetch_xml();
 }
Esempio n. 9
0
                // replacement
                $templates['Replacement Var Special Templates'][] = $gettemplate;
                break;
        }
    }
    unset($template);
    $db->free_result($gettemplates);
    if (empty($templates)) {
        print_stop_message('download_contains_no_customizations');
    }
    ksort($templates);
    $only['zzz'] = 'Ungrouped Templates';
    // --------------------------------------------
    // now output the XML
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin);
    $xml->add_group('style', array('name' => $vbulletin->GPC['title'], 'vbversion' => $full_product_info[$vbulletin->GPC['product']]['version'], 'product' => $vbulletin->GPC['product'], 'type' => iif($vbulletin->GPC['dostyleid'] == -1, 'master', 'custom')));
    foreach ($templates as $group => $grouptemplates) {
        $xml->add_group('templategroup', array('name' => iif(isset($only["{$group}"]), $only["{$group}"], $group)));
        foreach ($grouptemplates as $template) {
            $xml->add_tag('template', $template['template'], array('name' => htmlspecialchars($template['title']), 'templatetype' => $template['templatetype'], 'date' => $template['dateline'], 'username' => $template['username'], 'version' => htmlspecialchars_uni($template['version'])), true);
        }
        $xml->close_group();
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    require_once DIR . '/includes/functions_file.php';
    file_download($doc, $vbulletin->GPC['filename'], 'text/xml');
}
Esempio n. 10
0
$output = '';
$headers = array();
// setup the board title
$rsstitle = $vbulletin->options['bbtitle'] . " - Project Tools";
if (!empty($report['title'])) {
    $rsstitle .= " - {$report['title']}";
}
$rssicon = create_full_url($stylevar['imgdir_misc'] . '/rss.jpg');
$headers[] = 'Cache-control: max-age=' . $expires;
$headers[] = 'Expires: ' . gmdate("D, d M Y H:i:s", $expires) . ' GMT';
//$headers[] = 'Last-Modified: ' . gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
$headers[] = 'ETag: "' . $cachehash . '"';
$headers[] = 'Content-Type: text/xml' . ($stylevar['charset'] != '' ? '; charset=' . $stylevar['charset'] : '');
$output = '<?xml version="1.0" encoding="' . $stylevar['charset'] . '"?>' . "\r\n\r\n";
require_once DIR . '/includes/class_xml.php';
$xml = new vB_XML_Builder($vbulletin);
$rsstag = array('version' => '2.0', 'xmlns:dc' => 'http://purl.org/dc/elements/1.1/', 'xmlns:content' => 'http://purl.org/rss/1.0/modules/content/');
$xml->add_group('rss', $rsstag);
$xml->add_group('channel');
$xml->add_tag('title', $rsstitle);
$xml->add_tag('link', $vbulletin->options['bburl'] . "/project.php", array(), false, true);
//$xml->add_tag('description', $description);
$xml->add_tag('language', $stylevar['languagecode']);
$xml->add_tag('lastBuildDate', gmdate('D, d M Y H:i:s') . ' GMT');
#$xml->add_tag('pubDate', gmdate('D, d M Y H:i:s') . ' GMT');
$xml->add_tag('generator', 'vBulletin');
$xml->add_tag('ttl', $externalcache);
$xml->add_group('image');
$xml->add_tag('url', $rssicon);
$xml->add_tag('title', $rsstitle);
$xml->add_tag('link', $vbulletin->options['bburl'] . "/project.php", array(), false, true);
Esempio n. 11
0
function get_style_export_xml
(
	$styleid,
	$product,
	$product_version,
	$title,
	$mode
)
{
	//only is the (badly named) list of template groups
	global $vbulletin, $vbphrase, $only;
	if ($styleid == -1)
	{
		// set the style title as 'master style'
		$style = array('title' => $vbphrase['master_style']);
		$sqlcondition = "styleid = -1";
		$parentlist = "-1";
		$is_master = true;
	}
	else
	{
		// query everything from the specified style
		$style = $vbulletin->db->query_first("
			SELECT *
			FROM " . TABLE_PREFIX . "style
			WHERE styleid = " . $styleid
		);

		//export as master -- export a style with all changes as a new master style.
		if ($mode == 2)
		{
			//only allowed in debug mode.
			if (!$vbulletin->debug)
			{
				print_cp_no_permission();
			}

			// get all items from this style and all parent styles
			$sqlcondition = "templateid IN(" . implode(',', unserialize($style['templatelist'])) . ")";
			$sqlcondition .= " AND title NOT LIKE 'vbcms_grid_%'";
			$parentlist = $style['parentlist'];
			$is_master = true;
			$title = $vbphrase['master_style'];
		}

		//export with parent styles
		else if ($mode == 1)
		{
			// get all items from this style and all parent styles (except master)
			$sqlcondition = "styleid <> -1 AND templateid IN(" . implode(',', unserialize($style['templatelist'])) . ")";
			//remove the master style id off the end of the list
			$parentlist = substr(trim($style['parentlist']), 0, -3);
			$is_master = false;
		}

		//this style only
		else
		{
			// get only items customized in THIS style
			$sqlcondition = "styleid = " . $styleid;
			$parentlist = $styleid;
			$is_master = false;
		}
	}

	if ($product == 'vbulletin')
	{
		$sqlcondition .= " AND (product = '" . $vbulletin->db->escape_string($product) . "' OR product = '')";
	}
	else
	{
		$sqlcondition .= " AND product = '" . $vbulletin->db->escape_string($product) . "'";
	}

	// set a default title
	if ($title == '' OR $styleid == -1)
	{
		$title = $style['title'];
	}

	// --------------------------------------------
	// query the templates and put them in an array

	$templates = array();

	$gettemplates = $vbulletin->db->query_read("
		SELECT title, templatetype, username, dateline, version,
		IF(templatetype = 'template', template_un, template) AS template
		FROM " . TABLE_PREFIX . "template
		WHERE $sqlcondition
		ORDER BY title
	");

	while ($gettemplate = $vbulletin->db->fetch_array($gettemplates))
	{
		switch($gettemplate['templatetype'])
		{
			case 'template': // regular template

				// if we have ad template, and we are exporting as master, make sure we do not export the add data
				if (substr($gettemplate['title'], 0, 3) == 'ad_' AND $mode == 2)
				{
					$gettemplate['template'] = '';
				}

				$isgrouped = false;
				foreach(array_keys($only) AS $group)
				{
					if (strpos(strtolower(" $gettemplate[title]"), $group) == 1)
					{
						$templates["$group"][] = $gettemplate;
						$isgrouped = true;
					}
				}
				if (!$isgrouped)
				{
					$templates['zzz'][] = $gettemplate;
				}
			break;

			case 'stylevar': // stylevar
				$templates['StyleVar Special Templates'][] = $gettemplate;
			break;

			case 'css': // css
				$templates['CSS Special Templates'][] = $gettemplate;
			break;

			case 'replacement': // replacement
				$templates['Replacement Var Special Templates'][] = $gettemplate;
			break;
		}
	}
	unset($template);
	$vbulletin->db->free_result($gettemplates);

	if (!empty($templates))
	{
		ksort($templates);

		$only['zzz'] = 'Ungrouped Templates';
	}

	// --------------------------------------------
	// fetch stylevar-dfns

	$stylevarinfo = get_stylevars_for_export($product, $parentlist, $is_master);
	$stylevar_cache = $stylevarinfo['stylevars'];
	$stylevar_dfn_cache = $stylevarinfo['stylevardfns'];

	if (empty($templates) AND empty($stylevar_cache) AND empty($stylevar_dfn_cache))
	{
		print_stop_message('download_contains_no_customizations');
	}

	// --------------------------------------------
	// now output the XML

	require_once(DIR . '/includes/class_xml.php');
	$xml = new vB_XML_Builder($vbulletin);
	$xml->add_group('style',
		array(
			'name' => $title,
			'vbversion' => $product_version,
			'product' => $product,
			'type' => $is_master ? 'master' : 'custom'
		)
	);

	foreach($templates AS $group => $grouptemplates)
	{
		$xml->add_group('templategroup', array('name' => iif(isset($only["$group"]), $only["$group"], $group)));
		foreach($grouptemplates AS $template)
		{
			$xml->add_tag('template', $template['template'],
				array(
					'name' => htmlspecialchars($template['title']),
					'templatetype' => $template['templatetype'],
					'date' => $template['dateline'],
					'username' => $template['username'],
					'version' => htmlspecialchars_uni($template['version'])),
				true
			);
		}
		$xml->close_group();
	}

	$xml->add_group('stylevardfns');
	foreach ($stylevar_dfn_cache AS $stylevargroupname => $stylevargroup)
	{
		$xml->add_group('stylevargroup', array('name' => $stylevargroupname));
		foreach($stylevargroup AS $stylevar)
		{
			$xml->add_tag('stylevar', '',
				array(
					'name' => htmlspecialchars($stylevar['stylevarid']),
					'datatype' => $stylevar['datatype'],
					'validation' => base64_encode($stylevar['validation']),
					'failsafe' => base64_encode($stylevar['failsafe'])
				)
			);
		}
		$xml->close_group();
	}
	$xml->close_group();

	$xml->add_group('stylevars');
	foreach ($stylevar_cache AS $stylevarid => $stylevar)
	{
		$xml->add_tag('stylevar', '',
			array(
				'name' => htmlspecialchars($stylevar['stylevarid']),
				'value' => base64_encode($stylevar['value'])
			)
		);
	}
	$xml->close_group();

	$xml->close_group();

	$doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
	$doc .= $xml->output();
	$xml = null;
	return $doc;
}
function get_language_export_xml($languageid, $product, $custom, $just_phrases, $charset = 'ISO-8859-1')
{
    global $vbulletin;
    //moved here from the top of language.php
    $default_skipped_groups = array('cphelptext', 'pagemeta');
    if ($languageid == -1) {
        //		$language['title'] = $vbphrase['master_language'];
        $language['title'] = new vB_Phrase('language', 'master_language');
    } else {
        $language = vB::getDbAssertor()->getRow('language', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, 'languageid' => $languageid));
    }
    $title = str_replace('"', '\\"', $language['title']);
    $version = str_replace('"', '\\"', $vbulletin->options['templateversion']);
    $vblangcode = str_replace('"', '\\"', $language['vblangcode']);
    $revision = str_replace('"', '\\"', $language['revision']);
    $phrasetypes = fetch_phrasetypes_array(false);
    $phrases = array();
    $getphrases = vB::getDbAssertor()->assertQuery('fetchPhrasesForExport', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_METHOD, 'languageid' => $languageid, 'custom' => $custom, 'product' => $product, 'default_skipped_groups' => $default_skipped_groups));
    foreach ($getphrases as $getphrase) {
        if (!$custom and $getphrase['iscustom']) {
            continue;
        }
        $phrases["{$getphrase['fieldname']}"]["{$getphrase['varname']}"] = $getphrase;
    }
    unset($getphrase);
    if (empty($phrases) and $just_phrases) {
        throw new vB_Exception_AdminStopMessage('download_contains_no_customizations');
    }
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder(null, $charset);
    $languagegroup = array('name' => $title, 'vbversion' => $version, 'product' => $product, 'type' => $languageid == -1 ? 'master' : ($just_phrases ? 'phrases' : 'custom'));
    $vb5_config =& vB::getConfig();
    if (!empty($vblangcode) and !empty($revision)) {
        $languagegroup += array('vblangcode' => $vblangcode, 'revision' => $revision);
    }
    $xml->add_group('language', $languagegroup);
    if ($languageid != -1 and !$just_phrases) {
        $xml->add_group('settings');
        $ignorefields = array('languageid', 'title', 'userselect', 'vblangcode', 'revision');
        foreach ($language as $fieldname => $value) {
            if (substr($fieldname, 0, 12) != 'phrasegroup_' and !in_array($fieldname, $ignorefields)) {
                $xml->add_tag($fieldname, $value, array(), true);
            }
        }
        $xml->close_group();
    }
    if ($languageid == -1 and !empty($default_skipped_groups)) {
        $xml->add_group('skippedgroups');
        foreach ($default_skipped_groups as $skipped_group) {
            $xml->add_tag('skippedgroup', $skipped_group);
        }
        $xml->close_group();
    }
    foreach ($phrases as $_fieldname => $typephrases) {
        $xml->add_group('phrasetype', array('name' => $phrasetypes["{$_fieldname}"]['title'], 'fieldname' => $_fieldname));
        foreach ($typephrases as $phrase) {
            $attributes = array('name' => $phrase['varname']);
            if ($phrase['dateline']) {
                $attributes['date'] = $phrase['dateline'];
            }
            if ($phrase['username']) {
                $attributes['username'] = $phrase['username'];
            }
            if ($phrase['version']) {
                $attributes['version'] = htmlspecialchars_uni($phrase['version']);
            }
            if ($custom and $phrase['languageid'] == 0) {
                $attributes['custom'] = 1;
            }
            $xml->add_tag('phrase', $phrase['text'], $attributes, true);
        }
        $xml->close_group();
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"{$charset}\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    return $doc;
}
Esempio n. 13
0
function get_product_export_xml($productid)
{
	global $vbulletin;

	//	Set up the parent tag
	$product_details = $vbulletin->db->query_first("
		SELECT *
		FROM " . TABLE_PREFIX . "product
		WHERE productid = '" . $vbulletin->db->escape_string($productid) . "'
	");

	if (!$product_details)
	{
		throw new vB_Exception_AdminStopMessage('invalid_product_specified');
	}

	require_once(DIR . '/includes/class_xml.php');
	$xml = new vB_XML_Builder($vbulletin);
	
	$export_styleid = -1;
	$export_languageids = array(-1, 0);

	// ############## main product info
	$xml->add_group(
		'product', array(
		'productid' => strtolower($product_details['productid']),
		'active' => $product_details['active']
	)); // Parent for product

	$xml->add_tag('title', $product_details['title']);
	$xml->add_tag('description', $product_details['description']);
	$xml->add_tag('version', $product_details['version']);
	$xml->add_tag('url', $product_details['url']);
	$xml->add_tag('versioncheckurl', $product_details['versioncheckurl']);

	($hook = vBulletinHook::fetch_hook('admin_product_export')) ? eval($hook) : false;
	// ############## dependencies
	$product_dependencies = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "productdependency
		WHERE productid = '" . $vbulletin->db->escape_string($productid) . "'
		ORDER BY dependencytype, parentproductid, minversion
	");

	$xml->add_group('dependencies');

	while ($product_dependency = $vbulletin->db->fetch_array($product_dependencies))
	{
		$deps = array('dependencytype' => $product_dependency['dependencytype']);
		if ($product_dependency['dependencytype'] == 'product')
		{
			$deps['parentproductid'] = $product_dependency['parentproductid'];
		}
		$deps['minversion'] = $product_dependency['minversion'];
		$deps['maxversion'] = $product_dependency['maxversion'];

		$xml->add_tag('dependency', '', $deps);
	}

	$xml->close_group();

	// ############## install / uninstall codes
	$productcodes = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "productcode
		WHERE productid = '" . $vbulletin->db->escape_string($productid) . "'
	");

	$xml->add_group('codes');

	$productcodes_grouped = array();
	$productcodes_versions = array();

	while ($productcode = $vbulletin->db->fetch_array($productcodes))
	{
		// have to be careful here, as version numbers are not necessarily unique
		$productcodes_versions["$productcode[version]"] = 1;
		$productcodes_grouped["$productcode[version]"][] = $productcode;
	}

	$productcodes_versions = array_keys($productcodes_versions);
	usort($productcodes_versions, 'version_sort');

	foreach ($productcodes_versions AS $version)
	{
		foreach ($productcodes_grouped["$version"] AS $productcode)
		{
			$xml->add_group('code', array('version' => $productcode['version']));
				$xml->add_tag('installcode', $productcode['installcode']);
				$xml->add_tag('uninstallcode', $productcode['uninstallcode']);
			$xml->close_group();
		}
	}

	$xml->close_group();

	//hack in the ability to handle styles other than the master in a sane fashion.
	//We can set it via a hook for the moment, it should be a fairly temporary need.
	//There was some logic that look like you might be able to export more than one
	//style, but it didn't make much sense -- if you selected multiple styles then
	//you'd end up with templates from multiple styles with no attempt to handle duplicates
	//and no requirement that the styles in question were parents/children of each other.
	if ($export_styleid == -1)
	{
		$sqlcondition = "styleid = -1";
		$parentlist = "-1";
	}
	else
	{
		// query everything from the specified style
		$style = $vbulletin->db->query_first("
			SELECT * 
			FROM " . TABLE_PREFIX . "style 
			WHERE styleid = " . $export_styleid
		);
		$sqlcondition = "templateid IN(" . implode(',', unserialize($style['templatelist'])) . ")";
		$parentlist = $style['parentlist'];
	}

	// ############## templates
	$gettemplates = $vbulletin->db->query_read("
		SELECT title, templatetype, username, dateline, version, product,
			IF(templatetype = 'template', template_un, template) AS template
		FROM " . TABLE_PREFIX . "template
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
			AND $sqlcondition
		ORDER BY title
	");

	$xml->add_group('templates');

	while ($template = $vbulletin->db->fetch_array($gettemplates))
	{
		if (is_newer_version($template['version'], $product_details['version']))
		{
			// version in the template is newer than the version of the product,
			// which probably means it's using the vB version
			$template['version'] = $product_details['version'];
		}

		$xml->add_tag('template', $template['template'], array(
			'name' => htmlspecialchars($template['title']),
			'templatetype' => $template['templatetype'],
			'date' => $template['dateline'],
			'username' => $template['username'],
			'version' => htmlspecialchars_uni($template['version'])
		), true);
	}

	$xml->close_group();

	// ############## Stylevars
	$stylevarinfo = get_stylevars_for_export($productid, $parentlist, true);
	$stylevar_cache = $stylevarinfo['stylevars'];
	$stylevar_dfn_cache = $stylevarinfo['stylevardfns'];


	$xml->add_group('stylevardfns');
	foreach ($stylevar_dfn_cache AS $stylevargroupname => $stylevargroup)
	{
		$xml->add_group('stylevargroup', array('name' => $stylevargroupname));
		foreach($stylevargroup AS $stylevar)
		{
			$xml->add_tag('stylevar', '', 
				array(
					'name' => htmlspecialchars($stylevar['stylevarid']), 
					'datatype' => $stylevar['datatype'], 
					'validation' => base64_encode($stylevar['validation']), 
					'failsafe' => base64_encode($stylevar['failsafe'])
				)
			);
		}
		$xml->close_group();
	}
	$xml->close_group();
	unset($stylevar_dfn_cache);


	$xml->add_group('stylevars');
	foreach ($stylevar_cache AS $stylevarid => $stylevar)
	{
		$xml->add_tag('stylevar', '', 
			array(
				'name' => htmlspecialchars($stylevar['stylevarid']), 
				'value' => base64_encode($stylevar['value'])
			)
		);
	}
	$xml->close_group();
	unset($stylevar_dfn_cache);

	// ############## plugins

	$xml->add_group('plugins');

	$plugins = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "plugin
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
		ORDER BY hookname
	");
	while ($plugin = $vbulletin->db->fetch_array($plugins))
	{
		$params = array('active' => $plugin['active'], 'executionorder' => $plugin['executionorder']);

		$xml->add_group('plugin', $params);
			$xml->add_tag('title', $plugin['title']);
			$xml->add_tag('hookname', $plugin['hookname']);
			$xml->add_tag('phpcode', $plugin['phpcode']);
		$xml->close_group();
	}

	unset($plugin);
	$vbulletin->db->free_result($plugins);
	$xml->close_group();

	// ############## phrases
	require_once(DIR . '/includes/adminfunctions_language.php');

	$phrasetypes = fetch_phrasetypes_array(false);

	$phrases = array();
	$getphrases = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "phrase
		WHERE languageid IN (" . implode(',', $export_languageids) . ")
			AND product = '" . $vbulletin->db->escape_string($productid) . "'
		ORDER BY languageid, fieldname, varname
	");
	while ($getphrase = $vbulletin->db->fetch_array($getphrases))
	{
		$phrases["$getphrase[fieldname]"]["$getphrase[varname]"] = $getphrase;
	}
	unset($getphrase);
	$vbulletin->db->free_result($getphrases);

	$xml->add_group('phrases');

	// make sure the phrasegroups are in a reliable order
	ksort($phrases);

	foreach ($phrases AS $_fieldname => $typephrases)
	{
		// create a group for each phrase type that we have phrases for
		// then insert the phrases

		$xml->add_group('phrasetype', array('name' => $phrasetypes["$_fieldname"]['title'], 'fieldname' => $_fieldname));

		// make sure the phrases are in a reliable order
		ksort($typephrases);

		foreach ($typephrases AS $phrase)
		{
			$xml->add_tag('phrase', $phrase['text'], array(
				'name' => $phrase['varname'],
				'date' => $phrase['dateline'],
				'username' => $phrase['username'],
				'version' => htmlspecialchars_uni($phrase['version'])
			), true);
		}

		$xml->close_group();
	}

	$xml->close_group();

	// ############## options
	$setting = array();
	$settinggroup = array();

	$groups = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "settinggroup
		WHERE volatile = 1
		ORDER BY displayorder, grouptitle
	");
	while ($group = $vbulletin->db->fetch_array($groups))
	{
		$settinggroup["$group[grouptitle]"] = $group;
	}

	ksort($settinggroup);

	$options = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "setting
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
			AND volatile = 1
		ORDER BY displayorder, varname
	");
	while ($row = $vbulletin->db->fetch_array($options))
	{
		$setting["$row[grouptitle]"][] = $row;
	}
	unset($row);

	$vbulletin->db->free_result($options);

	$xml->add_group('options');

	foreach ($settinggroup AS $grouptitle => $group)
	{
		if (empty($setting["$grouptitle"]))
		{
			continue;
		}

		// add a group for each setting group we have settings for

		$xml->add_group('settinggroup', array('name' => htmlspecialchars($group['grouptitle']), 'displayorder' => $group['displayorder']));

		ksort($setting["$grouptitle"]);

		foreach($setting["$grouptitle"] AS $set)
		{
			$arr = array('varname' => $set['varname'], 'displayorder' => $set['displayorder']);
			if ($set['advanced'])
			{
				$arr['advanced'] = 1;
			}
			$xml->add_group('setting', $arr);

			if ($set['datatype'])
			{
				$xml->add_tag('datatype', $set['datatype']);
			}
			if ($set['optioncode'] != '')
			{
				$xml->add_tag('optioncode', $set['optioncode']);
			}
			if ($set['validationcode'])
			{
				$xml->add_tag('validationcode', $set['validationcode']);
			}
			if ($set['defaultvalue'] !== '')
			{
				$xml->add_tag('defaultvalue', $set['defaultvalue']);
			}
			if ($set['blacklist'])
			{
				$xml->add_tag('blacklist', 1);
			}

			$xml->close_group();
		}

		$xml->close_group();
	}

	$xml->close_group();

	// ############## admin help
	$help_topics_results = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "adminhelp
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
			AND volatile = 1
		ORDER BY script, action, displayorder, optionname
	");
	$help_topics = array();
	while ($help_topic = $vbulletin->db->fetch_array($help_topics_results))
	{
		$help_topics["$help_topic[script]"][] = $help_topic;
	}
	$vbulletin->db->free_result($help_topics_results);
	ksort($help_topics);

	$xml->add_group('helptopics');

	foreach ($help_topics AS $script => $script_topics)
	{
		$xml->add_group('helpscript', array('name' => $script));
		foreach ($script_topics AS $topic)
		{
			$attr = array('disp' => $topic['displayorder']);
			if ($topic['action'])
			{
				$attr['act'] = $topic['action'];
			}
			if ($topic['optionname'])
			{
				$attr['opt'] = $topic['optionname'];
			}
			$xml->add_tag('helptopic', '', $attr);
		}
		$xml->close_group();
	}

	$xml->close_group();

	// ############## Cron entries
	$cron_results = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "cron
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
			AND volatile = 1
			AND varname <> ''
		ORDER BY varname
	");

	$xml->add_group('cronentries');

	while ($cron = $vbulletin->db->fetch_array($cron_results))
	{
		$minutes = unserialize($cron['minute']);
		if (!is_array($minutes))
		{
			$minutes = array();
		}

		$xml->add_group('cron', array(
			'varname' => $cron['varname'],
			'active' => $cron['active'],
			'loglevel' => $cron['loglevel']
		));
		$xml->add_tag('filename', $cron['filename']);
		$xml->add_tag('scheduling', '', array(
			'weekday' => $cron['weekday'],
			'day' => $cron['day'],
			'hour' => $cron['hour'],
			'minute' => implode(',', $minutes)
		));
		$xml->close_group();
	}

	$xml->close_group();

	$vbulletin->db->free_result($cron_results);

	// ############## FAQ entries

	$faq_results = $vbulletin->db->query_read("
		SELECT *
		FROM " . TABLE_PREFIX . "faq
		WHERE product = '" . $vbulletin->db->escape_string($productid) . "'
			AND volatile = 1
		ORDER BY faqname
	");

	$xml->add_group('faqentries');

	while ($faq = $vbulletin->db->fetch_array($faq_results))
	{
		$xml->add_tag('faq', '', array(
			'faqname' => $faq['faqname'],
			'faqparent' => $faq['faqparent'],
			'displayorder' => $faq['displayorder'],
		));
	}

	$xml->close_group();

	$vbulletin->db->free_result($faq_results);


	// ############## Finish up
	$xml->close_group();
	$doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n" . $xml->output();

	unset($xml);
	return $doc;
}
Esempio n. 14
0
function get_settings_export_xml($product)
{
    global $vbulletin;
    $setting = array();
    $settinggroup = array();
    $groups = $vbulletin->db->query_read("\n\t\tSELECT * FROM " . TABLE_PREFIX . "settinggroup\n\t\tWHERE volatile = 1\n\t\tORDER BY displayorder, grouptitle\n\t");
    while ($group = $vbulletin->db->fetch_array($groups)) {
        $settinggroup["{$group['grouptitle']}"] = $group;
    }
    $sets = $vbulletin->db->query_read("\n\t\tSELECT * FROM " . TABLE_PREFIX . "setting\n\t\tWHERE volatile = 1\n\t\tAND (product = '" . $vbulletin->db->escape_string($product) . "'" . iif($product == 'vbulletin', " OR product = ''") . ")\n\t\tORDER BY displayorder, varname\n\t");
    while ($set = $vbulletin->db->fetch_array($sets)) {
        $setting["{$set['grouptitle']}"][] = $set;
    }
    unset($set);
    $vbulletin->db->free_result($sets);
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin);
    $xml->add_group('settinggroups', array('product' => $product));
    foreach ($settinggroup as $grouptitle => $group) {
        if (!empty($setting["{$grouptitle}"])) {
            $group = $settinggroup["{$grouptitle}"];
            $xml->add_group('settinggroup', array('name' => htmlspecialchars_uni($group['grouptitle']), 'displayorder' => $group['displayorder'], 'product' => $group['product']));
            foreach ($setting["{$grouptitle}"] as $set) {
                $arr = array('varname' => $set['varname'], 'displayorder' => $set['displayorder']);
                if ($set['advanced']) {
                    $arr['advanced'] = 1;
                }
                $xml->add_group('setting', $arr);
                if ($set['datatype']) {
                    $xml->add_tag('datatype', $set['datatype']);
                }
                if ($set['optioncode'] != '') {
                    $xml->add_tag('optioncode', $set['optioncode']);
                }
                if ($set['validationcode']) {
                    $xml->add_tag('validationcode', $set['validationcode']);
                }
                if ($set['defaultvalue'] != '') {
                    $xml->add_tag('defaultvalue', iif($set['varname'] == 'templateversion', $vbulletin->options['templateversion'], $set['defaultvalue']));
                }
                if ($set['blacklist']) {
                    $xml->add_tag('blacklist', 1);
                }
                $xml->close_group();
            }
            $xml->close_group();
        }
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    return $doc;
}
function get_settings_export_xml($product)
{
    $setting = array();
    $settinggroup = array();
    $groups = vB::getDbAssertor()->assertQuery('settinggroup', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, 'volatile' => 1), array('field' => array('displayorder', 'grouptitle'), 'direction' => array(vB_dB_Query::SORT_ASC, vB_dB_Query::SORT_ASC)));
    if ($groups and $groups->valid()) {
        foreach ($groups as $group) {
            $settinggroup["{$group['grouptitle']}"] = $group;
        }
    }
    $sets = vB::getDbAssertor()->assertQuery('vBForum:fetchSettingsByProduct', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_METHOD, 'product' => $product));
    if ($sets and $sets->valid()) {
        foreach ($sets as $set) {
            $setting["{$set['grouptitle']}"][] = $set;
        }
    }
    unset($set);
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder();
    $xml->add_group('settinggroups', array('product' => $product));
    foreach ($settinggroup as $grouptitle => $group) {
        if (!empty($setting["{$grouptitle}"])) {
            $group = $settinggroup["{$grouptitle}"];
            if (empty($group['adminperm'])) {
                $xml->add_group('settinggroup', array('name' => htmlspecialchars($group['grouptitle']), 'displayorder' => $group['displayorder'], 'product' => $group['product']));
            } else {
                $xml->add_group('settinggroup', array('name' => htmlspecialchars($group['grouptitle']), 'displayorder' => $group['displayorder'], 'product' => $group['product'], 'adminperm' => $group['adminperm']));
            }
            foreach ($setting["{$grouptitle}"] as $set) {
                $arr = array('varname' => $set['varname'], 'displayorder' => $set['displayorder']);
                if ($set['advanced']) {
                    $arr['advanced'] = 1;
                }
                $xml->add_group('setting', $arr);
                if ($set['datatype']) {
                    $xml->add_tag('datatype', $set['datatype']);
                }
                if ($set['optioncode'] != '') {
                    $xml->add_tag('optioncode', $set['optioncode']);
                }
                if ($set['validationcode']) {
                    $xml->add_tag('validationcode', $set['validationcode']);
                }
                if ($set['defaultvalue'] != '') {
                    $xml->add_tag('defaultvalue', iif($set['varname'] == 'templateversion', vB::getDatastore()->getOption('templateversion'), $set['defaultvalue']));
                }
                if ($set['blacklist']) {
                    $xml->add_tag('blacklist', 1);
                }
                if ($set['ispublic']) {
                    $xml->add_tag('ispublic', 1);
                }
                if (!empty($set['adminperm'])) {
                    $xml->add_tag('adminperm', $set['adminperm']);
                }
                $xml->close_group();
            }
            $xml->close_group();
        }
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    return $doc;
}
function get_product_export_xml($productid)
{
    $assertor = vB::getDbAssertor();
    //	Set up the parent tag
    $product_details = $assertor->getRow('product', array('productid' => $productid));
    if (!$product_details) {
        throw new vB_Exception_AdminStopMessage('invalid_product_specified');
    }
    $xml = new vB_XML_Builder();
    // ############## main product info
    $xml->add_group('product', array('productid' => strtolower($product_details['productid']), 'active' => $product_details['active']));
    // Parent for product
    $xml->add_tag('title', $product_details['title']);
    $xml->add_tag('description', $product_details['description']);
    $xml->add_tag('version', $product_details['version']);
    $xml->add_tag('url', $product_details['url']);
    $xml->add_tag('versioncheckurl', $product_details['versioncheckurl']);
    // ############## dependencies
    $product_dependencies = $assertor->assertQuery('productdependency', array('productid' => $productid), array('field' => array('dependencytype', 'parentproductid', 'minversion'), 'direction' => array(vB_dB_Query::SORT_ASC, vB_dB_Query::SORT_ASC, vB_dB_Query::SORT_ASC)));
    $xml->add_group('dependencies');
    while ($product_dependencies and $product_dependencies->valid()) {
        $product_dependency = $product_dependencies->current();
        $deps = array('dependencytype' => $product_dependency['dependencytype']);
        if ($product_dependency['dependencytype'] == 'product') {
            $deps['parentproductid'] = $product_dependency['parentproductid'];
        }
        $deps['minversion'] = $product_dependency['minversion'];
        $deps['maxversion'] = $product_dependency['maxversion'];
        $xml->add_tag('dependency', '', $deps);
        $product_dependencies->next();
    }
    unset($product_dependency);
    $xml->close_group();
    // ############## install / uninstall codes
    $productcodes = $assertor->getRows('productcode', array('productid' => $productid));
    $xml->add_group('codes');
    $productcodes_grouped = array();
    $productcodes_versions = array();
    foreach ($productcodes as $productcode) {
        // have to be careful here, as version numbers are not necessarily unique
        $productcodes_versions["{$productcode['version']}"] = 1;
        $productcodes_grouped["{$productcode['version']}"][] = $productcode;
    }
    $productcodes_versions = array_keys($productcodes_versions);
    usort($productcodes_versions, 'version_sort');
    foreach ($productcodes_versions as $version) {
        foreach ($productcodes_grouped["{$version}"] as $productcode) {
            $xml->add_group('code', array('version' => $productcode['version']));
            $xml->add_tag('installcode', $productcode['installcode']);
            $xml->add_tag('uninstallcode', $productcode['uninstallcode']);
            $xml->close_group();
        }
    }
    $xml->close_group();
    // ############## templates
    $gettemplates = $assertor->assertQuery('template', array('product' => $productid, 'styleid' => -1), 'title');
    $xml->add_group('templates');
    while ($gettemplates and $gettemplates->valid()) {
        $template = $gettemplates->current();
        if (is_newer_version($template['version'], $product_details['version'])) {
            // version in the template is newer than the version of the product,
            // which probably means it's using the vB version
            $template['version'] = $product_details['version'];
        }
        $xml->add_tag('template', $template['templatetype'] == 'template' ? $template['template_un'] : $template['template'], array('name' => htmlspecialchars($template['title']), 'templatetype' => $template['templatetype'], 'date' => $template['dateline'], 'username' => $template['username'], 'version' => htmlspecialchars_uni($template['version'])), true);
        $gettemplates->next();
    }
    $xml->close_group();
    // ############## Stylevars
    $stylevarinfo = get_stylevars_for_export($productid, -1);
    $stylevar_cache = $stylevarinfo['stylevars'];
    $stylevar_dfn_cache = $stylevarinfo['stylevardfns'];
    $xml->add_group('stylevardfns');
    foreach ($stylevar_dfn_cache as $stylevargroupname => $stylevargroup) {
        $xml->add_group('stylevargroup', array('name' => $stylevargroupname));
        foreach ($stylevargroup as $stylevar) {
            $xml->add_tag('stylevar', '', array('name' => htmlspecialchars($stylevar['stylevarid']), 'datatype' => $stylevar['datatype'], 'validation' => base64_encode($stylevar['validation']), 'failsafe' => base64_encode($stylevar['failsafe'])));
        }
        $xml->close_group();
    }
    $xml->close_group();
    $xml->add_group('stylevars');
    foreach ($stylevar_cache as $stylevarid => $stylevar) {
        $xml->add_tag('stylevar', '', array('name' => htmlspecialchars($stylevar['stylevarid']), 'value' => base64_encode($stylevar['value'])));
    }
    $xml->close_group();
    // ############## hooks
    $xml->add_group('hooks');
    $hooks = vB_Api::instanceInternal("Hook")->getHookList(array('hookname'), array('product' => $productid));
    foreach ($hooks as $hook) {
        $xml->add_group('hook');
        $xml->add_tag('hookname', $hook['hookname']);
        $xml->add_tag('title', $hook['title']);
        $xml->add_tag('active', $hook['active']);
        $xml->add_tag('hookorder', $hook['hookorder']);
        $xml->add_tag('template', $hook['template']);
        $xml->add_tag('arguments', $hook['arguments']);
        $xml->close_group();
    }
    $xml->close_group();
    // ############## phrases
    $phrasetypes = vB_Api::instanceInternal('phrase')->fetch_phrasetypes(false);
    $phrases = array();
    $getphrases = $assertor->getRows('vBForum:phrase', array('languageid' => array(-1, 0), 'product' => $productid), array('languageid', 'fieldname', 'varname'));
    foreach ($getphrases as $getphrase) {
        $phrases["{$getphrase['fieldname']}"]["{$getphrase['varname']}"] = $getphrase;
    }
    $xml->add_group('phrases');
    // make sure the phrasegroups are in a reliable order
    ksort($phrases);
    foreach ($phrases as $_fieldname => $typephrases) {
        // create a group for each phrase type that we have phrases for
        // then insert the phrases
        $xml->add_group('phrasetype', array('name' => $phrasetypes["{$_fieldname}"]['title'], 'fieldname' => $_fieldname));
        // make sure the phrases are in a reliable order
        ksort($typephrases);
        foreach ($typephrases as $phrase) {
            $xml->add_tag('phrase', $phrase['text'], array('name' => $phrase['varname'], 'date' => $phrase['dateline'], 'username' => $phrase['username'], 'version' => htmlspecialchars_uni($phrase['version'])), true);
        }
        $xml->close_group();
    }
    $xml->close_group();
    // ############## options
    $setting = array();
    $settinggroup = array();
    $groups = $assertor->getRows('settinggroup', array('volatile' => 1), array('displayorder', 'grouptitle'));
    foreach ($groups as $group) {
        $settinggroup["{$group['grouptitle']}"] = $group;
    }
    ksort($settinggroup);
    $options = $assertor->getRows('setting', array('product' => $productid, 'volatile' => 1), array('displayorder', 'varname'));
    foreach ($options as $row) {
        $setting["{$row['grouptitle']}"][] = $row;
    }
    $xml->add_group('options');
    foreach ($settinggroup as $grouptitle => $group) {
        if (empty($setting["{$grouptitle}"])) {
            continue;
        }
        // add a group for each setting group we have settings for
        $newGroup = array('name' => htmlspecialchars($group['grouptitle']), 'displayorder' => $group['displayorder']);
        if (!empty($group['adminperm'])) {
            $newGroup['adminperm'] = $group['adminperm'];
        }
        $xml->add_group('settinggroup', $newGroup);
        ksort($setting["{$grouptitle}"]);
        foreach ($setting["{$grouptitle}"] as $set) {
            $arr = array('varname' => $set['varname'], 'displayorder' => $set['displayorder']);
            if ($set['advanced']) {
                $arr['advanced'] = 1;
            }
            $xml->add_group('setting', $arr);
            if ($set['datatype']) {
                $xml->add_tag('datatype', $set['datatype']);
            }
            if ($set['optioncode'] != '') {
                $xml->add_tag('optioncode', $set['optioncode']);
            }
            if ($set['validationcode']) {
                $xml->add_tag('validationcode', $set['validationcode']);
            }
            if ($set['defaultvalue'] !== '') {
                $xml->add_tag('defaultvalue', $set['defaultvalue']);
            }
            if ($set['blacklist']) {
                $xml->add_tag('blacklist', 1);
            }
            if ($set['ispublic']) {
                $xml->add_tag('public', 1);
            }
            if ($set['adminperm']) {
                $xml->add_tag('adminperm', $set['adminperm']);
            }
            $xml->close_group();
        }
        $xml->close_group();
    }
    $xml->close_group();
    // ############## admin help
    $help_topics_results = $assertor->getRows('vBForum:adminhelp', array('product' => $productid, 'volatile' => 1), array('script', 'action', 'displayorder', 'optionname'));
    $help_topics = array();
    foreach ($help_topics_results as $help_topic) {
        $help_topics["{$help_topic['script']}"][] = $help_topic;
    }
    ksort($help_topics);
    $xml->add_group('helptopics');
    foreach ($help_topics as $script => $script_topics) {
        $xml->add_group('helpscript', array('name' => $script));
        foreach ($script_topics as $topic) {
            $attr = array('disp' => $topic['displayorder']);
            if ($topic['action']) {
                $attr['act'] = $topic['action'];
            }
            if ($topic['optionname']) {
                $attr['opt'] = $topic['optionname'];
            }
            $xml->add_tag('helptopic', '', $attr);
        }
        $xml->close_group();
    }
    $xml->close_group();
    // ############## Cron entries
    $cron_results = $assertor->getRows('cron', array(vB_dB_Query::CONDITIONS_KEY => array(array('field' => 'product', 'value' => $productid, vB_dB_Query::OPERATOR_KEY => vB_dB_Query::OPERATOR_EQ), array('field' => 'volatile', 'value' => 1, vB_dB_Query::OPERATOR_KEY => vB_dB_Query::OPERATOR_EQ), array('field' => 'varname', 'value' => '', vB_dB_Query::OPERATOR_KEY => vB_dB_Query::OPERATOR_NE))));
    $xml->add_group('cronentries');
    foreach ($cron_results as $cron) {
        $minutes = unserialize($cron['minute']);
        if (!is_array($minutes)) {
            $minutes = array();
        }
        $xml->add_group('cron', array('varname' => $cron['varname'], 'active' => $cron['active'], 'loglevel' => $cron['loglevel']));
        $xml->add_tag('filename', $cron['filename']);
        $xml->add_tag('scheduling', '', array('weekday' => $cron['weekday'], 'day' => $cron['day'], 'hour' => $cron['hour'], 'minute' => implode(',', $minutes)));
        $xml->close_group();
    }
    $xml->close_group();
    $faq_results = $assertor->getRows('vBForum:faq', array('product' => $productid, 'volatile' => 1), 'faqname');
    $xml->add_group('faqentries');
    foreach ($faq_results as $faq) {
        $xml->add_tag('faq', '', array('faqname' => $faq['faqname'], 'faqparent' => $faq['faqparent'], 'displayorder' => $faq['displayorder']));
    }
    $xml->close_group();
    // ############## widgets
    $widgetExporter = new vB_Xml_Export_Widget($productid);
    $widgetExporter->getXml($xml);
    // ############## pagetemplates
    $pageTemplateExporter = new vB_Xml_Export_PageTemplate($productid);
    $pageTemplateExporter->getXml($xml);
    // ############## pages
    $pageExporter = new vB_Xml_Export_Page($productid);
    $pageExporter->getXml($xml);
    // ############## channels
    $channelExporter = new vB_Xml_Export_Channel($productid);
    $channelExporter->getXml($xml);
    // ############## routes
    $routeExporter = new vB_Xml_Export_Route($productid);
    $routeExporter->getXml($xml);
    // ############## Finish up
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n" . $xml->output();
    unset($xml);
    return $doc;
}
 protected function get_product_template_xml($templates)
 {
     uksort($templates, "strnatcasecmp");
     $xml = new vB_XML_Builder(null, 'ISO-8859-1');
     $xml->add_group('temp');
     $xml->add_group('templates');
     foreach ($templates as $name => $template) {
         $xml->add_tag('template', $template['value'], array('name' => htmlspecialchars($name), 'templatetype' => 'template', 'date' => $template['lastupdated'], 'username' => $template['username'], 'version' => htmlspecialchars_uni($template['version'])), true);
     }
     $xml->close_group();
     $xml->close_group();
     $text = $xml->fetch_xml();
     unset($xml);
     return substr($text, strpos($text, '<temp>') + strlen("<temp>"), -1 * strlen('</temp>\\n'));
 }
Esempio n. 18
0
 $phrasetypes = fetch_phrasetypes_array(false);
 $phrases = array();
 $getphrases = $db->query_read("\n\t\tSELECT phrase.varname, phrase.text, phrase.fieldname, phrase.languageid,\n\t\t\tphrase.username, phrase.dateline, phrase.version\n\t\t\t" . ($vbulletin->GPC['dolanguageid'] != -1 ? ", IF(ISNULL(phrase2.phraseid), 1, 0) AS iscustom" : "") . "\n\t\tFROM " . TABLE_PREFIX . "phrase AS phrase\n\t\t" . ($vbulletin->GPC['dolanguageid'] != -1 ? "LEFT JOIN " . TABLE_PREFIX . "phrase AS phrase2 ON (phrase.varname = phrase2.varname AND phrase2.languageid = -1 AND phrase.fieldname = phrase2.fieldname)" : "") . "\n\t\tWHERE phrase.languageid IN (" . $vbulletin->GPC['dolanguageid'] . ($vbulletin->GPC['custom'] ? ", 0" : "") . ")\n\t\t\tAND (phrase.product = '" . $db->escape_string($vbulletin->GPC['product']) . "'" . iif($vbulletin->GPC['product'] == 'vbulletin', " OR phrase.product = ''") . ")\n\t\t\t" . (($vbulletin->GPC['dolanguageid'] == -1 and !empty($default_skipped_groups)) ? "AND fieldname NOT IN ('" . implode("', '", $default_skipped_groups) . "')" : '') . "\n\t\tORDER BY phrase.languageid, phrase.fieldname, phrase.varname\n\t");
 while ($getphrase = $db->fetch_array($getphrases)) {
     if (!$vbulletin->GPC['custom'] and $getphrase['iscustom']) {
         continue;
     }
     $phrases["{$getphrase['fieldname']}"]["{$getphrase['varname']}"] = $getphrase;
 }
 unset($getphrase);
 $db->free_result($getphrases);
 if (empty($phrases) and $vbulletin->GPC['just_phrases']) {
     print_stop_message('download_contains_no_customizations');
 }
 require_once DIR . '/includes/class_xml.php';
 $xml = new vB_XML_Builder($vbulletin);
 $xml->add_group('language', array('name' => $title, 'vbversion' => $version, 'product' => $vbulletin->GPC['product'], 'type' => iif($vbulletin->GPC['dolanguageid'] == -1, 'master', iif($vbulletin->GPC['just_phrases'], 'phrases', 'custom'))));
 if ($vbulletin->GPC['dolanguageid'] != -1 and !$vbulletin->GPC['just_phrases']) {
     $xml->add_group('settings');
     $ignorefields = array('languageid', 'title', 'userselect');
     foreach ($language as $fieldname => $value) {
         if (substr($fieldname, 0, 12) != 'phrasegroup_' and !in_array($fieldname, $ignorefields)) {
             $xml->add_tag($fieldname, $value, array(), true);
         }
     }
     $xml->close_group();
 }
 if ($vbulletin->GPC['dolanguageid'] == -1 and !empty($default_skipped_groups)) {
     $xml->add_group('skippedgroups');
     foreach ($default_skipped_groups as $skipped_group) {
         $xml->add_tag('skippedgroup', $skipped_group);
Esempio n. 19
0
function get_language_export_xml($languageid, $product, $custom, $just_phrases, $charset = 'ISO-8859-1')
{
    global $vbulletin;
    //moved here from the top of language.php
    $default_skipped_groups = array('cphelptext');
    if ($languageid == -1) {
        //		$language['title'] = $vbphrase['master_language'];
        $language['title'] = new vB_Phrase('language', 'master_language');
    } else {
        $language = $vbulletin->db->query_first("\n\t\t\tSELECT *\n\t\t\tFROM " . TABLE_PREFIX . "language\n\t\t\tWHERE languageid = " . $languageid);
    }
    $title = str_replace('"', '\\"', $language['title']);
    $version = str_replace('"', '\\"', $vbulletin->options['templateversion']);
    $phrasetypes = fetch_phrasetypes_array(false);
    $phrases = array();
    $getphrases = $vbulletin->db->query_read("\n\t\tSELECT phrase.varname, phrase.text, phrase.fieldname, phrase.languageid,\n\t\t\tphrase.username, phrase.dateline, phrase.version\n\t\t\t" . ($languageid != -1 ? ", IF(ISNULL(phrase2.phraseid), 1, 0) AS iscustom" : "") . "\n\t\tFROM " . TABLE_PREFIX . "phrase AS phrase\n\t\t" . ($languageid != -1 ? "LEFT JOIN " . TABLE_PREFIX . "phrase AS phrase2 ON (phrase.varname = phrase2.varname AND phrase2.languageid = -1 AND phrase.fieldname = phrase2.fieldname)" : "") . "\n\t\tWHERE phrase.languageid IN (" . $languageid . ($custom ? ", 0" : "") . ")\n\t\t\tAND (phrase.product = '" . $vbulletin->db->escape_string($product) . "'" . iif($product == 'vbulletin', " OR phrase.product = ''") . ")\n\t\t\t" . (($languageid == -1 and !empty($default_skipped_groups)) ? "AND fieldname NOT IN ('" . implode("', '", $default_skipped_groups) . "')" : '') . "\n\t\tORDER BY phrase.languageid, phrase.fieldname, phrase.varname\n\t");
    while ($getphrase = $vbulletin->db->fetch_array($getphrases)) {
        if (!$custom and $getphrase['iscustom']) {
            continue;
        }
        $phrases["{$getphrase['fieldname']}"]["{$getphrase['varname']}"] = $getphrase;
    }
    unset($getphrase);
    $vbulletin->db->free_result($getphrases);
    if (empty($phrases) and $just_phrases) {
        throw new vB_Exception_AdminStopMessage('download_contains_no_customizations');
    }
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin, null, $charset);
    $xml->add_group('language', array('name' => $title, 'vbversion' => $version, 'product' => $product, 'type' => iif($languageid == -1, 'master', iif($just_phrases, 'phrases', 'custom'))));
    if ($languageid != -1 and !$just_phrases) {
        $xml->add_group('settings');
        $ignorefields = array('languageid', 'title', 'userselect');
        foreach ($language as $fieldname => $value) {
            if (substr($fieldname, 0, 12) != 'phrasegroup_' and !in_array($fieldname, $ignorefields)) {
                $xml->add_tag($fieldname, $value, array(), true);
            }
        }
        $xml->close_group();
    }
    if ($languageid == -1 and !empty($default_skipped_groups)) {
        $xml->add_group('skippedgroups');
        foreach ($default_skipped_groups as $skipped_group) {
            $xml->add_tag('skippedgroup', $skipped_group);
        }
        $xml->close_group();
    }
    foreach ($phrases as $_fieldname => $typephrases) {
        $xml->add_group('phrasetype', array('name' => $phrasetypes["{$_fieldname}"]['title'], 'fieldname' => $_fieldname));
        foreach ($typephrases as $phrase) {
            $attributes = array('name' => $phrase['varname']);
            if ($phrase['dateline']) {
                $attributes['date'] = $phrase['dateline'];
            }
            if ($phrase['username']) {
                $attributes['username'] = $phrase['username'];
            }
            if ($phrase['version']) {
                $attributes['version'] = htmlspecialchars_uni($phrase['version']);
            }
            if ($custom and $phrase['languageid'] == 0) {
                $attributes['custom'] = 1;
            }
            $xml->add_tag('phrase', $phrase['text'], $attributes, true);
        }
        $xml->close_group();
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"{$charset}\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    return $doc;
}
Esempio n. 20
0
 protected function getCartXml($hash, $cost, $currency, $subinfo)
 {
     $phrases = array('sub' . $subinfo['subscriptionid'] . '_title', 'sub' . $subinfo['subscriptionid'] . '_desc');
     $vbphrase = vB_Api::instanceInternal('phrase')->fetch($phrases);
     $xml = new vB_XML_Builder();
     $xml->add_group('checkout-shopping-cart', array('xmlns' => 'http://checkout.google.com/schema/2'));
     $xml->add_group('shopping-cart');
     $xml->add_group('items');
     $xml->add_group('item');
     $xml->add_tag('merchant-item-id', $hash);
     $xml->add_tag('item-name', $vbphrase['sub' . $subinfo['subscriptionid'] . '_title']);
     $xml->add_tag('item-description', $vbphrase['sub' . $subinfo['subscriptionid'] . '_desc']);
     if (!$subinfo['newoptions']['api']['google']['tax']) {
         $xml->add_tag('tax-table-selector', 'tax_exempt');
     }
     $xml->add_tag('unit-price', $cost, array('currency' => strtoupper($currency)));
     $xml->add_tag('quantity', 1);
     $xml->add_group('digital-content');
     $xml->add_tag('display-disposition', 'PESSIMISTIC');
     $xml->add_tag('description', $subinfo['newoptions']['api']['google']['message']);
     $xml->close_group('digital-content');
     $xml->close_group('item');
     $xml->close_group('items');
     $xml->close_group('shopping-cart');
     $xml->close_group('checkout-shopping-cart');
     return $xml->fetch_xml();
 }
 if (sizeof($items)) {
     foreach ($items as $key => $value) {
         if ($value) {
             $ids .= ($ids ? "," : "") . $key;
         }
     }
     $results = $db->query_read_slave("SELECT * FROM " . TABLE_PREFIX . "bbcode_video WHERE providerid IN ({$ids})");
     while ($result = $db->fetch_array($results)) {
         $data["{$result['providerid']}"] = $result;
     }
 } else {
     die("No items in doexport!");
 }
 if (sizeof($data)) {
     require_once DIR . '/includes/class_xml.php';
     $xml = new vB_XML_Builder($vbulletin);
     $xml->add_group("AME3");
     foreach ($data as $key => $value) {
         $xml->add_group("def");
         foreach ($value as $columnname => $columnvalue) {
             $xml->add_tag($columnname, $columnvalue);
         }
         $xml->close_group();
     }
     $xml->close_group();
     // ############## Finish up
     $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n" . $xml->output();
     unset($xml);
     require_once DIR . '/includes/functions_file.php';
     file_download($doc, "AME.xml", 'text/xml');
     exit;
Esempio n. 22
0
 public function generateStyle($scheme, $type, $parentid, $title, $displayorder = 1, $userselect = false)
 {
     if (!vB::getUserContext()->hasAdminPermission('canadminstyles')) {
         throw new vB_Exception_Api('no_permission');
     }
     define('NO_IMPORT_DOTS', true);
     $merge = $scheme['primary'];
     if (!empty($scheme['secondary'])) {
         $merge = array_merge($merge, $scheme['secondary']);
     }
     if (!empty($scheme['complement'])) {
         $merge = array_merge($merge, $scheme['complement']);
     }
     foreach ($merge as $val) {
         $hex[] = $val['hex'];
     }
     switch ($type) {
         case 'lps':
             // Color : Primary and Secondary
             $sample_file = "style_generator_sample_light.xml";
             break;
         case 'lpt':
             // White : Similar to the current style
             $sample_file = "style_generator_sample_white.xml";
             break;
         case 'gry':
             // Grey :: Primary 3 and Primary 4 only
             $sample_file = "style_generator_sample_gray.xml";
             break;
         case 'drk':
             // Dark : Primary 3 and Primary 4 only
         // Dark : Primary 3 and Primary 4 only
         default:
             // Dark : Default to Dark
             $sample_file = "style_generator_sample_dark.xml";
             break;
     }
     $xmlobj = new vB_XML_Parser(false, DIR . '/includes/xml/' . $sample_file);
     $styledata = $xmlobj->parse();
     if ($title === '') {
         $title = 'Style ' . time();
     }
     $xml = new vB_XML_Builder();
     $xml->add_group('style', array('name' => $title, 'vbversion' => vB::getDatastore()->getOption('templateversion'), 'product' => 'vbulletin', 'type' => 'custom'));
     $xml->add_group('stylevars');
     foreach ($styledata['stylevars']['stylevar'] as $stylevars) {
         // The XML Parser outputs 2 values for the value field when one is set as an attribute.
         // The work around for now is to specify the first value (the attribute). In reality
         // the parser shouldn't add a blank 'value' if it exists as an attribute.
         if (!empty($stylevars['colCat'])) {
             list($group, $nr) = explode('-', $stylevars['colCat']);
             $group = $group == 'sec' ? 'secondary' : 'primary';
             $stylevars['value'] = '{"color":"#' . $scheme[$group][$nr]['hex'] . '"}';
         }
         $thisValue = json_decode($stylevars['value'], true);
         if (strpos($stylevars['name'], '_border') !== false) {
             // @todo, make this inherit the border style & width from the default style?
             $thisValue['width'] = 1;
             $thisValue['units'] = 'px';
             $thisValue['style'] = 'solid';
         }
         $xml->add_tag('stylevar', '', array('name' => htmlspecialchars($stylevars['name']), 'value' => base64_encode(serialize($thisValue))));
     }
     // Close stylevar group
     $xml->close_group();
     // Close style group
     $xml->close_group();
     $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
     $doc .= $xml->output();
     $xml = null;
     $imported = $this->library->importStyleFromXML($doc, $title, $parentid, -1, true, $displayorder, $userselect, true);
     $this->buildAllStyles();
     //xml_import_style($doc, -1, $parentid, $title, $anyversion, $displayorder, $userselect, null, null, true);
     return $imported;
 }
Esempio n. 23
0
 public function getXml(vB_XML_Builder &$xml = NULL)
 {
     if (empty($xml)) {
         $xml = new vB_XML_Builder();
         $returnString = TRUE;
     } else {
         $returnString = FALSE;
     }
     $xml->add_group('channels');
     $channelTable = $this->db->fetchTableStructure('vbforum:channel');
     $channelTableColumns = array_diff($channelTable['structure'], array('guid', $channelTable['key']));
     $nodeTable = $this->db->fetchTableStructure('vbforum:node');
     $nodeTableColumns = array_diff($nodeTable['structure'], array($nodeTable['key']), $this->nonExportableFields);
     $channels = $this->db->assertQuery('vbforum:getChannelInfoExport', array('productid' => $this->productid));
     if (!empty($channels)) {
         foreach ($channels as $channel) {
             $xml->add_group('channel', array('guid' => $channel['guid']));
             foreach ($channelTableColumns as $column) {
                 if ($channel[$column] != NULL) {
                     $xml->add_tag($column, $channel[$column]);
                 }
             }
             $xml->add_group('node');
             foreach ($nodeTableColumns as $column) {
                 if ($channel[$column] != NULL) {
                     $xml->add_tag($column, $channel[$column]);
                 }
             }
             $xml->add_tag('routeguid', $channel['routeguid']);
             $xml->add_tag('parentguid', $channel['parentguid']);
             $xml->close_group();
             $xml->close_group();
         }
     }
     $xml->close_group();
     if ($returnString) {
         return $xml->fetch_xml();
     }
 }
Esempio n. 24
0
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    require_once DIR . '/includes/functions_file.php';
    file_download($doc, 'vbulletin-settings.xml', 'text/xml');
}
// ###################### Start product XML backup #######################
if ($_REQUEST['do'] == 'backup') {
    $vbulletin->input->clean_array_gpc('r', array('product' => TYPE_STR, 'blacklist' => TYPE_BOOL));
    $setting = array();
    $product = $vbulletin->GPC['product'];
    if (empty($product)) {
        $product = 'vbulletin';
    }
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin);
    $xml->add_group('settings', array('product' => $product));
    $sets = $db->query_read("\n\t\tSELECT varname, value\n\t\tFROM " . TABLE_PREFIX . "setting\n\t\tWHERE (product = '" . $db->escape_string($product) . "'" . iif($product == 'vbulletin', " OR product = ''") . ")\n\t\t" . ($vbulletin->GPC['blacklist'] ? "AND blacklist = 0" : "") . "\n\t\tORDER BY displayorder\n\t");
    while ($set = $db->fetch_array($sets)) {
        $arr = array('varname' => $set['varname']);
        $xml->add_group('setting', $arr);
        if ($set['value'] != '') {
            $xml->add_tag('value', $set['value']);
        }
        $xml->close_group();
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    require_once DIR . '/includes/functions_file.php';
Esempio n. 25
0
 public function getXml(vB_XML_Builder &$xml = NULL)
 {
     if (empty($xml)) {
         $xml = new vB_XML_Builder();
         $returnString = TRUE;
     } else {
         $returnString = FALSE;
     }
     $xml->add_group('widgets');
     $widgetTable = $this->db->fetchTableStructure('widget');
     $widgetTableColumns = array_diff($widgetTable['structure'], array('guid', $widgetTable['key']));
     $widgets = $this->db->assertQuery('widget', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, vB_dB_Query::CONDITIONS_KEY => array('product' => $this->productid)));
     // parent widget guid lookup table
     $widgetGuidInfo = $this->db->assertQuery('widget', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, vB_dB_Query::COLUMNS_KEY => array('widgetid', 'guid')));
     $widgetIdToGuid = array();
     foreach ($widgetGuidInfo as $one) {
         $widgetIdToGuid[$one['widgetid']] = $one['guid'];
     }
     unset($widgetGuidInfo, $one);
     if (!empty($widgets)) {
         foreach ($widgets as $widget) {
             unset($widget['title']);
             $widgetInfo[$widget[$widgetTable['key']]] = $widget;
         }
         if (!empty($widgetInfo)) {
             $widgetDefinitions = $this->db->assertQuery('widgetdefinition', array('widgetid' => array_keys($widgetInfo)));
             if (!empty($widgetDefinitions)) {
                 $definitionTable = $this->db->fetchTableStructure('widgetdefinition');
                 $definitionTableColumns = array_diff($definitionTable['structure'], array('guid', $widgetTable['key'], $definitionTable['key']));
                 foreach ($widgetDefinitions as $widgetDefinition) {
                     unset($widgetDefinition['label']);
                     $widgetInfo[$widgetDefinition[$widgetTable['key']]]['definitions'][] = $widgetDefinition;
                 }
             }
             foreach ($widgetInfo as $widget) {
                 $xml->add_group('widget', array('guid' => $widget['guid']));
                 foreach ($widgetTableColumns as $column) {
                     if ($widget[$column] != NULL) {
                         // special case parentid and change it to parentguid
                         if ($column == 'parentid') {
                             if ($widget[$column] > 0 and !empty($widgetIdToGuid[$widget[$column]])) {
                                 $xml->add_tag('parentguid', $widgetIdToGuid[$widget[$column]]);
                             }
                         } else {
                             $xml->add_tag($column, $widget[$column]);
                         }
                     }
                 }
                 if (isset($widget['definitions']) and !empty($widget['definitions'])) {
                     $xml->add_group('definitions');
                     foreach ($widget['definitions'] as $definition) {
                         $xml->add_group('definition');
                         foreach ($definitionTableColumns as $column) {
                             if ($definition[$column] != NULL) {
                                 $xml->add_tag($column, $definition[$column]);
                             }
                         }
                         $xml->close_group();
                     }
                     $xml->close_group();
                 }
                 $xml->close_group();
             }
         }
     }
     $xml->close_group();
     if ($returnString) {
         return $xml->fetch_xml();
     }
 }
Esempio n. 26
0
// #############################################################################
if ($_POST['do'] == 'download')
{
	$vbulletin->input->clean_array_gpc('p', array(
		'filename' => TYPE_STR,
		'download' => TYPE_ARRAY_UINT,
	));

	if (empty($vbulletin->GPC['download']) OR empty($vbulletin->GPC['filename']))
	{
		print_stop_message('please_complete_required_fields');
	}

	require_once(DIR . '/includes/class_xml.php');
	$xml = new vB_XML_Builder($vbulletin);
	$xml->add_group('plugins');

	$plugins = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "plugin WHERE pluginid IN (" . implode(', ', $vbulletin->GPC['download']) . ")");
	while ($plugin = $db->fetch_array($plugins))
	{
		$params = array('active' => $plugin['active'], 'executionorder' => $plugin['executionorder']);
		if ($plugin['product'])
		{
			$params['product'] = $plugin['product'];
		}

		$xml->add_group('plugin', $params);

		$xml->add_tag('title', $plugin['title']);
		$xml->add_tag('hookname', $plugin['hookname']);
Esempio n. 27
0
 function fetch_xml($url)
 {
     $xml_string =& fetch_file_via_socket($url);
     if ($xml_string === false or empty($xml_string['body'])) {
         // error returned
         if (VB_AREA == 'AdminCP') {
             trigger_error('Unable to fetch RSS Feed', E_USER_WARNING);
         }
     }
     $xml_string = $xml_string['body'];
     // There are some RSS feeds that embed (HTML) tags within the description without
     // CDATA. While this is actually invalid, try to workaround it by wrapping the
     // contents in CDATA if it contains a < and is not in CDATA already.
     // This must be done before parsing because our parser can't handle the output.
     if (preg_match_all('#(<description>)(.*)(</description>)#siU', $xml_string, $matches, PREG_SET_ORDER)) {
         foreach ($matches as $match) {
             if (strpos(strtoupper($match[2]), '<![CDATA[') === false and strpos($match[2], '<') !== false) {
                 // no CDATA tag, but we have an HTML tag
                 $output = $match[1] . '<![CDATA[' . vB_XML_Builder::escape_cdata($match[2]) . ']]>' . $match[3];
                 $xml_string = str_replace($match[0], $output, $xml_string);
             }
         }
     }
     $this->set_xml_string($xml_string);
     return true;
 }
Esempio n. 28
0
	}

	if ($db->query_first("
		SELECT * FROM " . TABLE_PREFIX . "cms_grid
		WHERE
			title = '" . $db->escape_string($vbulletin->GPC['title']) . "'
			$wheresql
	"))
	{
		print_stop_message('grid_title_already_in_use');
	}


	$columnid = 1;
	require_once(DIR . '/includes/class_xml.php');
	$xml = new vB_XML_Builder($vbulletin);
	if ($vbulletin->GPC['addcolumn'])
	{
		$side = "l";
		if ($vbulletin->GPC['addcolumnsnap'] == 1)
		{
			$side = "r";
		}
		$docclass = "yui-tvb-" . $side . $vbulletin->GPC['addcolumnsize'];	// yui-tvb-(l|r)(1-4)
	}
	$xml->add_group('div', $docclass ? array('id' => 'doc3', 'class' => $docclass) : array('id' => 'doc3'));  // #doc
	if ($vbulletin->GPC['auxheader'])
	{
		$xml->add_group('div', array('id' => 'hd'));
		$xml->add_group('div', array('class' => 'yui-u yui-header'));
		$xml->add_tag('ul', '$' . 'column[' . $columnid . ']', array('class' => 'list_no_decoration widget_list', 'id' => 'widgetlist_column' . $columnid));
Esempio n. 29
0
function get_help_export_xml($product)
{
    global $vbulletin;
    if ($product == 'vbulletin') {
        $product_sql = "product IN ('vbulletin', '')";
    } else {
        $product_sql = "product = '" . $vbulletin->db->escape_string($product) . "'";
    }
    // query topics
    $helptopics = array();
    $phrase_names = array();
    $topics = $vbulletin->db->query_read("\n\t\tSELECT adminhelp.*\n\t\tFROM " . TABLE_PREFIX . "adminhelp AS adminhelp\n\t\tWHERE adminhelp.volatile = 1\n\t\t\tAND adminhelp.{$product_sql}\n\t\tORDER BY adminhelp.script, adminhelp.action, adminhelp.displayorder, adminhelp.optionname\n\t");
    while ($topic = $vbulletin->db->fetch_array($topics)) {
        $topic['phrase_name'] = fetch_help_phrase_short_name($topic);
        $phrase_names[] = $vbulletin->db->escape_string($topic['phrase_name'] . '_title');
        $phrase_names[] = $vbulletin->db->escape_string($topic['phrase_name'] . '_text');
        $helptopics["{$topic['script']}"][] = $topic;
    }
    unset($topic);
    $vbulletin->db->free_result($topics);
    $phrases = array();
    $phrase_results = $vbulletin->db->query_read("\n\t\tSELECT *\n\t\tFROM " . TABLE_PREFIX . "phrase\n\t\tWHERE languageid = -1\n\t\t\tAND varname IN ('" . implode("', '", $phrase_names) . "')\n\t");
    while ($phrase = $vbulletin->db->fetch_array($phrase_results)) {
        $phrases["{$phrase['varname']}"] = $phrase;
    }
    require_once DIR . '/includes/class_xml.php';
    $xml = new vB_XML_Builder($vbulletin);
    $version = str_replace('"', '\\"', $vbulletin->options['templateversion']);
    $xml->add_group('helptopics', array('vbversion' => $version, 'product' => $product, 'hasphrases' => 1));
    ksort($helptopics);
    foreach ($helptopics as $script => $scripttopics) {
        $xml->add_group('helpscript', array('name' => $script));
        foreach ($scripttopics as $topic) {
            $attr = array('disp' => $topic['displayorder']);
            if ($topic['action']) {
                $attr['act'] = $topic['action'];
            }
            if ($topic['optionname']) {
                $attr['opt'] = $topic['optionname'];
            }
            $title =& $phrases[$topic['phrase_name'] . '_title'];
            $text =& $phrases[$topic['phrase_name'] . '_text'];
            if (!empty($title) or !empty($text)) {
                $xml->add_group('helptopic', $attr);
                $title_attributes = array('date' => $title['dateline'], 'username' => $title['username'], 'version' => htmlspecialchars_uni($title['version']));
                $xml->add_tag('title', $title['text'], $title_attributes);
                $text_attributes = array('date' => $text['dateline'], 'username' => $text['username'], 'version' => htmlspecialchars_uni($text['version']));
                $xml->add_tag('text', $text['text'], $text_attributes);
                $xml->close_group();
            } else {
                $xml->add_tag('helptopic', '', $attr);
            }
        }
        $xml->close_group();
    }
    $xml->close_group();
    $doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n";
    $doc .= $xml->output();
    $xml = null;
    return $doc;
}
Esempio n. 30
0
 $topics = $db->query_read("\n\t\tSELECT adminhelp.*\n\t\tFROM " . TABLE_PREFIX . "adminhelp AS adminhelp\n\t\tWHERE adminhelp.volatile = 1\n\t\t\tAND adminhelp.{$product_sql}\n\t\tORDER BY adminhelp.script, adminhelp.action, adminhelp.displayorder, adminhelp.optionname\n\t");
 while ($topic = $db->fetch_array($topics)) {
     $topic['phrase_name'] = fetch_help_phrase_short_name($topic);
     $phrase_names[] = $db->escape_string($topic['phrase_name'] . '_title');
     $phrase_names[] = $db->escape_string($topic['phrase_name'] . '_text');
     $helptopics["{$topic['script']}"][] = $topic;
 }
 unset($topic);
 $db->free_result($topics);
 $phrases = array();
 $phrase_results = $db->query_read("\n\t\tSELECT *\n\t\tFROM " . TABLE_PREFIX . "phrase\n\t\tWHERE languageid = -1\n\t\t\tAND varname IN ('" . implode("', '", $phrase_names) . "')\n\t");
 while ($phrase = $db->fetch_array($phrase_results)) {
     $phrases["{$phrase['varname']}"] = $phrase;
 }
 require_once DIR . '/includes/class_xml.php';
 $xml = new vB_XML_Builder($vbulletin);
 $version = str_replace('"', '\\"', $vbulletin->options['templateversion']);
 $xml->add_group('helptopics', array('vbversion' => $version, 'product' => $vbulletin->GPC['product'], 'hasphrases' => 1));
 ksort($helptopics);
 foreach ($helptopics as $script => $scripttopics) {
     $xml->add_group('helpscript', array('name' => $script));
     foreach ($scripttopics as $topic) {
         $attr = array('disp' => $topic['displayorder']);
         if ($topic['action']) {
             $attr['act'] = $topic['action'];
         }
         if ($topic['optionname']) {
             $attr['opt'] = $topic['optionname'];
         }
         $title =& $phrases[$topic['phrase_name'] . '_title'];
         $text =& $phrases[$topic['phrase_name'] . '_text'];