/**
* Import a write panel given the file path.
* @param string $panelFilePath the full path of the panel file
* @param string $writePanelName the write panel name, if this value if false, the function will
* use the pnl filename as the write panel name. The default value is false
* @param boolean $overwrite whether to overwrite existing panels with the same name
* @return the panel id, or false in case of error.
*/
function Import($panelFilePath, $writePanelName = false, $overwrite = false)
{
global $wpdb;
include_once 'RCCWP_CustomGroup.php';
include_once 'RCCWP_CustomField.php';
include_once 'RCCWP_Application.php';
if (!$writePanelName) {
//use filename
$writePanelName = basename($panelFilePath, ".pnl");
}
if ($writePanelName == '') {
return false;
}
$writePanelID = RCCWP_CustomWritePanel::GetIdByName($writePanelName);
if ($writePanelID && !$overwrite) {
// Append a number if the panel already exists,
$i = 2;
$temp_name = $writePanelName . "_1";
while (RCCWP_CustomWritePanel::GetIdByName($temp_name)) {
$temp_name = $writePanelName . "_" . $i++;
}
$writePanelName = $temp_name;
}
// Unserialize file
$imported_data = unserialize(file_get_contents($panelFilePath));
$types_results = RCCWP_CustomField::GetCustomFieldTypes();
$types = array();
foreach ($types_results as $types_result) {
$types[$types_result->name] = $types_result->id;
}
// Prepare categories list
$assignedCategories = array();
if (is_array($imported_data['panel']->assignedCategories)) {
foreach ($imported_data['panel']->assignedCategories as $cat_name) {
wp_create_category($cat_name);
$assignedCategories[] = $cat_name;
}
}
//Create write panel
if ($writePanelID && $overwrite) {
RCCWP_CustomWritePanel::Update($existingPanelId, $writePanelName, $imported_data['panel']->description, $imported_data['panel']->standardFieldsIDs, $assignedCategories, $imported_data['panel']->display_order, $imported_data['panel']->type, false, $imported_data['panel']->single, $imported_data['panel']->theme, $imported_data['panel']->parent_page);
foreach (RCCWP_CustomWritePanel::GetCustomGroups($writePanelID) as $group) {
RCCWP_CustomGroup::Delete($group->id);
}
} else {
$writePanelID = RCCWP_CustomWritePanel::Create($writePanelName, $imported_data['panel']->description, $imported_data['panel']->standardFieldsIDs, $assignedCategories, $imported_data['panel']->display_order, $imported_data['panel']->type, false, $imported_data['panel']->single, $imported_data['panel']->theme, $imported_data['panel']->parent_page);
}
if (is_array($imported_data['fields'])) {
foreach ($imported_data['fields'] as $groupName => $group) {
// For backward compatability
if (!isset($group->fields)) {
$newGroup->fields = $group;
$group = $newGroup;
}
// Import group
$groupID = RCCWP_CustomGroup::Create($writePanelID, $groupName, $group->duplicate, $group->at_right);
// Import group fields
foreach ($group->fields as $field) {
$fieldOptions = @implode("\n", $field->options);
$fieldDefault = @implode("\n", $field->default_value);
if ($field->type == "Related Type") {
$field->properties["panel_id"] = RCCWP_CustomWritePanel::GetIdByName($field->properties["panel_name"]);
unset($field->properties["panel_name"]);
}
RCCWP_CustomField::Create($groupID, $field->name, $field->description, $field->display_order, $field->required_field, $types[$field->type], $fieldOptions, $fieldDefault, $field->properties, $field->duplicate, $field->help_text);
}
}
}
return $writePanelID;
}