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(); } }
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(); } }
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(); }
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(); } }
/** * 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&goto=template.php?" . $vbulletin->session->vars['sessionurl']); }
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); }
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(); } }
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; } else {
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')); $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'] . '/', array(), false, true); $xml->close_group('image'); if ($podcastinfo['subtitle'])
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; }
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; }
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 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(); }
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()); $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', $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'], array(), false, true); $xml->close_group('image'); if ($podcastinfo['subtitle']) {
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(); } }
// 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); $xml->close_group('image'); require_once DIR . '/includes/class_bbcode_alt.php';
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')); }
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; }
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; }
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; }
$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); }
$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'; file_download($doc, 'vbulletin-settings.xml', 'text/xml');
$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'); } // #############################################################################
// ############################################################################# 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']); $xml->add_tag('phpcode', $plugin['phpcode']);
} } // ############################################################################# 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']); $xml->add_tag('versioncheckurl', $product_details['versioncheckurl']); ($hook = vBulletinHook::fetch_hook('admin_product_export')) ? eval($hook) : false; // ############## dependencies $product_dependencies = $db->query_read("\r\n\t\tSELECT *\r\n\t\tFROM " . TABLE_PREFIX . "productdependency\r\n\t\tWHERE productid = '" . $db->escape_string($vbulletin->GPC['productid']) . "'\r\n\t\tORDER BY dependencytype, parentproductid, minversion\r\n\t"); $xml->add_group('dependencies'); while ($product_dependency = $db->fetch_array($product_dependencies)) { $deps = array('dependencytype' => $product_dependency['dependencytype']); if ($product_dependency['dependencytype'] == 'product') { $deps['parentproductid'] = $product_dependency['parentproductid']; }
} $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)); $columnid++; $xml->close_group(); $xml->close_group(); } $xml->add_group('div', array('id' => 'bd')); // #bd if ($vbulletin->GPC['addcolumn']) { $xml->add_group('div', array('id' => 'yui-main')); // #yui-main $xml->add_group('div', array('class' => 'yui-b'));
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; }
$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']; if (!empty($title) or !empty($text)) { $xml->add_group('helptopic', $attr);