Esempio n. 1
0
function tzs_front_end_my_shipments_handler($atts)
{
    ob_start();
    global $wpdb;
    $user_id = get_current_user_id();
    $url = current_page_url();
    $page = current_page_number();
    $pp = TZS_RECORDS_PER_PAGE;
    $active = isset($_GET['active']) ? trim($_GET['active']) : '1';
    $record_pickup_time = get_option('t3s_setting_record_pickup_time', '30');
    if ($user_id == 0) {
        ?>
        <div>Для просмотра необходимо <a href="/account/login/">войти</a> или <a href="/account/registration/">зарегистрироваться</a></div>
        <script>
            jQuery(document).ready(function(){
                jQuery('#menu-profile').hide();
            });
        </script>
        <?php 
    } else {
        $sql = "SELECT COUNT(*) as cnt FROM " . TZS_SHIPMENT_TABLE . " WHERE user_id={$user_id} AND active={$active};";
        $res = $wpdb->get_row($sql);
        if (count($res) == 0 && $wpdb->last_error != null) {
            print_error('Не удалось отобразить список грузов. Свяжитесь, пожалуйста, с администрацией сайта');
        } else {
            $records = $res->cnt;
            $pages = ceil($records / $pp);
            if ($pages == 0) {
                $pages = 1;
            }
            if ($page > $pages) {
                $page = $pages;
            }
            $from = ($page - 1) * $pp;
            // Добавим отбор счетов и сортировку по ним для активных записей
            if ($active == 0) {
                $sql = "SELECT * FROM " . TZS_SHIPMENT_TABLE . "  WHERE user_id={$user_id} AND active={$active} ORDER BY time DESC LIMIT {$from},{$pp};";
            } else {
                $sql = "SELECT a.*,";
                $sql .= " b.id AS order_id,";
                $sql .= " b.number AS order_number,";
                $sql .= " b.status AS order_status,";
                $sql .= " b.dt_pay AS order_dt_pay,";
                $sql .= " b.dt_expired AS order_dt_expired,";
                $sql .= " IFNULL(b.dt_pay, a.time) AS dt_sort,";
                $sql .= " IF(b.status IS NOT NULL, 2, IF(ROUND((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(a.dt_pickup))/60, 0) <= " . $record_pickup_time . ", 1, 0)) AS top_status,";
                $sql .= " LOWER(c.code) AS from_code, LOWER(d.code) AS to_code";
                $sql .= " FROM " . TZS_SHIPMENT_TABLE . " a";
                $sql .= " LEFT OUTER JOIN wp_tzs_orders b ON (b.tbl_type = 'SH' AND a.id = b.tbl_id AND ((b.status=1 AND b.dt_expired > NOW()) OR b.status=0) )";
                $sql .= " LEFT OUTER JOIN wp_tzs_countries c ON (a.from_cid = c.country_id)";
                $sql .= " LEFT OUTER JOIN wp_tzs_countries d ON (a.to_cid = d.country_id)";
                $sql .= " WHERE a.user_id={$user_id} AND a.active={$active}";
                $sql .= " ORDER BY top_status DESC, order_status DESC, dt_sort DESC";
                $sql .= " LIMIT {$from},{$pp};";
            }
            $res = $wpdb->get_results($sql);
            if (count($res) == 0 && $wpdb->last_error != null) {
                print_error('Не удалось отобразить список транспорта. Свяжитесь, пожалуйста, с администрацией сайта');
            } else {
                ?>
                <script src="/wp-content/plugins/tzs/assets/js/distance.js"></script>
                <script src="/wp-content/plugins/tzs/assets/js/ksk_show_msg.js" type="text/javascript"></script>
                <div id="my_products_wrapper">
                    <div id="my_products_table">
                        <!--form method="" id="form_tbl_products" action=""-->
                        <input type="hidden" id="table_record_id" name="table_record_id" value="0"/>
                        <input type="hidden" id="table_record_order_id" name="table_record_order_id" value=""/>
                        <input type="hidden" id="table_record_order_status" name="table_record_order_status" value=""/>
                        <input type="hidden" id="table_record_top_status" name="table_record_top_status" value=""/>
                        <table id="tbl_products">
                        <thead>
                            <tr id="tbl_thead_records_per_page">
                                <th colspan="8" style="border: 0;">
                                    <div class="div_td_left">
                                        <?php 
                echo $active === '1' ? 'Публикуемые' : 'Архивные';
                ?>
 грузы
                                    </div>
                                    <div id="my_products_button">
                                        <?php 
                if ($active === '1') {
                    ?>
                                            <button id="pickup_button">Обновить</button>
                                            <button id="vip_pickup_button">ТОП $</button>
                                            <button id="view_button">Смотреть</button>
                                            <button id="edit_button"">Изменить</button>
                                            <button id="delete_button">Удалить</button>
                                            <button id="all_list_button" onClick="javascript: window.open('/cargo', '_self');">Общий список</button>
                                            <button id="" onClick="javascript: window.open('/account/my-shipments/?active=0', '_self');">Архивные</button>
                                        <?php 
                } else {
                    ?>
                                            <button id="duplicate_button">Дублировать</button>
                                            <button id="view_button">Смотреть</button>
                                            <button id="delete_button">Удалить</button>
                                            <button id="all_list_button" onClick="javascript: window.open('/cargo', '_self');">Общий список</button>
                                            <button id="" onClick="javascript: window.open('/account/my-shipments/?active=1', '_self');">Публикуемые</button>
                                        <?php 
                }
                ?>
                                    </div>
                                </th>
                            </tr>
                            <tr>
                                <th id="tbl_trucks_rb">&nbsp;</th>
                                <th id="tbl_trucks_id">Опубликовано<br>Поднято</th>
                                <th nonclickable="true" style="min-width: 260px; padding: 0; margin: 0;">
                                    <div class="tbl_trucks_path">Пункты погрузки /<br/>выгрузки<br/>&nbsp;</div>
                                    <div class="tbl_trucks_dtc">Даты погрузки /<br>выгрузки</div>
                                </th>
                                <th id="tbl_trucks_tc">Тип груза /<br>Желаемый тип ТС</th>
                                <th id="tbl_trucks_wv">Вес,<br>объём</th>
                                <th id="tbl_trucks_comm">Описание груза</th>
                                <th id="tbl_trucks_cost">Cтоимость,<br/>цена 1 км</th>
                                <th id="tbl_trucks_payment" nonclickable="true">Форма оплаты</th>
                                <!--th id="actions" nonclickable="true">Действия</th-->
                            </tr>
                        </thead>
                        <tbody>
                            <?php 
                foreach ($res as $row) {
                    //$profile_td_text = '<a href="javascript:doDisplay('.$row->id.');" at="'.$row->id.'" id="icon_set">Действия</a>
                    //        <div id="menu_set" id2="menu" for="'.$row->id.'" style="display:none;">
                    $profile_td_text = '<div id="menu_set" id2="menu" for="' . $row->id . '">
                                            <ul>
                                                <a href="/account/view-shipment/?id=' . $row->id . '&link=my-shipments&active=' . $active . '">Смотреть</a>
                                                <a href="/account/edit-shipment/?id=' . $row->id . '">Изменить</a>';
                    if ($row->active && $row->order_status === null) {
                        $profile_td_text .= '<a href="javascript:promptPickUp(' . $row->id . ', \'SH\');">В ТОП</a>';
                    }
                    if ($row->active && $row->order_status !== null && $row->order_status == 0) {
                        $profile_td_text .= '<a href="/account/view-order/?id=' . $row->order_id . '">Счет ТОП</a>';
                    }
                    $profile_td_text .= '<a href="javascript: promptDelete(' . $row->id . ', ' . $row->active . ');" id="red">Удалить</a>
                                            </ul>
                                        </div>';
                    $profile_td_text = 'no';
                    echo tzs_tr_sh_table_record_out($row, 'shipments', $profile_td_text);
                }
                ?>
                        </tbody>
                        </table>
                        <!--/form-->
                    </div>
                </div>
                    
                <?php 
                include_once WP_PLUGIN_DIR . '/tzs/front-end/tzs.my.record_pickup.php';
                ?>
                <?php 
                include_once WP_PLUGIN_DIR . '/tzs/front-end/tzs.my.new_order.php';
                ?>
    
    <script src="/wp-content/plugins/tzs/assets/js/jquery.stickytableheaders.min.js"></script>
                    <script>
                    // Функция, отрабатывающая после готовности HTML-документа
                    jQuery(document).ready(function(){
                        jQuery('.entry-title').hide();
                        /*jQuery('#tbl_products').on('click', 'td', function(e) {  
                                var nonclickable = 'true' == e.delegateTarget.rows[1].cells[this.cellIndex].getAttribute('nonclickable');
                                var id = this.parentNode.getAttribute("rid");
                                //alert('Тыц-тыц: cellIndex - '+this.cellIndex+', textContent -'+this.textContent+', id -'+id+', nonclickable - '+nonclickable);
                                if (!nonclickable && (id != null)) {
                                    document.location = "/account/view-shipment/?id="+id+"&link=my-shipments&active=<?php 
                echo $active;
                ?>
";
                                }
                        });*/
                        
                        jQuery("#tbl_products").stickyTableHeaders();
                        /*jQuery("#icon_set").hover(function(e) { 
                            //alert('e.pageY='+e.pageY+'\ne.pageX'+e.pageX);
                            var id = jQuery(this).attr('at');
                            jQuery('div[for='+id+']').css({
                                'top': e.pageY,
                                'left': e.pageX,
                            });
                            doDisplay(id);
                        });*/
    
                        jQuery("input[type=radio]").change(function (e) {
                            var order_id = e.target.getAttribute('order-id');
                            var order_status = e.target.getAttribute('order-status');
                            var top_status = e.target.getAttribute('top-status');
                            var record_active = e.target.getAttribute('record-active');
                            
                            jQuery("#table_record_id").attr('value', e.target.value);
                            jQuery("#table_record_active").attr('value', record_active);
                            jQuery("#table_record_order_id").attr('value', order_id);
                            jQuery("#table_record_order_status").attr('value', order_status);
                            jQuery("#table_record_top_status").attr('value', top_status);
                            
                            if (top_status == 2) {
                                jQuery("#pickup_button").hide();
                                
                                if (order_status != '') {
                                    jQuery("#vip_pickup_button").text('Счет ТОП $');
                                } else {
                                    jQuery("#vip_pickup_button").text('');
                                }
                            } else if (top_status == 1) {
                                jQuery("#vip_pickup_button").text('ТОП $');
                                jQuery("#pickup_button").hide();
                                jQuery("#vip_pickup_button").show();
                            } else {
                                jQuery("#vip_pickup_button").text('ТОП $');
                                jQuery("#pickup_button").show();
                                jQuery("#vip_pickup_button").show();
                            }
                        });
                        
                        jQuery("#pickup_button").on('click', function(event) {  
                            id = jQuery("#table_record_id").attr('value');
                            if (id !== '0') {
                                promptPickUp(id, 'SH');
                            } else {
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                        
                        jQuery("#vip_pickup_button").on('click', function(event) {  
                            var id = jQuery("#table_record_id").attr('value');
                            var order_id = jQuery("#table_record_order_id").attr('value');
                            var order_status = jQuery("#table_record_order_status").attr('value');
                            //alert('id='+id+', order_id='+order_id+', order_status='+order_status);
                            
                            if (id !== '0') {
                                if (order_status == '') {
                                    promptVipPickUp(id, 'SH');
                                } else {
                                    window.location.replace("<?php 
                echo get_site_url();
                ?>
/account/view-order/?id=" + order_id);
                                }
                            } else {                            
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                        
                        jQuery("#view_button").on('click', function(event) {  
                            id = jQuery("#table_record_id").attr('value');
                            active = jQuery("#table_record_active").attr('value');
                            if (id !== '0') {
                                window.location.replace("<?php 
                echo get_site_url();
                ?>
/account/view-shipment/?id=" + id + "&link=my-shipments&active=" + active);
                            } else {
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                        
                        jQuery("#edit_button").on('click', function(event) {  
                            id = jQuery("#table_record_id").attr('value');
                            if (id !== '0') {
                                document.location = "<?php 
                echo get_site_url();
                ?>
/account/edit-shipment/?id=" + id;
                            } else {                            
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                        
                        jQuery("#duplicate_button").on('click', function(event) {  
                            id = jQuery("#table_record_id").attr('value');
                            if (id !== '0') {
                                document.location = "<?php 
                echo get_site_url();
                ?>
/account/add-shipment/?duplicate=" + id;
                            } else {                            
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                        
                        jQuery("#delete_button").on('click', function(event) {  
                            id = jQuery("#table_record_id").attr('value');
                            if (id !== '0') {
                                promptDelete(id, <?php 
                echo $active;
                ?>
);
                            } else {                            
                                ksk_show_msg('Необходимо выбрать запись с помощью переключателя в первом столбце', 'Ошибка');
                                event.preventDefault();
                            }
                        });
                    });
                    
                    function doDisplay(id) {
                        //alert('doDisplay: id=' + id);
                        var el = jQuery('div[for='+id+']');
                        if (el.attr('style') == null) {
                                el.attr('style', 'display:none;');
                                jQuery('a[at='+id+']').attr('id', 'icon_set');
                        } else {
                                el.removeAttr('style');
                                jQuery('a[at='+id+']').attr('id', 'icon_set_cur');
                        }
                        jQuery("div[id2=menu]").each(function(i) {
                                var id2 = this.getAttribute('for');
                                if (id2 != ''+id) {
                                        this.setAttribute('style', 'display:none;');
                                        jQuery('a[at='+id2+']').attr('id', 'icon_set');
                                }
                        });
                    }

                    function promptDelete(id, active) {
                    if (active === 1) {
                        var s_text = '<div><h2>Удалить запись '+id+' или перенести в архив ?</h2><hr/><p>Запись из архива можно в любой момент снова опубликовать.</p></div>';
                        buttons1 = new Object({
                                                'В архив': function () {
                                                        jQuery(this).dialog("close");
                                                        doDelete(id, 0);
                                                },
                                                'Удалить': function () {
                                                        jQuery(this).dialog("close");
                                                        doDelete(id, 1);
                                                },
                                                'Отменить': function () {
                                                        jQuery(this).dialog("close");
                                                }
                                            });
                    } else {
                        var s_text = '<div><h2>Удалить запись '+id+' из архива ?</h2><hr/><p>Запись из архива можно в любой момент снова опубликовать.</p></div>';
                        buttons1 = new Object({
                                                'Удалить': function () {
                                                        jQuery(this).dialog("close");
                                                        doDelete(id, 1);
                                                },
                                                'Отменить': function () {
                                                        jQuery(this).dialog("close");
                                                }
                                            });
                    }
                            jQuery('<div></div>').appendTo('body')
                                    .html(s_text)
                                    .dialog({
                                            modal: true,
                                            title: 'Удаление',
                                            zIndex: 10000,
                                            autoOpen: true,
                                            width: 'auto',
                                            resizable: false,
                                            buttons: buttons1,
                                            close: function (event, ui) {
                                                    jQuery(this).remove();
                                            }
                                    });
                    }

                    function doDelete(id, is_delete) {
                            var data = {
                                    'action': 'tzs_delete_shipment',
                                    'id': id,
                                'is_delete': is_delete
                            };

                            jQuery.post(ajax_url, data, function(response) {
                                    if (response == '1') {
                                            location.reload();
                                    } else {
                                            alert('Не удалось удалить: '+response);
                                    }
                            });
                    }
                    </script>
                    <?php 
                build_pages_footer($page, $pages);
            }
        }
    }
    $output = ob_get_contents();
    ob_end_clean();
    return $output;
}
Esempio n. 2
0
function tzs_front_end_tables_reload()
{
    // Возвращаемые переменные
    $output_info = '';
    $output_error = '';
    $output_tbody = '';
    $output_pnav = '';
    $lastrecid = 0;
    $form_type = get_param_def('form_type', '');
    $type_id = get_param_def('type_id', '0');
    $rootcategory = get_param_def('rootcategory', '0');
    $cur_type_id = get_param_def('cur_type_id', '0');
    $cur_post_name = get_param_def('cur_post_name', '');
    $p_title = get_param_def('p_title', '');
    $page = get_param_def('page', '1');
    $records_per_page = get_param_def('records_per_page', '' . TZS_RECORDS_PER_PAGE);
    $record_pickup_time = get_option('t3s_setting_record_pickup_time', '30');
    //$p_id = get_the_ID();
    //$p_title = the_title('', '', false);
    // Если указан параметр rootcategory, то выводим все товары раздела
    // Иначе - товары категории
    if ($rootcategory === '1' && $type_id === '0') {
        $sql1 = ' AND type_id IN (' . tzs_build_product_types_id_str($cur_type_id) . ')';
        $p_name = '';
    } else {
        //$sql1 = ' AND type_id='.$type_id;
        $sql1 = '';
        $p_name = get_post_field('post_name', $type_id);
    }
    if ($form_type === 'products') {
        $sp = tzs_validate_pr_search_parameters();
    } else {
        $sp = tzs_validate_search_parameters();
    }
    $errors = $sp['errors'];
    switch ($form_type) {
        case 'products':
            $pr_type_array = tzs_get_children_pages(TZS_PR_ROOT_CATEGORY_PAGE_ID);
            $table_name = TZS_PRODUCTS_TABLE;
            $table_error_msg = 'товаров';
            $table_order_by = 'created';
            $order_table_prefix = 'PR';
            break;
        case 'trucks':
            $table_name = TZS_TRUCK_TABLE;
            $table_error_msg = 'транспорта';
            $table_order_by = 'time';
            $table_prefix = 'tr';
            $order_table_prefix = 'TR';
            break;
        case 'shipments':
            $table_name = TZS_SHIPMENT_TABLE;
            $table_error_msg = 'грузов';
            $table_order_by = 'time';
            $table_prefix = 'sh';
            $order_table_prefix = 'SH';
            break;
        default:
            array_push($errors, "Неверно указан тип формы");
    }
    if (count($errors) > 0) {
        $output_error = print_errors($errors);
    }
    if (count($errors) == 0) {
        if ($form_type === 'products') {
            $s_sql = tzs_search_pr_parameters_to_sql($sp, '');
            $s_title = tzs_search_pr_parameters_to_str($sp);
        } else {
            $s_sql = tzs_search_parameters_to_sql($sp, $table_prefix);
            $s_title = tzs_search_parameters_to_str($sp);
        }
        $output_info = $p_title;
        if (strlen($s_title) > 0) {
            $output_info .= ' * ' . $s_title;
        }
        //$page = current_page_number();
        global $wpdb;
        //$url = current_page_url();
        $pp = floatval($records_per_page);
        $sql = "SELECT COUNT(*) as cnt FROM " . $table_name . " a WHERE active=1 {$sql1} {$s_sql};";
        $res = $wpdb->get_row($sql);
        if (count($res) == 0 && $wpdb->last_error != null) {
            $output_error .= '<div>Не удалось отобразить список ' . $table_error_msg . '. Свяжитесь, пожалуйста, с администрацией сайта.<br>' . $sql . '<br>' . $wpdb->last_error . '</div>';
        } else {
            $records = $res->cnt;
            $pages = ceil($records / $pp);
            if ($pages == 0) {
                $pages = 1;
            }
            if ($page > $pages) {
                $page = $pages;
            }
            $from = ($page - 1) * $pp;
            //$sql = "SELECT * FROM ".$table_name." WHERE active=1 $sql1 $s_sql ORDER BY ".$table_order_by." DESC LIMIT $from,$pp;";
            // Хитрый запрос для отбора ТОП
            $sql = "SELECT a.*,";
            $sql .= " b.number AS order_number,";
            $sql .= " b.status AS order_status,";
            $sql .= " b.dt_pay AS order_dt_pay,";
            $sql .= " b.dt_expired AS order_dt_expired,";
            $sql .= " IFNULL(b.dt_pay, a." . $table_order_by . ") AS dt_sort,";
            $sql .= " IF(b.status IS NOT NULL, 2, IF(ROUND((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(a.dt_pickup))/60, 0) <= " . $record_pickup_time . ", 1, 0)) AS top_status,";
            $sql .= " LOWER(c.code) AS from_code";
            if ($form_type != 'products') {
                $sql .= ", LOWER(d.code) AS to_code";
            }
            $sql .= " FROM " . $table_name . " a";
            $sql .= " LEFT OUTER JOIN wp_tzs_orders b ON (b.tbl_type = '" . $order_table_prefix . "' AND a.id = b.tbl_id AND b.status = 1 AND b.dt_expired > NOW())";
            $sql .= " LEFT OUTER JOIN wp_tzs_countries c ON (a.from_cid = c.country_id)";
            if ($form_type != 'products') {
                $sql .= " LEFT OUTER JOIN wp_tzs_countries d ON (a.to_cid = d.country_id)";
            }
            $sql .= " WHERE active=1 {$sql1} {$s_sql}";
            $sql .= " ORDER BY top_status DESC, order_status DESC, dt_sort DESC";
            $sql .= " LIMIT {$from},{$pp};";
            $res = $wpdb->get_results($sql);
            if (count($res) == 0 && $wpdb->last_error != null) {
                $output_error .= '<div>Не удалось отобразить список ' . $table_error_msg . '. Свяжитесь, пожалуйста, с администрацией сайта.<br>' . $sql . '<br>' . $wpdb->last_error . '</div>';
            } else {
                if (count($res) == 0) {
                    $output_error .= '<div>По Вашему запросу ничего не найдено.</div>';
                } else {
                    foreach ($res as $row) {
                        if ($form_type === 'products') {
                            $output_tbody .= tzs_products_table_record_out($row, $form_type, $pr_type_array);
                        } else {
                            $output_tbody .= tzs_tr_sh_table_record_out($row, $form_type);
                        }
                        $lastrecid = $row->id;
                    }
                }
                // Пагинация
                if ($pages > 1) {
                    if ($page > 1) {
                        $page0 = $page - 1;
                        $output_pnav .= '<a tag="page" page="' . $page0 . '" href="javascript:TblTbodyReload(' . $page0 . ')">« Предыдущая</a>&nbsp;';
                    }
                    $start = 1;
                    $stop = $pages;
                    for ($i = $start; $i <= $stop; $i++) {
                        if ($i == $page) {
                            $output_pnav .= '&nbsp;&nbsp;<span>' . $i . '</span>&nbsp;';
                        } else {
                            $output_pnav .= '&nbsp;&nbsp;<a tag="page" page="' . $i . '" href="javascript:TblTbodyReload(' . $i . ')">' . $i . '</a>&nbsp;';
                        }
                    }
                    if ($page < $pages) {
                        $page1 = $page + 1;
                        $output_pnav .= '&nbsp;&nbsp;<a tag="page" page="' . $page1 . '" href="javascript:TblTbodyReload(' . $page1 . ')">Следующая »</a>';
                    }
                }
            }
        }
    }
    $output = array('output_info' => $output_info, 'output_error' => $output_error, 'output_tbody' => $output_tbody, 'output_pnav' => $output_pnav, 'output_tbody_cnt' => count($res), 'lastrecid' => $lastrecid, 'type_id' => $type_id, 'rootcategory' => $rootcategory, 'sql' => $sql, 'sql1' => $sql1, 's_sql' => $s_sql);
    //echo json_encode($output);
    // print_r($output_tbody);
    return $output;
}