Files
roi-theme/wp-content/plugins/wp-ultimate-csv-importer/importExtensions/toolsetHelper/WPToolsetImporter.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

439 lines
14 KiB
PHP
Executable File

<?php
namespace Smackcoders\FCSV;
if (!defined('ABSPATH')) exit; // Exit if accessed directly
/**
*
*/
require_once "ToolsetImporter.php";
class WPToolsetImporter extends ToolsetImporter
{
private static $wpToolsetImporter = NULL,$mediaInstance;
private $dataArray;
private $metaData;
private $fieldType;
private $postType;
private $wpTypesFields;
static function getInstance() {
if (self::$wpToolsetImporter == NULL) {
self::$wpToolsetImporter = new WPToolsetImporter();
self::$mediaInstance = new MediaHandling();
}
return self::$wpToolsetImporter;
}
function set($dataArray, $metaData, $field_Type,$wpTypesFields,$postType) {
$this->dataArray = $dataArray;
$this->metaData = $metaData;
$this->fieldType = $field_Type;
$this->wpTypesFields = $wpTypesFields;
$this->postType = $postType;
}
function import($postId,$post_val,$hash_key,$line_number,$gmode,$templatekey) {
$ToolsetImport = ToolsetImporter::getInstance();
//get fields and groups of homegroup post
if ($this->postType == 'Users') {
$postTypeValue = 'wp-types-user-group';
}else{
$postTypeValue = 'wp-types-group';
}
// $fieldsAndGroups = $this->format($this->dataArray['Parent_Group'],$postTypeValue);
if(isset($this->dataArray['Parent_Group'])){
$fieldsAndGroups = $ToolsetImport->format($this->dataArray['Parent_Group'],$postTypeValue);
}else{
$fieldsAndGroups= 0;
}
if ($fieldsAndGroups == 0) {
$this->insertCustomFields($postId,$this->postType,$post_val, $hash_key,$line_number,$gmode,$templatekey);
}else{
$this->loopAndInsertField($postId,$fieldsAndGroups,0,true,$post_val,$hash_key,$line_number,$gmode,$templatekey);
}
return;
}
function loopAndInsertField($postId,$fieldsAndGroups,$index,$isParent,$post_val,$hash_key,$line_number,$gmode,$templatekey) {
foreach ($fieldsAndGroups as $fieldkey => $fieldvalue) {
foreach ($fieldvalue as $key => $value) {
$data=$this->explodeFunction('_',$value);
if (isset($data[1]) && isset($data[2]) && $data[1]=='repeatable' && $data[2]=='group') {
//send repeatable group id.
$groupName=$this->getRepeatableName($data[3]);
$groupRelationId=$this->getRelationshipId($groupName);
$groups=$this->dataArray[$groupName];
// csv directs to create 2 repetable group
$csvGroupsArray =$this->explodeFunction('|',$groups);
$elementString=$this->getRepeatableMetaValue($data[3]);
//from user created toolset group , don't change the symbol
$elementArray =$this->explodeFunction(',',$elementString);
if ($index < count($csvGroupsArray)) {
for ($i=0; $i < count($csvGroupsArray) ; $i++) {
//create post , post_type = $groupName->ram-house $csvGroupsArray[i]
$childPostId=$this->insertPost($groupName,$csvGroupsArray[$i]);
$this->insertRelationship($groupRelationId,$postId,$childPostId);
$this->loopAndInsertField($childPostId, array($elementArray), $i,false,$post_val,$hash_key,$line_number,$gmode,$templatekey);
update_post_meta($childPostId, 'toolset-post-sortorder', $i+1);
}
}
} else { // simply make entry for homefroup fields.
$fieldValues=$this->dataArray[$value];
$fieldsArray =explode('|',$fieldValues);
$metaKey=$this->metaData[$value];
$fieldType=$this->fieldType[$value];
if (!$isParent) {
if ($index < count($fieldsArray)) {
$fieldValue=$fieldsArray[$index];
$this->checkFieldType($postId,$fieldValue,$fieldType,$metaKey,$post_val,$hash_key,$line_number,$gmode,$templatekey);
}
} else {
$this->checkFieldType($postId,$fieldValues,$fieldType,$metaKey,$post_val,$hash_key,$line_number,$gmode,$templatekey);
}
}
}
}
}
function insertCustomFields($postId,$postType,$post_val, $hash_key,$line_number,$gmode,$templatekey){
foreach ($this->dataArray as $key => $value) {
if(isset($this->fieldType[$key]) && isset($this->metaData[$key])){
$fieldType=$this->fieldType[$key];
$metaKey=$this->metaData[$key];
$listTaxonomy = get_taxonomies();
if(!empty($fieldType) && !empty($metaKey)) {
if ( in_array( $postType, $listTaxonomy ) ) {
$values = explode( '|', $value );
foreach ( $values as $keys => $value1 ) {
$this->insertTermFields( $postId, $value1, $fieldType, $metaKey,$line_number );
}
} else {
$this->checkFieldType( $postId, $value, $fieldType, $metaKey,$post_val,$hash_key,$line_number,$gmode,$templatekey );
}
}
}
}
}
function insertTermFields($postId,$fieldValue,$field_Types,$metaKey,$line_number)
{
if($field_Types=='checkboxes'){
$fieldTypeArray=array_flip($this->metaData);
$fieldTypeValue=$fieldTypeArray[$metaKey];
$term_fields = get_option('wpcf-termmeta');
$wpTypes = $term_fields[$fieldTypeValue]['data']['options'];
//$wpTypes=$this->wpTypesFields[$fieldTypeValue]['data']['options'];
$checkbox_array = array();
$fieldValueArrays =$this->explodeFunction(',',$fieldValue);
foreach ($fieldValueArrays as $keys => $values) {
$values = trim($values);
foreach ($wpTypes as $key1 => $value1) {
if ($values == $value1['title']) {
$term_value = $value1['set_value'];
$checkbox_array[$key1] = array($term_value);
}
}
}
add_term_meta($postId,$metaKey,$checkbox_array);
}
else
{
$this->InsertUpdateTerm($postId,$metaKey,$field_Types,$fieldValue,$line_number);
}
}
function checkFieldType($postId,$fieldValue,$fields_Type,$metaKey,$post_val,$hash_key,$line_number,$gmode,$templatekey){
global $wpdb;
if ($fields_Type == 'checkboxes') {
$fieldValueArray =$this->explodeFunction(',',$fieldValue);
$fieldValueArray=array_flip($fieldValueArray);
$fieldTypeArray=array_flip($this->metaData);
$fieldTypeValue=$fieldTypeArray[$metaKey];
$wpTypes=$this->wpTypesFields[$fieldTypeValue]['data']['options'];
$checkbox_array = array();
foreach ($fieldValueArray as $key => $value) {
$key = trim($key);
foreach ($wpTypes as $key1 => $value1) {
if ($key == $value1['set_value']) {
$checkbox_array[$key1] = array($value1['set_value']);
}
}
}
//update_post_meta($postId, $metaKey, $checkbox_array);
if ($this->postType == 'Users') {
update_user_meta($postId,$metaKey,$checkbox_array);
}else{
update_post_meta($postId,$metaKey,$checkbox_array);
}
}elseif ($fields_Type == 'post') {
$fieldValueArray=array_flip($this->metaData);
$relationshipSlug=$fieldValueArray[$metaKey];
$groupRelationId=$this->getRelationshipId($relationshipSlug);
if (is_numeric($fieldValue)) {
$field_Value=$fieldValue;
}elseif(is_string($fieldValue)){
$query = "SELECT id FROM {$wpdb->prefix}posts WHERE post_title ='{$fieldValue}' AND post_status='publish'";
$name = $wpdb->get_results($query);
if (!empty($name)) {
$field_Value=$name[0]->id;
}else{
return;
}
}
if(!empty($field_Value) && !empty($metaKey)) {
$this->insertRelationship( $groupRelationId, $field_Value, $postId );
update_post_meta( $postId, $metaKey, $field_Value );
}
}else{
//add_post_meta($postId,$metaKey,$fieldValue);add_user_meta
$this->InsertUpdateData($postId,$metaKey,$fields_Type,$fieldValue,$post_val, $hash_key,$line_number,$gmode,$templatekey);
}
}
function InsertUpdateTerm($postId,$metaKey,$fields_Types,$fieldValue,$line_number)
{
$helpers_instance = ImportHelpers::getInstance();
$fieldTypeArray=array_flip($this->metaData);
$fieldTypeValue=$fieldTypeArray[$metaKey];
settype($isRepetitive, "integer");
$isRepetitive=$this->wpTypesFields[$fieldTypeValue]['data']['repetitive'];
if (!empty($isRepetitive) && $isRepetitive == 1) {
$valuesArray =$this->explodeFunction('|',$fieldValue);
foreach ($valuesArray as $values) {
$values=trim($values);
if ($fields_Types == 'date') {
if(!empty($values)) {
$values = trim($values);
//$dateformat = "Y-m-d";
$checkformat = $this->wpTypesFields[$fieldTypeValue]['data']['date_and_time'];
$dateformat =$checkformat == 'date'?"Y-m-d" : "Y-m-d H:i:s";
$fieldnm = substr($metaKey,strpos($metaKey,'-')+1);
$values = $helpers_instance->validate_datefield($values,$fieldnm,$dateformat,$line_number);
$values = strtotime($values);
}
else {
$values = $values;
}
}elseif ($fields_Types == 'skype') {
$values = array(
'skypename' => $values,
'action' => 'chat',
'color' => 'blue',
'size' => '32'
);
}
add_term_meta($postId,$metaKey,$values);
}
}else{
if($isRepetitive == 0){
if ($fields_Types == 'date') {
if(!empty($fieldValue)) {
$fieldValue = trim($fieldValue);
//$dateformat = "Y-m-d";
$checkformat = $this->wpTypesFields[$fieldTypeValue]['data']['date_and_time'];
$dateformat =$checkformat == 'date'?"Y-m-d" : "Y-m-d H:i:s";
$fieldnm = substr($metaKey,strpos($metaKey,'-')+1);
$fieldValue = $helpers_instance->validate_datefield($fieldValue,$fieldnm,$dateformat,$line_number);
$fieldValue = strtotime($fieldValue);
}
else {
$fieldValue = $fieldValue;
}
}elseif ($fields_Types == 'skype') {
$fieldValue = array(
'skypename' => $fieldValue,
'action' => 'chat',
'color' => 'blue',
'size' => '32'
);
}
add_term_meta($postId,$metaKey,$fieldValue);
}
}
}
function InsertUpdateData($postId,$metaKey,$fields_Types,$fieldValue,$post_val,$hash_key,$line_number,$gmode,$templatekey)
{
global $wpdb;
$helpers_instance = ImportHelpers::getInstance();
settype($isRepetitive, "integer");
$fieldTypeArray=array_flip($this->metaData);
$fieldTypeArray[$metaKey] = isset($fieldTypeArray[$metaKey]) ? $fieldTypeArray[$metaKey] : '';
$fieldTypeValue=$fieldTypeArray[$metaKey];
if(isset($this->wpTypesFields[$fieldTypeValue]['data']['repetitive'])){
$isRepetitive=$this->wpTypesFields[$fieldTypeValue]['data']['repetitive'];
}
if (!empty($isRepetitive) && $isRepetitive == 1 && $fields_Types!='image' && $fields_Types != 'file') {
$valuesArray =$this->explodeFunction('|',$fieldValue);
foreach ($valuesArray as $values) {
$values=trim($values);
if ($fields_Types == 'date') {
if(!empty($values)){
$checkformat = $this->wpTypesFields[$fieldTypeValue]['data']['date_and_time'];
$dateformat =$checkformat == 'date'?"Y-m-d" : "Y-m-d H:i:s";
$fieldnm = substr($metaKey,strpos($metaKey,'-')+1);
$values = $helpers_instance->validate_datefield($values,$fieldnm,$dateformat,$line_number);
if(!empty($values))
$values = strtotime($values);
}
else {
$values = $values;
}
}elseif ($fields_Types == 'skype') {
$values = array(
'skypename' => $values,
'action' => 'chat',
'color' => 'blue',
'size' => '32'
);
}
elseif ($fields_Types == 'google_address'){
$values =$values;
}
if ($this->postType == 'Users') {
add_user_meta($postId,$metaKey,$values);
}else{
if($fields_Types == 'google_address'){
add_post_meta($postId,$metaKey,$values);
$meta_id = $wpdb->get_results( $wpdb->prepare( "select meta_id from {$wpdb->prefix}postmeta where meta_key = %s AND post_id = %d", $metaKey,$postId ) );
$array=json_decode(json_encode($meta_id),true);
foreach($array as $key=>$keyval ){
foreach($keyval as $keys => $keysval){
$metadata[$key] = $keysval;
}
}
$meta_key = '_'.$metaKey.'-sort-order';
update_post_meta($postId,$meta_key,$metadata);
}
else{
add_post_meta($postId,$metaKey,$values);
}
}
}
}
if($fields_Types == 'image' || $fields_Types == 'file') {
$plugin = 'types';
$valuesArray =$this->explodeFunction('|',$fieldValue);
foreach($valuesArray as $value) {
$ext = pathinfo($value, PATHINFO_EXTENSION );
if ($ext) {
if ($this->postType == 'Users') {
$get_import_type = 'user';
}
else{
$get_import_type = 'post';
}
if($fields_Types == 'image'){
self::$mediaInstance->store_image_ids($i=1);
$attachid = self::$mediaInstance->image_meta_table_entry($post_val, $postId, $metaKey, $value, $hash_key, 'types', $get_import_type,$templatekey,$gmode);
}else{
$attachid = self::$mediaInstance->media_handling($value, $postId);
}
$attachids[] =$attachid;
if(empty($attachid)){
if ($this->postType == 'Users') {
add_user_meta($postId,$metaKey,$value);
}else{
add_post_meta($postId,$metaKey,$value);
}
}
else{
$guid=$wpdb->get_row("select guid from ".$wpdb->prefix."posts where ID='$attachid'");
$values=$guid->guid;
if ($this->postType == 'Users') {
add_user_meta($postId,$metaKey,$value);
}else{
add_post_meta($postId,$metaKey,$values);
}
}
}
//update_image_meta
$get_existing_image_option = get_option('smack_schedule_image_exists_types_'.$postId);
if($get_existing_image_option){
self::$mediaInstance->acfimageMetaImports($attachids, $post_val, $plugin);
delete_option('smack_schedule_image_exists_types_'.$postId);
}
//self::$mediaInstance->acfimageMetaImports($attachids,$post_val,$plugin);
}
}
else{
if($isRepetitive == 0){
if ($fields_Types == 'date') {
if(!empty($fieldValue)){
$fieldValue = trim($fieldValue);
//$dateformat = "Y-m-d";
$checkformat = $this->wpTypesFields[$fieldTypeValue]['data']['date_and_time'];
$dateformat =$checkformat == 'date'?"Y-m-d" : "Y-m-d H:i:s";
$fieldnm = substr($metaKey,strpos($metaKey,'-')+1);
$fieldValue = $helpers_instance->validate_datefield($fieldValue,$fieldnm,$dateformat,$line_number);
if(!empty($fieldValue))
$fieldValue = strtotime($fieldValue);
}
else {
$fieldValue = $fieldValue;
}
}elseif ($fields_Types == 'skype') {
$fieldValue = array(
'skypename' => $fieldValue,
'action' => 'chat',
'color' => 'blue',
'size' => '32'
);
}elseif($fields_Types == 'google_address'){
$fieldValue = $fieldValue;
}
if ($this->postType == 'Users') {
add_user_meta($postId,$metaKey,$fieldValue);
}else{
if($fields_Types == 'google_address'){
add_post_meta($postId,$metaKey,$fieldValue);
}
else{
add_post_meta($postId,$metaKey,$fieldValue);
}
}
}
}
}
}