Пример #1
0
function rmag_export()
{
    global $wpdb;
    $table_price .= '<style>table{min-width:500px;width:50%;margin:20px 0;}table td{border:1px solid #ccc;padding:3px;}</style>';
    $postmeta = $wpdb->get_results("SELECT meta_key FROM " . $wpdb->prefix . "postmeta GROUP BY meta_key ORDER BY meta_key");
    $table_price .= '<h2>Экспорт/импорт данных</h2><form method="post" action="">
	' . wp_nonce_field('get-csv-file', '_wpnonce', true, false) . '
	<p><input type="checkbox" name="post_title" checked value="1"> Добавить заголовок</p>
	<p><input type="checkbox" name="post_content" checked value="1"> Добавить описание</p>
	<h3>Произвольные поля товаров:</h3><table><tr>';
    $fields = array('price-products' => 'Цена товара в основной валюте', 'amount_product' => 'Количество товара в наличии', 'reserve_product' => 'Товары в резерве', 'type_currency' => 'Валюта стоимости товара', 'curse_currency' => 'Курс доп.валюты для товара', 'margin_product' => 'Наценка на товар', 'outsale' => '1 - товар снят с продажи', 'related_products_recall' => 'ID товарной категории выводимой в блоке рекомендуемых или похожих товаров');
    $fields = apply_filters('products_field_list', $fields);
    foreach ($fields as $key => $name) {
        $table_price .= '<b>' . $key . '</b> - ' . $name . '<br />';
    }
    if ($postmeta) {
        $n = 1;
        foreach ($postmeta as $key) {
            if (!isset($fields[$key->meta_key])) {
                continue;
            }
            if (strpos($key->meta_key, "goods_id") === FALSE && strpos($key->meta_key, "_") !== 0) {
                $n++;
                $check = isset($fields[$key->meta_key]) ? 1 : 0;
                $table_price .= '<td><input ' . checked($check, 1, false) . ' type="checkbox" name="' . $key->meta_key . '" value="1"> ' . $key->meta_key . '</td>';
                if ($n % 2) {
                    $table_price .= '</tr><tr>';
                }
            }
        }
    }
    $table_price .= '</tr><tr><td colspan="2" align="right"><input type="submit" name="get_csv_file" value="Выгрузить товары в файл"></td></tr></table>
	' . wp_nonce_field('get-csv-file', '_wpnonce', true, false) . '
        </form>';
    $table_price .= '<form method="post" action="" enctype="multipart/form-data">
	' . wp_nonce_field('add-file-csv', '_wpnonce', true, false) . '
	<p>
	<input type="file" name="file_csv" value="1">
	<input type="submit" name="add_file_csv" value="Импортировать товары из файла"><br>
	<small><span style="color:red;">Внимание!</span> Пустые ячейки XML-файла не участвуют в обновлении характеристик товара<br>
	Значения произвольных полей удаляемые через файл должны заменяться в файле знаком звездочки (*)</small>
	</p>
	</form>';
    echo $table_price;
    if ($_FILES['file_csv'] && wp_verify_nonce($_POST['_wpnonce'], 'add-file-csv')) {
        $file_name = $_FILES['file_csv']['name'];
        $rest = substr($file_name, -4);
        //получаем расширение файла
        if ($rest == '.xml') {
            $filename = $_FILES['file_csv']['tmp_name'];
            $f1 = current(wp_upload_dir()) . "/" . basename($filename);
            copy($filename, $f1);
            $handle = fopen($f1, "r");
            $posts = array();
            if ($handle) {
                while (!feof($handle)) {
                    $string = rtrim(fgets($handle));
                    if (false !== strpos($string, '<post>')) {
                        $post = '';
                        $doing_entry = true;
                        continue;
                    }
                    if (false !== strpos($string, '</post>')) {
                        $doing_entry = false;
                        $posts[] = $post;
                        continue;
                    }
                    if ($doing_entry) {
                        $post .= $string . "\n";
                    }
                }
            }
            fclose($handle);
            $posts_columns = $wpdb->get_results("SHOW COLUMNS FROM {$wpdb->posts}");
            $updated = 0;
            $emptyFields = array();
            foreach ((array) $posts as $value) {
                $ID = false;
                $prodcat = false;
                $data = array();
                $args = array();
                $post = array();
                //echo $updated.': '.$value.'<br>';
                if (preg_match_all('|<(.+?)><!\\[CDATA\\[(.*?)\\]\\]></.+?>|s', $value, $m1) || preg_match_all('|<(.+?)>(.*?)</.+?>|s', $value, $m1)) {
                    foreach ($m1[1] as $n => $key) {
                        if ($key == "prodcat") {
                            $prodcat = html_entity_decode($m1[2][$n]);
                            continue;
                        }
                        $data[$key] = html_entity_decode($m1[2][$n]);
                        flush();
                    }
                }
                reset($posts_columns);
                foreach ($posts_columns as $col) {
                    if (isset($data[$col->Field])) {
                        if ($col->Field == "ID") {
                            $ID = $data[$col->Field];
                        } else {
                            $post[$col->Field] = "{$col->Field} = '{$data[$col->Field]}'";
                            $args[$col->Field] = "{$data[$col->Field]}";
                        }
                        unset($data[$col->Field]);
                        flush();
                    }
                }
                if (!$ID) {
                    $args['tax_input'] = array('prodcat' => explode(',', $prodcat));
                    $args['post_type'] = 'products';
                    $ID = wp_insert_post($args);
                    $action = 'создан и добавлен';
                } else {
                    if (count($post) > 0) {
                        $wpdb->query($wpdb->prepare("UPDATE {$wpdb->posts} SET %s WHERE ID = '%d'", implode(',', $post), $ID));
                        $action = 'обновлен';
                    }
                }
                unset($post);
                if (count($data)) {
                    foreach ($data as $key => $value) {
                        if ($value != '*') {
                            update_post_meta($ID, $key, $value);
                        } else {
                            $emptyFields[$key][] = $ID;
                        }
                    }
                }
                do_action('rcl_upload_product_data', $ID, $data);
                unset($data);
                $updated++;
                echo "{$updated}. Товар {$ID} был {$action}<br>";
                flush();
            }
            if ($emptyFields) {
                foreach ($emptyFields as $key => $ids) {
                    $wpdb->query($wpdb->prepare("DELETE FROM " . $wpdb->prefix . "postmeta WHERE meta_key='%s' AND post_id IN (" . rcl_format_in($ids) . ")", $key, $ids));
                }
            }
        } else {
            echo '<div class="error">Неверный формат загруженного файла! Допустимо только XML</div>';
        }
    }
}
Пример #2
0
 function get_loop_contacts_rcl($contacts, $days)
 {
     global $wpdb, $user_ID;
     $interval = $days * 24 * 3600;
     $sql_int = '';
     $contact_list = array();
     if ($days > 0) {
         $sql_int = "AND time_mess > (NOW() - INTERVAL {$interval} SECOND)";
     }
     if (!$contacts) {
         return '<h3>' . __('Contacts not found!', 'wp-recall') . '</h3>';
     }
     $rcl_action_users = $wpdb->get_results($wpdb->prepare("SELECT user,time_action FROM " . RCL_PREF . "user_action WHERE user IN (" . rcl_format_in($contacts) . ")", $contacts));
     if ($days >= 0) {
         $cntctslist = implode(',', $contacts);
         $su_list = $wpdb->get_results("\n\t\t\tSELECT author_mess,time_mess,adressat_mess,status_mess FROM (\n\t\t\tSELECT * FROM " . RCL_PREF . "private_message WHERE adressat_mess IN ({$cntctslist}) AND author_mess = '{$user_ID}' {$sql_int}\n\t\t\tOR author_mess IN ({$cntctslist}) AND adressat_mess = '{$user_ID}' {$sql_int} ORDER BY time_mess DESC\n\t\t\t) TBL GROUP BY author_mess,adressat_mess");
         if ($su_list) {
             foreach ((array) $su_list as $s) {
                 $list[] = (array) $s;
             }
             $list = rcl_multisort_array((array) $list, 'time_mess', SORT_ASC);
             foreach ((array) $list as $l) {
                 if ($l['author_mess'] != $user_ID) {
                     $s_contact = $l['author_mess'];
                 }
                 if ($l['adressat_mess'] != $user_ID) {
                     $s_contact = $l['adressat_mess'];
                 }
                 $contact_list[$s_contact]['time'] = $l['time_mess'];
                 $contact_list[$s_contact]['contact'] = $s_contact;
                 $contact_list[$s_contact]['status'] = $l['status_mess'];
             }
             $contact_list = rcl_multisort_array((array) $contact_list, 'time', SORT_DESC);
         } else {
             $contacts = false;
             $contacts = apply_filters('rcl_chat_contacts', $contacts);
             if ($contacts) {
                 foreach ($contacts as $c) {
                     $contact_list[]['contact'] = $c;
                 }
             }
         }
     } else {
         foreach ((array) $contacts as $c) {
             $contact_list[]['contact'] = $c;
         }
     }
     $name_users = $wpdb->get_results($wpdb->prepare("SELECT ID,display_name FROM {$wpdb->users} WHERE ID IN (" . rcl_format_in($contacts) . ")", $contacts));
     foreach ((array) $name_users as $name) {
         $names[$name->ID] = $name->display_name;
     }
     $privat_block = '';
     if ($contact_list) {
         foreach ($contact_list as $data) {
             if (!$names[$data['contact']]) {
                 continue;
             }
             foreach ((array) $rcl_action_users as $action) {
                 if ($action->user == $data['contact']) {
                     $time_action = $action->time_action;
                     break;
                 }
             }
             $last_action = rcl_get_useraction($time_action);
             $privat_block .= '<div class="single_correspond history-' . $data['contact'];
             if ($data['status'] == 0) {
                 $privat_block .= ' redline';
             }
             $privat_block .= '">';
             $privat_block .= '<div class="floatright">';
             if (!$last_action) {
                 $privat_block .= '<div class="status_author_mess online"><i class="fa fa-circle"></i></div>';
             } else {
                 $privat_block .= '<div class="status_author_mess offline"><i class="fa fa-circle"></i></div>';
             }
             $redirect_url = rcl_format_url(get_author_posts_url($data['contact']), 'privat');
             $privat_block .= '<span user_id="' . $data['contact'] . '" class="author-avatar"><a href="' . $redirect_url . '">' . get_avatar($data['contact'], 40) . '</a></span><a href="#" class="recall-button ';
             if ($days > 0) {
                 $privat_block .= 'del_history';
             } else {
                 $privat_block .= 'remove_black_list';
             }
             $privat_block .= '" data-contact="' . $data['contact'] . '"><i class="fa fa-remove"></i></a>
                         </div>
                         <p><a href="' . $redirect_url . '">' . $names[$data['contact']] . '</a>';
             if (isset($data['time'])) {
                 $privat_block .= '<br/><small>' . __('Last message', 'wp-recall') . ': ' . $data['time'] . '</small>';
             } else {
                 $privat_block .= '<br/><small>' . __('The chat history is missing', 'wp-recall') . '</small>';
             }
             $privat_block .= '</p></div>';
         }
     }
     if (!$privat_block) {
         $privat_block = '<h3>' . __('Contacts not found!', 'wp-recall') . '</h3>';
     }
     return $privat_block;
 }
function rcl_get_usernames($objects, $name_data)
{
    global $wpdb;
    if (!$objects || !$name_data) {
        return false;
    }
    foreach ((array) $objects as $object) {
        $userslst[] = $object->{$name_data};
    }
    $display_names = $wpdb->get_results($wpdb->prepare("SELECT ID,display_name FROM " . $wpdb->prefix . "users WHERE ID IN (" . rcl_format_in($userslst) . ")", $userslst));
    foreach ((array) $display_names as $name) {
        $names[$name->ID] = $name->display_name;
    }
    return $names;
}