<?php
if ( !class_exists('Types_Data_Installer') ) {
class Types_Data_Installer
{
private $data = array();
private $args = array();
private $fields = array();
private $user_fields = array();
private $reset_toolset_edit_last_list = array();
public function __construct($data, $args)
{
$this->data = $data;
$this->args = $args;
}
/**
* Create data for import.
*
* Populate and check data for import from Importer
*
* @since 1.6.6
*
* @return object data for import
*/
public function wpvdemo()
{
$data = new stdClass;
foreach(array('groups', 'user_groups', 'fields', 'user_fields', 'taxonomies', 'types') as $key) {
$data->$key = new stdClass;
}
$data->groups->group = $this->get_data_by_group_name(TYPES_CUSTOM_FIELD_GROUP_CPT_NAME);
$data->user_groups->group = $this->get_data_by_group_name(TYPES_USER_META_FIELD_GROUP_CPT_NAME);
$data->fields->field = $this->get_data_by_field_type('fields');
$data->user_fields->field = $this->get_data_by_field_type('user_fields');
$data->types->type = $this->get_data_by_type(WPCF_OPTION_NAME_CUSTOM_TYPES);
$data->taxonomies->taxonomy = $this->get_data_by_type(WPCF_OPTION_NAME_CUSTOM_TAXONOMIES);
return $data;
}
/**
* Helper for group.
*
* Helper for importing group.
*
* @since 1.6.6
* @access private
*
* @param string $group_name Group name
*
* @return object data for import
*/
private function get_data_by_group_name($group_name)
{
$group = 'groups';
$element = 'group';
if ( TYPES_USER_META_FIELD_GROUP_CPT_NAME == $group_name ) {
$group = 'user_groups';
}
if (
isset($this->data->{$group})
&& isset($this->data->{$group}->{$element})
) {
$array = get_object_vars( clone $this->data->{$group}->{$element} );
return $this->get_data($group_name, $array);
}
return;
}
/**
* Build data for group.
*
* Build data to importing group.
*
* @since 1.6.6
* @access private
*
* @param string $group_name Group name
* @param object $group Group data
*
* @return object data for import
*/
private function get_data($group_name, $groups)
{
$this->reset_toolset_edit_last_list[$group_name] = array();
$date = date('Y-m-d H:i');
$new = array();
foreach($groups as $group ) {
if (
isset($this->args['force_skip_post_name'][$group_name])
&& in_array($group->__types_id, $this->args['force_skip_post_name'][$group_name])
) {
continue;
}
if (
isset($this->args['force_import_post_name'][$group_name])
&& in_array($group->__types_id, $this->args['force_import_post_name'][$group_name])
) {
$new[] = $group;
switch($group_name) {
case TYPES_CUSTOM_FIELD_GROUP_CPT_NAME:
$this->fields += explode(',', $group->meta->_wp_types_group_fields);
break;
case TYPES_USER_META_FIELD_GROUP_CPT_NAME:
$this->user_fields += explode(',', $group->meta->_wp_types_group_fields);
break;
}
$this->reset_toolset_edit_last_list[$group_name][] = $group->__types_id;
continue;
}
if (
isset($this->args['force_duplicate_post_name'][$group_name])
&& in_array($group->__types_id, $this->args['force_duplicate_post_name'][$group_name])
) {
$one = $group;
$one->__types_id = wp_unique_post_slug( sanitize_title_with_dashes($group->post_title, null, 'save'), null, 'publish', TYPES_CUSTOM_FIELD_GROUP_CPT_NAME, null);
$one->__types_title = $one->post_title = sprintf('%s %s', $group->post_title, $date);
$new[$one->__types_id] = $one;
continue;
}
}
return $new;
}
/**
* Helper for CPT & CT.
*
* Helper for importing post types and custom taxonomies.
*
* @since 1.6.6
* @access private
*
* @param string $group_name Group name
*
* @return object data for import
*/
private function get_data_by_field_type($type)
{
if (
isset($this->data->fields)
&& isset($this->data->fields->field)
) {
$fields = $this->data->fields->field;
} else {
return;
}
$new = array();
foreach($fields as $field ) {
if ( in_array($field->id, $this->$type) )
{
$new[] = $field;
}
}
return $new;
}
/**
* Build data for CPT & CT
*
* Build data to importing post types and custom taxonomies.
*
* @since 1.6.6
* @access private
*
* @param string $group_name Group name
* @param object $group Group data
*
* @return object data for import
*/
private function get_data_by_type($group_name)
{
$group = 'types';
$element = 'type';
if ( WPCF_OPTION_NAME_CUSTOM_TAXONOMIES == $group_name ) {
$group = 'taxonomies';
$element = 'taxonomy';
}
if (
isset($this->data->$group)
&& isset($this->data->$group->$element)
) {
$groups = $this->data->$group->$element;
} else {
return;
}
$this->reset_toolset_edit_last_list[$group_name] = array();
$new = array();
if( WPCF_OPTION_NAME_CUSTOM_TYPES === $group_name ) {
$post_type_option = new Types_Utils_Post_Type_Option();
$data = $post_type_option->get_post_types();
} else {
$data = get_option( $group_name, array() );
}
foreach ( $groups as $group) {
$slug = $group->slug->__toString();
if ( isset($data[$slug]) && !isset($data[$slug][TOOLSET_EDIT_LAST]) ) {
continue;
}
$this->reset_toolset_edit_last_list[$group_name][] = $slug;
if (
isset($this->args['force_skip_post_name'][$group_name])
&& in_array($group->__types_id, $this->args['force_skip_post_name'][$group_name])
) {
continue;
}
if (
isset($this->args['force_import_post_name'][$group_name])
&& in_array($group->__types_id, $this->args['force_import_post_name'][$group_name])
) {
$this->reset_toolset_edit_last_list[$group_name][] = (int)$group->ID;
$group->addChild('add', false);
$group->addChild('update', true);
$new[] = $group;
continue;
}
}
return $new;
}
/**
* Reset TOOLSET_EDIT_LAST.
*
* Function to reset TOOLSET_EDIT_LAST - last edit timestamp in Types
* definitions.
*
* @since 1.6.6
*
*/
public function reset_toolset_edit_last()
{
if (!empty($this->reset_toolset_edit_last_list)) {
foreach( $this->reset_toolset_edit_last_list as $group => $data) {
switch( $group ) {
case TYPES_CUSTOM_FIELD_GROUP_CPT_NAME:
case TYPES_USER_META_FIELD_GROUP_CPT_NAME:
foreach( $data as $slug) {
$post = get_page_by_path($slug, OBJECT, $group);
if ( $post ) {
delete_post_meta( $post->ID, TOOLSET_EDIT_LAST);
}
}
break;
case WPCF_OPTION_NAME_CUSTOM_TYPES:
$post_type_option = new Types_Utils_Post_Type_Option();
$options = $post_type_option->get_post_types();
$new = array();
foreach ( $options as $one ) {
if ( in_array($one['slug'], $data ) ) {
if ( isset( $one[TOOLSET_EDIT_LAST]) ) {
unset($one[TOOLSET_EDIT_LAST]);
}
}
$new[$one['slug']] = $one;
}
update_option($group, $new);
break;
case WPCF_OPTION_NAME_CUSTOM_TAXONOMIES:
$options = get_option( WPCF_OPTION_NAME_CUSTOM_TAXONOMIES, array() );
$new = array();
foreach ( $options as $one ) {
if ( in_array($one['slug'], $data ) ) {
if ( isset( $one[TOOLSET_EDIT_LAST]) ) {
unset($one[TOOLSET_EDIT_LAST]);
}
}
$new[$one['slug']] = $one;
}
update_option($group, $new);
break;
}
}
}
}
}
}