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>'; } } }
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; }