Beispiel #1
0
function add_api_counter()
{
    global $nc_core, $db;
    global $counters, $default_templ_id, $UI_CONFIG;
    global $CounterCatalogueId, $CounterRating, $CounterAdvert, $CounterColor, $CounterPicture, $CounterTrackLinks, $CounterInAllTempl, $OpenstatRules, $counter_id;
    if (isset($_POST['CounterCatalogueId'])) {
        // непосредственно добавление
        $counter_id = intval($counter_id);
        try {
            // регистрация нового юзера опенстат
            if (!$nc_core->get_settings('Openstat_Login', 'stats')) {
                if (!isset($_POST['OpenstatRules'])) {
                    throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_LICENSE_NOT_AGREE);
                }
                $user = nc_openstat_register_user($err_code);
                if (!is_object($user)) {
                    if ($user === NULL) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_NO_PRODUCT_NUMBER);
                        // не отослали № лицензии или ключ
                    } elseif ($err_code != 200) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_NO_CONN_WITH_NETCAT . $err_code);
                        //неткэт упал?? О_о
                    } elseif ($user == 0) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_INVALID_PRODUCT_NUMBER);
                        // пират (неверная пара № лицензии-ключ)!
                    } elseif ($user == 409) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_USER_ALREADY_REGISTERED);
                        // уже зареген
                    } else {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_NEW_USER_UNKNOWN_ERROR . $user);
                        // просто ошибка, походу от сервера Openstat, выводим $result - ее код
                    }
                }
                $nc_core->set_settings("Openstat_Login", $user->login, 'stats');
                $nc_core->set_settings("Openstat_Password", $user->password, 'stats');
            }
            $counter_params['site_url'] = "http://" . ($CounterCatalogueId ? $nc_core->catalogue->get_by_id($CounterCatalogueId, 'Domain') ? $nc_core->catalogue->get_by_id($CounterCatalogueId, 'Domain') : $_SERVER['SERVER_NAME'] : $_SERVER['SERVER_NAME']);
            $counter_params['title'] = $CounterCatalogueId ? $nc_core->catalogue->get_by_id($CounterCatalogueId, 'Catalogue_Name') : $nc_core->get_settings("ProjectName", 'system');
            $counter_params['title'] = $nc_core->NC_UNICODE ? $counter_params['title'] : $nc_core->utf8->win2utf($counter_params['title']);
            $counter_params['description'] = '';
            $counter_params['participates_in_rating'] = isset($CounterRating) ? "true" : "false";
            $counter_params['is_advert_publisher'] = isset($CounterAdvert) ? "true" : "false";
            $openstat = new nc_Openstat_core_class($nc_core->get_settings('Openstat_Login', 'stats'), $nc_core->get_settings('Openstat_Password', 'stats'));
            if (!$counter_id) {
                // добавление
                $openstat_counter_id = $openstat->make_counter($counter_params, $err_code);
                if (!$openstat_counter_id) {
                    if ($err_code == 401) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_COUNTER_AUTH_ERROR);
                        // 401 ошибка - неверный логин-пароль
                    } else {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_NEW_COUNTER_UNKNOWN_ERROR . $err_code);
                        // ошибка, выводим ее код
                    }
                }
            } else {
                //изменение
                $openstat_counter_id = $counters[$counter_id]->Openstat_Counter_Id;
                $openstat->change_counter($openstat_counter_id, $counter_params, $err_code);
                if ($err_code != 204) {
                    if ($err_code == 401) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_COUNTER_AUTH_ERROR);
                        // 401 ошибка - неверный логин-пароль
                    } elseif ($err_code == 404) {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_INVALID_OPENSTAT_COUNTER_ID);
                        // 404 ошибка - нет такого счетчика
                    } else {
                        throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_EDIT_COUNTER_UNKNOWN_ERROR . $err_code);
                        // ошибка, выводим ее код
                    }
                }
            }
            $counter_visual_params['color'] = $CounterColor + 0;
            $counter_visual_params['picture'] = $CounterPicture + 0;
            $counter_visual_params['track_links'] = $CounterTrackLinks ? $CounterTrackLinks : 'none';
            $counter_code = $openstat->get_counter_code($openstat_counter_id, $counter_visual_params, $err_code);
            if (!$counter_code) {
                throw new Exception(NETCAT_MODULE_STATS_OPENSTAT_ERROR_NEW_CODE_UNKNOWN_ERROR . $err_code);
                // ошибка, выводим ее код
            }
            if (!$counter_id) {
                // добавление
                $db->query("INSERT INTO `Stats_Openstat_Counters` (`Openstat_Counter_Id`, `Title`, `Rating`, `Advert`, `Color`, `Size`, `TrackLinks`, `Counter_Code`, `User_Counter_Code`, `Catalogue_Id`, `LastUpdated`, `Created`) VALUES ('" . $db->escape($openstat_counter_id) . "', '" . $db->escape($counter_params['title']) . "', '" . ($counter_params['participates_in_rating'] == 'true' ? '1' : '0') . "', '" . ($counter_params['is_advert_publisher'] == 'true' ? '1' : '0') . "', '" . $db->escape($counter_visual_params['color']) . "', '" . $db->escape($counter_visual_params['picture']) . "', '" . $db->escape($counter_visual_params['track_links']) . "', '" . $db->prepare($counter_code) . "', '" . "0', '" . $db->escape($CounterCatalogueId ? $CounterCatalogueId : '0') . "', '" . date("Y-m-d H:i:s") . "', '" . date("Y-m-d H:i:s") . "')");
            } else {
                //изменение
                $db->query("UPDATE `Stats_Openstat_Counters` SET " . "`Openstat_Counter_Id` = '" . $db->escape($openstat_counter_id) . "', `Title` = '" . $db->escape($counter_params['title']) . "', `Rating` = '" . ($counter_params['participates_in_rating'] == 'true' ? '1' : '0') . "', `Advert` = '" . ($counter_params['is_advert_publisher'] == 'true' ? '1' : '0') . "', `Color` = '" . $db->escape($counter_visual_params['color']) . "', `Size` = '" . $db->escape($counter_visual_params['picture']) . "', `TrackLinks` = '" . $db->escape($counter_visual_params['track_links']) . "', `Counter_Code` = '" . $db->prepare($counter_code) . "', `User_Counter_Code` = '0" . "', `Catalogue_Id` = '" . $db->escape($CounterCatalogueId ? $CounterCatalogueId : '0') . "', `LastUpdated` = '" . date("Y-m-d H:i:s") . "' WHERE `Counter_Id` = '" . $counter_id . "'");
            }
            if (!$db->rows_affected) {
                $openstat->delete_counter($counter_id);
                throw new Exception(NETCAT_MODULE_STATS_DB_INSERT_ERR);
            }
            $new_counter_id = $db->insert_id;
            if ($CounterInAllTempl) {
                nc_openstat_put_counter_to_templates();
            }
            if ($counter_id) {
                nc_print_status(NETCAT_MODULE_STATS_CHANGES_SAVED, "ok");
            } else {
                nc_print_status(str_replace("%PASE_ID", $new_counter_id, NETCAT_MODULE_STATS_OPENSTAT_API_COUNTER_CREATED), "ok");
            }
            return false;
        } catch (Exception $e) {
            nc_print_status($e->getMessage(), "error");
        }
    }
    // ------------------------- форма добавления ----------------------------
    echo "<form name='addCounterForm' id='addCounterForm' method='post' action='?sub_view=counters&phase=1'>\n";
    if ($counter_id) {
        echo "<input type='hidden' name='counter_id' value='" . $counter_id . "'/>\n";
    }
    if (!($sites_ddlist = show_sites_without_counter_ddlist($counters, $default_templ_id ? $default_templ_id : $CounterCatalogueId))) {
        nc_print_status(NETCAT_MODULE_STATS_OPENSTAT_ERROR_ALREADY_COUNTERS_FOR_ALL_SITES, "error");
    } else {
        echo $sites_ddlist;
        $field_display = new nc_admin_fieldset(NETCAT_MODULE_STATS_OPENSTAT_DISPLAY_SETTINGS);
        // выбор цвета счетчика
        $field_display->add("<p>" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_COLOR . "<br />\n            <select name='CounterColor'>");
        for ($i = 0; $i < NETCAT_MODULE_STATS_OPENSTAT_COUNTER_COLOR_COUNT; $i++) {
            $field_display->add("<option value='" . $i . "'" . ($i == $CounterColor ? " selected" : "") . ">" . constant("NETCAT_MODULE_STATS_OPENSTAT_COUNTER_COLOR_" . $i) . "</option>\n");
        }
        $field_display->add("</select></p>\n");
        // выбор типа (размера) картинки счетчика
        $field_display->add("<p>" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_PICTURE_TYPE . "<br />\n            <select name='CounterPicture'>");
        for ($i = 1; $i <= NETCAT_MODULE_STATS_OPENSTAT_COUNTER_PICTURE_TYPE_COUNT; $i++) {
            $field_display->add("<option value='" . $i . "'" . ($i == $CounterPicture ? " selected" : "") . ">" . constant("NETCAT_MODULE_STATS_OPENSTAT_COUNTER_PICTURE_TYPE_" . $i) . "</option>\n");
        }
        $field_display->add("</select></p>\n");
        // посчёт уходов
        $field_display->add("<p>" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_TRACK_LINKS . "<br />\n            <select name='CounterTrackLinks'>" . "<option value='none'" . ($CounterTrackLinks == 'none' ? " selected" : "") . ">" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_TRACK_LINKS_NONE . "</option>\n" . "<option value='all'" . ($CounterTrackLinks == 'all' ? " selected" : "") . ">" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_TRACK_LINKS_ALL . "</option>\n" . "<option value='ext'" . ($CounterTrackLinks == 'ext' ? " selected" : "") . ">" . NETCAT_MODULE_STATS_OPENSTAT_COUNTER_TRACK_LINKS_EXT . "</option>\n" . "</select></p>\n");
        echo $field_display->result();
        unset($field_display);
        $field_other = new nc_admin_fieldset(NETCAT_MODULE_STATS_OPENSTAT_OTHER_SETTINGS);
        $field_other->add("<p>" . nc_admin_checkbox(NETCAT_MODULE_STATS_OPENSTAT_COUNTER_COUNTER_RATING, "CounterRating", $CounterRating) . "</p>");
        $field_other->add("<p>" . nc_admin_checkbox(NETCAT_MODULE_STATS_OPENSTAT_COUNTER_COUNTER_ADVERT, "CounterAdvert", $CounterAdvert) . "</p>");
        $field_other->add("<p>" . nc_admin_checkbox(NETCAT_MODULE_STATS_OPENSTAT_COUNTER_INSERT_IN_ALL_TEMPLATES_RECOMMENDED, "CounterInAllTempl", $CounterCatalogueId ? $CounterInAllTempl : 1) . "</p>");
        echo $field_other->result();
        unset($field_other);
        if (!$nc_core->get_settings('Openstat_Login', 'stats')) {
            echo "<p>" . nc_admin_checkbox(NETCAT_MODULE_STATS_OPENSTAT_RULES, "OpenstatRules", $OpenstatRules) . "</p>";
        }
        echo "</form>";
        $UI_CONFIG->actionButtons[] = array("id" => "add", "caption" => NETCAT_MODULE_STATS_SAVE_CHANGES, "action" => "mainView.submitIframeForm('')");
    }
    if ($default_templ_id !== NULL) {
        $back_action = "history.back()";
    } elseif ($counter_id) {
        $back_action = "urlDispatcher.load('module.stats.openstat.counters')";
    } else {
        $back_action = "urlDispatcher.load('module.stats.openstat.counters(8)')";
    }
    $UI_CONFIG->actionButtons[] = array("id" => "back", "caption" => NETCAT_MODULE_STATS_OPENSTAT_BACK, "align" => "left", "action" => $back_action);
    return true;
}