query("DELETE FROM ".$canvas->main." WHERE block_id = '$block_id'"); if($variables = $wpdb->get_results("SELECT variable_id, type FROM ".$canvas->variables." WHERE parent = '$block_id'")) { foreach($variables as $variable) { $wpdb->query("DELETE FROM ".$canvas->variables." WHERE parent = '$block_id'"); if($variable->type == 'Radio' || $variable->type == 'Image' || $variable->type == 'Select') $wpdb->query("DELETE FROM ".$canvas->options." WHERE var_id = '".$variable->variable_id."'"); } } } function canvas_delete_block_by_mod_ID($customWriteModuleId) { global $wpdb, $canvas; if ($blocks = $wpdb->get_results("SELECT block_id FROM ".$canvas->main." WHERE module_id = ".$customWriteModuleId)){ foreach($blocks as $block) canvas_delete_block($block->block_id); } } function canvas_import_form() { ?>

Import from XML

If you're using a correctly built Canvas-compatible theme, you can import layout schemes from other users.

Cancel

Canvas can load layout and Canvas plugin data through a special XML file. To import a layout, be sure to use an XML file for the theme that you are currently working with.

Importing from XML is still experimental, and may result in loss of Canvas-related data.

"."[[:space:]]+"."<","><",$data); $data = eregi_replace(">"."[[:space:]]+",">",$data); $data = eregi_replace("[[:space:]]+"."<","<",$data); if (!xml_parse($xmlparser, $data, feof($fp))) $error = "XML error parsing ".$filename; } xml_parser_free($xmlparser); $block_ids = $wpdb->get_results("SELECT block_id FROM ".$canvas->main." WHERE theme = '".get_option('template')."'"); foreach($block_ids as $block_id) { canvas_delete_block($block_id->block_id); } canvas_install(); // clean install foreach($imported_blocks as $key => $block) { $old_block = $wpdb->get_results("SELECT block_id, zone FROM ".$canvas->main." WHERE ubi = '".$block['ubi']."'"); $old_block = $old_block[0]; //if($old_block->zone != 'shelf') $old_block = canvas_duplicate_block($old_block->block_id); $wpdb->query("UPDATE ".$canvas->main." SET zone = '".$block['zone']."', position = '".$block['position']."' WHERE block_id = '".$old_block->block_id."'"); if($imported_variables && $block['type'] == 'plugin') { foreach($imported_variables[$key] as $variables) { $wpdb->query("UPDATE ".$canvas->variables." SET value = '".addslashes($variables['value'])."' WHERE variable_name = '".addslashes($variables['name'])."' AND parent = '".$old_block->block_id."'"); } } } } function canvas_import_plugin($moduleID, $filename, $position, $modTitle, $template_page, $duplicate_id, $block_id = -1) { global $wpdb, $canvas; if(substr($filename, -13) == 'configure.xml') { $plugin = canvas_get_plugin($filename, $modTitle); $path = $plugin->functionPath; list($plugin_id, $position) = canvas_install_plugin_data($moduleID, $plugin, $position, $template_page, $duplicate_id, $block_id); if (!empty($plugin->variables)) { // Import or update variables foreach($plugin->variables as $variable) { //$name = $path.'_'.str_replace(array(' ','.'), '_', addslashes($variable['name'])); $name = str_replace(array(' ','.'), '_', addslashes($variable['name'])); $type = $variable['type']; $default = addslashes($variable['default']); $description = addslashes($variable['description']); $options = $variable['option']; canvas_install_variable_data($name, $plugin_id, $type, $default, $description, $options); } } // Delete obselete variables $blockVars = $wpdb->get_results("SELECT * FROM ".$canvas->variables." WHERE parent = '$plugin_id'"); foreach($blockVars as $blockVar){ $found = false; if (!empty($plugin->variables)){ foreach($plugin->variables as $variable) { //$name = $path.'_'.str_replace(array(' ','.'), '_', addslashes($variable['name'])); $name = str_replace(array(' ','.'), '_', addslashes($variable['name'])); if ($name == $blockVar->variable_name) $found = true; } } if (!$found){ $wpdb->query("DELETE FROM ".$canvas->variables." WHERE variable_id = ". $blockVar->variable_id); } } } return $plugin; } function get_template_pages($template) { $result = array(); $filename = ABSPATH.'/wp-content/themes/'.$template.'/canvas.php'; if(file_exists($filename)) { $file_data = implode('', file($filename)); preg_match_all("||", $file_data, $pages); if(!empty($pages[2])) { foreach($pages[2] as $page) { list($page_name, $id) = split('\s*\|\s*',$page); $result[] = trim($id); } } } return $result; } function canvas_import_plugins($position, $dir='') { global $wpdb, $canvas; include_once "RCCWP_Application.php"; $customModules = RCCWP_CustomWriteModule::GetCustomModules(); $currDuplicates = $wpdb->get_results("SELECT * FROM ".$canvas->duplicates); $template = get_option('template'); $template_pages = get_template_pages($template); $currModules = $wpdb->get_results("SELECT * FROM ".$canvas->main); foreach($currModules as $currModule){ // Delete obselete modules $found = false; foreach($customModules as $customModule){ if ($customModule->id == $currModule->module_id) $found = true; } if (!$found){ canvas_delete_block_by_mod_ID($currModule->module_id); $wpdb->query("DELETE FROM ".$canvas->duplicates." WHERE module_id = '$currModule->module_id'"); } // Delete obselete duplicates $found = false; foreach($currDuplicates as $currDuplicate){ if ($currDuplicate->duplicate_id == $currModule->duplicate_id) $found = true; } if (!$found && $currModule->duplicate_id != 0){ canvas_delete_block($currModule->block_id); } } // Insert/Update modules in canvas table foreach($customModules as $customModule){ foreach($template_pages as $template_page){ $currModules = $wpdb->get_results("SELECT * FROM ".$canvas->main." WHERE module_id = '$customModule->id' AND theme = '".get_option('template')."' AND page='$template_page'"); // --- The module doesn't exist in the database, insert it for the first time if (!$currModules){ $configFile = $dir.$customModule->name."/configure.xml"; if (file_exists($configFile)){ $plugin = canvas_import_plugin($customModule->id, $configFile, $position, $customModule->name, $template_page, 0); $position++; } } // --- If a duplicate doesn't exist, insert it $currDuplicates = $wpdb->get_results("SELECT * FROM ".$canvas->duplicates." WHERE module_id = '$customModule->id'"); foreach($currDuplicates as $currDuplicate){ if (!$wpdb->get_results("SELECT * FROM ".$canvas->main." WHERE module_id = '$customModule->id' AND theme = '".get_option('template')."' AND page='$template_page' AND duplicate_id = $currDuplicate->duplicate_id")){ $configFile = $dir.$customModule->name."/configure.xml"; if (file_exists($configFile)){ $plugin = canvas_import_plugin($customModule->id, $configFile, $position, $currDuplicate->duplicate_name, $template_page, $currDuplicate->duplicate_id); $position++; } } } // --- Update each instance of this module foreach($currModules as $currModule){ $configFile = $dir.$customModule->name."/configure.xml"; // Get module name include_once('RCCWP_CustomWriteModule.php'); $customWriteModule = RCCWP_CustomWriteModule::Get($currModule->module_id); $currModule->module_name = $customWriteModule->name; $modID = $currModule->block_id; $modName = $currModule->module_name; $modTemplateName = $currModule->template_name; // $wpdb->get_var("SELECT template_name FROM ".$canvas->main." WHERE module_name = '$customModule->name' AND theme = '".get_option('template')."'"); $modTemplateSize = $currModule->template_size; //$wpdb->get_var("SELECT template_size FROM ".$canvas->main." WHERE module_name = '$customModule->name' AND theme = '".get_option('template')."'"); // Check whether there is a custom configure.xml defined for this module $overidConfig = get_module_template_folder($modName, $modTemplateName, $modTemplateSize)."configure.xml"; if (file_exists($overidConfig)) $configFile = $overidConfig; if (file_exists($configFile)){ $plugin = canvas_import_plugin($customModule->id, $configFile, $position, $modName, $template_page, $currDuplicate->duplicate_id, $modID); $position++; } } } } return array($plugin, $position); } function canvas_install_plugin_data($moduleID, $plugin, $position, $template_page, $duplicate_id, $block_id = -1) { global $wpdb, $canvas; //$name = addslashes($plugin->functionName); $author = $plugin->functionAuthor; $uri = $plugin->functionUri; $description = addslashes($plugin->functionDesc); $group = $plugin->functionGroup; $path = $plugin->functionPath; $ubi = md5($name.$author.$uri.$description.$group.$path); if ($block_id == -1){ //if (!$wpdb->get_var("SELECT module_id FROM ".$canvas->main." WHERE module_id = $moduleID AND theme = '".get_option('template')."' AND page='$template_page'") ) { // install module for the first time $wpdb->query("INSERT INTO ".$canvas->main." (module_id, type, zone, position, author, description, block_group, uri, path, theme, ubi, duplicate_id, page) VALUES ($moduleID, 'plugin','shelf','$position','$author','$description','$group','$uri','$path','".get_option('template')."','$ubi', $duplicate_id, '$template_page')"); $position++; $plugin_id = mysql_insert_id($wpdb->dbh); } else{ //if ($wpdb->get_var("SELECT block_id FROM ".$canvas->main." WHERE block_id = $block_id")) //If this the main module, not a duplicate, update its name $wpdb->query("UPDATE ".$canvas->main. " SET author = '$author', description = '$description', path ='$path'". " WHERE block_id = $block_id"); //..else // $wpdb->query("UPDATE ".$canvas->main. // " SET author = '$author', description = '$description', path ='$path'". // " WHERE block_id = $block_id"); $plugin_id = $wpdb->get_var("SELECT block_id FROM ".$canvas->main." WHERE block_id = $block_id"); $position = $wpdb->get_var("SELECT position FROM ".$canvas->main." WHERE block_id = $block_id"); } return array($plugin_id,$position); } function canvas_install_variable_data($name, $parent, $type, $default, $description, $options) { global $wpdb, $canvas; if (!$wpdb->get_var("SELECT variable_name FROM ".$canvas->variables." WHERE variable_name = '$name' AND parent = '$parent'") ) { $wpdb->query("INSERT INTO ".$canvas->variables." (variable_name,parent,type,value,default_value,description) VALUES ('$name','$parent','$type','$default','$default','$description')"); $var_id = $wpdb->get_var("SELECT variable_id FROM ".$canvas->variables." WHERE variable_name = '$name' AND parent = '$parent'"); if (!empty($options)) { foreach($options as $option) { $option_name = addslashes($option['name']); $option_value = addslashes($option['value']); $option_params = addslashes($option['params']); $wpdb->query("INSERT INTO ".$canvas->options." (var_id, option_text, option_value, option_params) VALUES ('$var_id','$option_name','$option_value','$option_params')"); } } } else{ $extraParam = ''; if ('__RESETDEFAULT__' == $wpdb->get_var("SELECT default_value FROM ".$canvas->variables." WHERE variable_name = '$name' AND parent = '$parent'")) $extraParam = ", value = '$default' "; $wpdb->query("UPDATE ".$canvas->variables. " SET type = '$type', default_value = '$default', description = '$description' ". $extraParam. " WHERE variable_name = '$name' AND parent = '$parent'"); $var_id = $wpdb->get_var("SELECT variable_id FROM ".$canvas->variables." WHERE variable_name = '$name' AND parent = '$parent'"); $wpdb->query("DELETE FROM ".$canvas->options." WHERE var_id = '$var_id'"); if (!empty($options)) { foreach($options as $option) { $option_name = addslashes($option['name']); $option_value = addslashes($option['value']); $option_params = addslashes($option['params']); $wpdb->query("INSERT INTO ".$canvas->options." (var_id,option_text,option_value, option_params) VALUES ('$var_id','$option_name','$option_value','$option_params')"); } } } } function canvas_restore_form($xml_path) { ?>

Restore from XML

Attempt to restore this theme's layout to the default settings.

Cancel

Canvas will attempt to restore your current theme's layout and plugin settings to those specified by the author in the original XML file.

Importing from XML is still experimental, and may result in loss of Canvas-related data.