Exemplo n.º 1
0
 /**
  * Get name of IP range
  *
  * @return string Name of IP range
  */
 function get_name()
 {
     return int2ip($this->IPv4start) . ' - ' . int2ip($this->IPv4end);
 }
Exemplo n.º 2
0
    /**
     * Load data from Request form fields.
     *
     * @return boolean true if loaded data seems valid.
     */
    function load_from_Request()
    {
        global $DB, $Settings, $UserSettings, $GroupCache, $Messages, $action;
        global $current_User, $Session, $localtimenow;
        $is_new_user = $this->ID == 0;
        // ---- Login checking / START ----
        $edited_user_login = param('edited_user_login', 'string');
        if (empty($edited_user_login)) {
            // Empty login
            param_error('edited_user_login', T_('Please enter your login.'));
        }
        param_check_valid_login('edited_user_login');
        $UserCache =& get_UserCache();
        $UserLogin = $UserCache->get_by_login($edited_user_login);
        if ($UserLogin && $UserLogin->ID != $this->ID) {
            // The login is already registered
            $login_error_message = T_('This login already exists.');
            if ($current_User->check_perm('users', 'edit')) {
                $login_error_message = sprintf(T_('This login &laquo;%s&raquo; already exists. Do you want to <a %s>edit the existing user</a>?'), $edited_user_login, 'href="' . get_user_settings_url('profile', $UserLogin->ID) . '"');
            }
            param_error('edited_user_login', $login_error_message);
        }
        if (!param_has_error('edited_user_login')) {
            // We want all logins to be lowercase to guarantee uniqueness regardless of the database case handling for UNIQUE indexes:
            $this->set_from_Request('login', 'edited_user_login', true, 'utf8_strtolower');
        }
        // ---- Login checking / END ----
        $is_identity_form = param('identity_form', 'boolean', false);
        $is_admin_form = param('admin_form', 'boolean', false);
        $has_full_access = $current_User->check_perm('users', 'edit');
        $has_moderate_access = $current_User->check_perm('users', 'moderate');
        // ******* Admin form or new user create ******* //
        // In both cases current user must have users edit permission!
        if (($is_admin_form || $is_identity_form && $is_new_user) && $has_moderate_access) {
            // level/group and email options are displayed on identity form only when creating a new user.
            if ($this->ID != 1) {
                // the admin user group can't be changed
                param_integer_range('edited_user_level', 0, 10, T_('User level must be between %d and %d.'));
                $this->set_from_Request('level', 'edited_user_level', true);
                $edited_user_Group = $GroupCache->get_by_ID(param('edited_user_grp_ID', 'integer'));
                if ($has_full_access || $has_moderate_access && $edited_user_Group->get('level') < $current_User->get_Group()->get('level')) {
                    $this->set_Group($edited_user_Group);
                }
            }
            param('edited_user_source', 'string', true);
            $this->set_from_Request('source', 'edited_user_source', true);
            // set email, without changing the user status
            $edited_user_email = utf8_strtolower(param('edited_user_email', 'string', true));
            param_check_not_empty('edited_user_email', T_('Please enter your e-mail address.'));
            param_check_email('edited_user_email', true);
            $this->set_email($edited_user_email, false);
            if ($is_admin_form) {
                // Admin form
                $notification_sender_email = utf8_strtolower(param('notification_sender_email', 'string', true));
                param_check_email('notification_sender_email');
                if (!empty($notification_sender_email)) {
                    // Change a value of setting
                    $UserSettings->set('notification_sender_email', $notification_sender_email, $this->ID);
                } elseif ($UserSettings->get('notification_sender_email', $this->ID) != '') {
                    // Delete a setting record from DB
                    $UserSettings->delete('notification_sender_email', $this->ID);
                }
                $notification_sender_name = param('notification_sender_name', 'string', true);
                if (!empty($notification_sender_name)) {
                    // Change a value of setting
                    $UserSettings->set('notification_sender_name', $notification_sender_name, $this->ID);
                } elseif ($UserSettings->get('notification_sender_name', $this->ID) != '') {
                    // Delete a setting record from DB
                    $UserSettings->delete('notification_sender_name', $this->ID);
                }
                if ($has_full_access && !isset($this->dbchanges['user_email'])) {
                    // If email address is not changed
                    // Update status of email address in the T_email_address table
                    $edited_email_status = param('edited_email_status', 'string');
                    $EmailAddressCache =& get_EmailAddressCache();
                    $EmailAddress =& $EmailAddressCache->get_by_name($this->get('email'), false, false);
                    if (!$EmailAddress && $edited_email_status != 'unknown') {
                        // Create new record in the T_email_address table
                        $EmailAddress = new EmailAddress();
                        $EmailAddress->set('address', $this->get('email'));
                    }
                    if (!empty($EmailAddress)) {
                        // Save status of an email address
                        $EmailAddress->set('status', $edited_email_status);
                        $EmailAddress->dbsave();
                    }
                }
                if ($current_User->check_perm('spamblacklist', 'edit')) {
                    // User can edit IP ranges
                    // Update status of IP range in DB
                    $edited_iprange_status = param('edited_iprange_status', 'string');
                    $IPRangeCache =& get_IPRangeCache();
                    $IPRange =& $IPRangeCache->get_by_ip(int2ip($UserSettings->get('created_fromIPv4', $this->ID)));
                    if (!$IPRange && !empty($edited_iprange_status)) {
                        // IP range doesn't exist in DB, Create new record
                        $ip_24bit_start = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.0', int2ip($UserSettings->get('created_fromIPv4', $this->ID))));
                        $ip_24bit_end = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.255', int2ip($UserSettings->get('created_fromIPv4', $this->ID))));
                        $IPRange = new IPRange();
                        $IPRange->set('IPv4start', $ip_24bit_start);
                        $IPRange->set('IPv4end', $ip_24bit_end);
                        $IPRange->set('user_count', 1);
                    }
                    if ($IPRange) {
                        // Save status of IP range
                        if ($IPRange->get('status') != 'blocked' && $edited_iprange_status == 'blocked') {
                            // Status was changed to blocked, we should increase counter
                            $IPRange->set('block_count', $IPRange->block_count + 1);
                        } else {
                            if ($IPRange->get('status') == 'blocked' && $edited_iprange_status != 'blocked') {
                                // Status was changed from blocked to another, we should decrease counter
                                $IPRange->set('block_count', $IPRange->block_count - 1);
                            }
                        }
                        $IPRange->set('status', $edited_iprange_status, true);
                        $IPRange->dbsave();
                    }
                }
                if ($current_User->check_perm('stats', 'edit')) {
                    // User can edit Domains
                    $DomainCache =& get_DomainCache();
                    // Update status of Domain in DB
                    $edited_domain_status = param('edited_domain_status', 'string');
                    $user_domain = $UserSettings->get('user_domain', $this->ID);
                    $Domain =& $DomainCache->get_by_name($user_domain, false, false);
                    if (!$Domain && $edited_domain_status != 'unknown' && !empty($user_domain)) {
                        // Domain doesn't exist in DB, Create new record
                        $Domain = new Domain();
                        $Domain->set('name', $user_domain);
                    }
                    if ($Domain) {
                        // Save status of Domain
                        $Domain->set('status', $edited_domain_status, true);
                        $Domain->dbsave();
                    }
                    // Update status of Initial referer in DB
                    load_funcs('sessions/model/_hitlog.funcs.php');
                    $edited_initial_referer_status = param('edited_initial_referer_status', 'string');
                    $initial_referer = $UserSettings->get('initial_referer', $this->ID);
                    $initial_referer_domain = url_part($initial_referer, 'host');
                    $Domain =& get_Domain_by_url($initial_referer);
                    if (!$Domain && $edited_initial_referer_status != 'unknown' && !empty($initial_referer_domain)) {
                        // Domain doesn't exist in DB, Create new record
                        $Domain = new Domain();
                        $Domain->set('name', $initial_referer_domain);
                    }
                    if ($Domain) {
                        // Save status of Domain
                        $Domain->set('status', $edited_initial_referer_status, true);
                        $Domain->dbsave();
                    }
                }
            }
        }
        // ******* Identity form ******* //
        if ($is_identity_form) {
            $can_edit_users = $current_User->check_perm('users', 'edit');
            $edited_user_perms = array('edited-user', 'edited-user-required');
            global $edited_user_age_min, $edited_user_age_max;
            param('edited_user_age_min', 'string', true);
            param('edited_user_age_max', 'string', true);
            param_check_interval('edited_user_age_min', 'edited_user_age_max', T_('Age must be a number.'), T_('The first age must be lower than (or equal to) the second.'));
            if (!param_has_error('edited_user_age_min') && $Settings->get('minimum_age') > 0 && !empty($edited_user_age_min) && $edited_user_age_min < $Settings->get('minimum_age')) {
                // Limit user by minimum age
                param_error('edited_user_age_min', sprintf(T_('You must be at least %d years old to use this service.'), $Settings->get('minimum_age')));
            }
            $this->set_from_Request('age_min', 'edited_user_age_min', true);
            $this->set_from_Request('age_max', 'edited_user_age_max', true);
            $firstname_editing = $Settings->get('firstname_editing');
            if (in_array($firstname_editing, $edited_user_perms) && $this->ID == $current_User->ID || $firstname_editing != 'hidden' && $can_edit_users) {
                // User has a permissions to save Firstname
                param('edited_user_firstname', 'string', true);
                if ($firstname_editing == 'edited-user-required') {
                    // First name is required
                    if ($can_edit_users) {
                        // Display a note message if user can edit all users
                        param_add_message_to_Log('edited_user_firstname', T_('Please enter your first name.'), 'note');
                    } else {
                        // Display an error message
                        param_check_not_empty('edited_user_firstname', T_('Please enter your first name.'));
                    }
                }
                $this->set_from_Request('firstname', 'edited_user_firstname', true);
            }
            $lastname_editing = $Settings->get('lastname_editing');
            if (in_array($lastname_editing, $edited_user_perms) && $this->ID == $current_User->ID || $lastname_editing != 'hidden' && $can_edit_users) {
                // User has a permissions to save Lastname
                param('edited_user_lastname', 'string', true);
                if ($lastname_editing == 'edited-user-required') {
                    // Last name is required
                    if ($can_edit_users) {
                        // Display a note message if user can edit all users
                        param_add_message_to_Log('edited_user_lastname', T_('Please enter last name.'), 'note');
                    } else {
                        // Display an error message
                        param_check_not_empty('edited_user_lastname', T_('Please enter last name.'));
                    }
                }
                $this->set_from_Request('lastname', 'edited_user_lastname', true);
            }
            $nickname_editing = $Settings->get('nickname_editing');
            if (in_array($nickname_editing, $edited_user_perms) && $this->ID == $current_User->ID || $nickname_editing != 'hidden' && $can_edit_users) {
                // User has a permissions to save Nickname
                param('edited_user_nickname', 'string', true);
                if ($nickname_editing == 'edited-user-required') {
                    // Nickname is required
                    if ($can_edit_users) {
                        // Display a note message if user can edit all users
                        param_add_message_to_Log('edited_user_nickname', T_('Please enter your nickname.'), 'note');
                    } else {
                        // Display an error message
                        param_check_not_empty('edited_user_nickname', T_('Please enter your nickname.'));
                    }
                }
                $this->set_from_Request('nickname', 'edited_user_nickname', true);
            }
            param('edited_user_gender', 'string', '');
            if (param_check_gender('edited_user_gender', $Settings->get('registration_require_gender') == 'required')) {
                $this->set_from_Request('gender', 'edited_user_gender', true);
            }
            // ---- Locations / START ----
            load_funcs('regional/model/_regional.funcs.php');
            if (user_country_visible()) {
                // Save country
                $country_ID = param('edited_user_ctry_ID', 'integer', true);
                $country_is_required = $Settings->get('location_country') == 'required' && countries_exist();
                if ($country_is_required && $can_edit_users && $country_ID == 0) {
                    // Display a note message if user can edit all users
                    param_add_message_to_Log('edited_user_ctry_ID', T_('Please select a country.'), 'note');
                } else {
                    // Display an error message
                    param_check_number('edited_user_ctry_ID', T_('Please select a country.'), $country_is_required);
                }
                $this->set_from_Request('ctry_ID', 'edited_user_ctry_ID', true);
            }
            if (user_region_visible()) {
                // Save region
                $region_ID = param('edited_user_rgn_ID', 'integer', true);
                $region_is_required = $Settings->get('location_region') == 'required' && regions_exist($country_ID);
                if ($region_is_required && $can_edit_users && $region_ID == 0) {
                    // Display a note message if user can edit all users
                    param_add_message_to_Log('edited_user_rgn_ID', T_('Please select a region.'), 'note');
                } else {
                    // Display an error message
                    param_check_number('edited_user_rgn_ID', T_('Please select a region'), $region_is_required);
                }
                $this->set_from_Request('rgn_ID', 'edited_user_rgn_ID', true);
            }
            if (user_subregion_visible()) {
                // Save subregion
                $subregion_ID = param('edited_user_subrg_ID', 'integer', true);
                $subregion_is_required = $Settings->get('location_subregion') == 'required' && subregions_exist($region_ID);
                if ($subregion_is_required && $can_edit_users && $subregion_ID == 0) {
                    // Display a note message if user can edit all users
                    param_add_message_to_Log('edited_user_subrg_ID', T_('Please select a sub-region.'), 'note');
                } else {
                    // Display an error message
                    param_check_number('edited_user_subrg_ID', T_('Please select a sub-region.'), $subregion_is_required);
                }
                $this->set_from_Request('subrg_ID', 'edited_user_subrg_ID', true);
            }
            if (user_city_visible()) {
                // Save city
                $city_ID = param('edited_user_city_ID', 'integer', true);
                $city_is_required = $Settings->get('location_city') == 'required' && cities_exist($country_ID, $region_ID, $subregion_ID);
                if ($city_is_required && $can_edit_users && $city_ID == 0) {
                    // Display a note message if user can edit all users
                    param_add_message_to_Log('edited_user_city_ID', T_('Please select a city.'), 'note');
                } else {
                    // Display an error message
                    param_check_number('edited_user_city_ID', T_('Please select a city.'), $city_is_required);
                }
                $this->set_from_Request('city_ID', 'edited_user_city_ID', true);
            }
            // ---- Locations / END ----
            // ---- Organizations / START ----
            $organizations = param('organizations', 'array:string');
            $org_roles = param('org_roles', 'array:string');
            $this->update_organizations($organizations, $org_roles);
            // ---- Organizations / END ----
            // ---- Additional Fields / START ----
            // Load all defined userfields for following checking of required fields
            $this->userfield_defs_load();
            // EXPERIMENTAL user fields & EXISTING fields:
            // Get indices of existing userfields:
            $userfield_IDs = $DB->get_results('
						SELECT uf_ID, uf_ufdf_ID
							FROM T_users__fields
						 WHERE uf_user_ID = ' . $this->ID);
            foreach ($userfield_IDs as $userfield) {
                if (!isset($this->userfield_defs[$userfield->uf_ufdf_ID])) {
                    // If user field definition doesn't exist in DB then delete field value of this user:
                    $this->userfield_update($userfield->uf_ID, NULL);
                    continue;
                }
                $field_type = $this->userfield_defs[$userfield->uf_ufdf_ID][0] == 'text' ? 'text' : 'string';
                $uf_val = param('uf_' . $userfield->uf_ID, $field_type, '');
                if ($this->userfield_defs[$userfield->uf_ufdf_ID][0] == 'list' && $uf_val == '---') {
                    // Option list has a value '---' for empty value
                    $uf_val = '';
                }
                $uf_val = trim(strip_tags($uf_val));
                if (empty($uf_val) && $this->userfield_defs[$userfield->uf_ufdf_ID][2] == 'require') {
                    // Display error for empty required field
                    if ($current_User->check_perm('users', 'edit')) {
                        // Display a note message if user can edit all users
                        param_add_message_to_Log('uf_' . $userfield->uf_ID, sprintf(T_('Please enter a value for the field "%s".'), $this->userfield_defs[$userfield->uf_ufdf_ID][1]), 'note');
                    } else {
                        // Display an error message
                        param_error('uf_' . $userfield->uf_ID, T_('Please enter a value.'));
                    }
                } else {
                    // Update field
                    if ($this->userfield_defs[$userfield->uf_ufdf_ID][0] == 'url') {
                        // Check url fields
                        param_check_url('uf_' . $userfield->uf_ID, 'commenting');
                    }
                    if ($this->userfield_defs[$userfield->uf_ufdf_ID][4] == 'list') {
                        // Option "Multiple values" == "List style"
                        // Split by comma and save each phrase as separate field
                        $uf_val = explode(',', $uf_val);
                        foreach ($uf_val as $v => $val) {
                            $val = trim($val);
                            if ($v == 0) {
                                // Update field with first value
                                $this->userfield_update($userfield->uf_ID, $val);
                            } else {
                                if (!empty($val)) {
                                    // Add a new field for new values
                                    $this->userfield_add($userfield->uf_ufdf_ID, $val);
                                }
                            }
                        }
                    } else {
                        // Forbidden & Allowed fields
                        $this->userfield_update($userfield->uf_ID, $uf_val);
                    }
                }
            }
            // Duplicate fields:
            if ($is_new_user) {
                $user_id = param('orig_user_ID', 'integer', 0);
                if ($user_id !== 0) {
                    $userfield_IDs = $DB->get_results('
								SELECT uf_ID, uf_ufdf_ID
									FROM T_users__fields
								 WHERE uf_user_ID = ' . $user_id);
                    foreach ($userfield_IDs as $userfield_ID) {
                        $uf_val = param('uf_' . $userfield_ID->uf_ID, 'string', '');
                        $uf_type = $userfield_ID->uf_ufdf_ID;
                        if (!empty($uf_val)) {
                            $this->userfield_add($uf_type, $uf_val);
                        }
                    }
                }
            }
            $uf_new_fields = param('uf_new', 'array:array:string');
            // Recommended & required fields (it still not saved in DB)
            $uf_add_fields = param('uf_add', 'array:array:string');
            // Added fields
            // Add a new field: (JS is not enabled)
            if ($action == 'add_field') {
                // Button 'Add' new field is pressed
                $new_field_type = param('new_field_type', 'integer', 0);
                if (empty($new_field_type)) {
                    // We cannot add a new field without type
                    param_error('new_field_type', T_('Please select a field type.'));
                } else {
                    // Save an adding field(in the array) to display it again if errors will be exist
                    $new_field_type_exists = false;
                    if ($this->userfield_defs[$new_field_type][4] == 'allowed' || $this->userfield_defs[$new_field_type][4] == 'list') {
                        // This field can be duplicated
                        global $add_field_types;
                        $add_field_types = array($new_field_type);
                    } else {
                        // We should to solve we can add this field or don't
                        if (!isset($uf_new_fields[$new_field_type]) && !isset($uf_add_fields[$new_field_type])) {
                            // User is adding this field first time
                            if (is_array($userfield_IDs) && count($userfield_IDs) > 0) {
                                // User has fields that saved in DB
                                foreach ($userfield_IDs as $userfield) {
                                    if ($userfield->uf_ufdf_ID == $new_field_type) {
                                        // New adding field already exists for current user in DB
                                        $new_field_type_exists = true;
                                        break;
                                    }
                                }
                            }
                            if (!$new_field_type_exists) {
                                // Field doesn't still exist for current user
                                global $add_field_types;
                                $add_field_types = array($new_field_type);
                            }
                        } else {
                            // Field exists, no duplicates available
                            $new_field_type_exists = true;
                        }
                        if ($new_field_type_exists) {
                            // Field already is added for current user, we should display error about this
                            param_error('new_field_type', T_('You already added this field, please select another.'));
                        }
                    }
                    if (!$new_field_type_exists) {
                        // Mark a new field to enter a value
                        param_error('uf_add[' . $new_field_type . '][]', T_('Please enter a value in this new field.'));
                    }
                }
            }
            // Save a New recommended & require fields AND Adding fields
            if (count($uf_new_fields) > 0 || count($uf_add_fields) > 0) {
                $uf_fields = array('new' => $uf_new_fields, 'add' => $uf_add_fields);
                foreach ($uf_fields as $uf_type => $uf_new_fields) {
                    if ($uf_type == 'add') {
                        // Save an adding fields to display it again if errors will be exist
                        global $add_field_types;
                        if (!isset($add_field_types)) {
                            // Don't rewrite already existing array
                            $add_field_types = array();
                        }
                    }
                    foreach ($uf_new_fields as $uf_new_id => $uf_new_vals) {
                        foreach ($uf_new_vals as $uf_new_val) {
                            if ($this->userfield_defs[$uf_new_id][0] == 'list' && $uf_new_val == '---') {
                                // Option list has a value '---' for empty value
                                $uf_new_val = '';
                            }
                            $uf_new_val = trim(strip_tags($uf_new_val));
                            if ($uf_new_val != '') {
                                // Insert a new field in DB if it is filled
                                if ($this->userfield_defs[$uf_new_id][0] == 'url') {
                                    // Check url fields
                                    param_check_url('uf_' . $uf_type . '[' . $uf_new_id . '][]', 'commenting');
                                }
                                if ($this->userfield_defs[$uf_new_id][4] == 'list') {
                                    // Option "Multiple values" == "List style"
                                    // Split by comma and save each phrase as separate field
                                    $uf_new_val = explode(',', $uf_new_val);
                                    foreach ($uf_new_val as $val) {
                                        $val = trim($val);
                                        if (!empty($val)) {
                                            // Exclude empty values(spaces)
                                            $this->userfield_add((int) $uf_new_id, $val);
                                        }
                                    }
                                } else {
                                    // Forbidden & Allowed fields
                                    $this->userfield_add((int) $uf_new_id, $uf_new_val);
                                }
                            } elseif (empty($uf_new_val) && $this->userfield_defs[$uf_new_id][2] == 'require') {
                                // Display error for empty required field & new adding field
                                if ($current_User->check_perm('users', 'edit')) {
                                    // Display a note message if user can edit all users
                                    param_add_message_to_Log('uf_' . $uf_type . '[' . $uf_new_id . '][]', sprintf(T_('Please enter a value for the field "%s".'), $this->userfield_defs[$uf_new_id][1]), 'note');
                                } else {
                                    // Display an error message
                                    param_error('uf_' . $uf_type . '[' . $uf_new_id . '][]', T_('Please enter a value.'));
                                }
                            }
                            if ($uf_type == 'add') {
                                // Save new added field, it used on the _user_identity.form
                                $add_field_types[] = $uf_new_id;
                            }
                        }
                    }
                }
            }
            // ---- Additional Fields / END ----
            // update profileupdate_date, because a publicly visible user property was changed
            $this->set_profileupdate_date();
        }
        // ******* Password form ******* //
        $is_password_form = param('password_form', 'boolean', false);
        if ($is_password_form || $is_new_user) {
            $reqID = param('reqID', 'string', '');
            global $edited_user_pass1, $edited_user_pass2;
            $edited_user_pass1 = param('edited_user_pass1', 'string', true);
            $edited_user_pass2 = param('edited_user_pass2', 'string', true);
            // Remove the invalid chars from password vars
            $edited_user_pass1 = preg_replace('/[<>&]/', '', $edited_user_pass1);
            $edited_user_pass2 = preg_replace('/[<>&]/', '', $edited_user_pass2);
            if ($is_new_user || !empty($reqID) && $reqID == $Session->get('core.changepwd.request_id')) {
                // current password is not required:
                //   - new user creating process
                //   - password change requested by email
                if (param_check_passwords('edited_user_pass1', 'edited_user_pass2', true, $Settings->get('user_minpwdlen'))) {
                    // We can set password
                    $this->set_password($edited_user_pass2);
                }
            } else {
                // ******* Password edit form ****** //
                $current_user_pass = param('current_user_pass', 'string', true);
                if ($this->ID != $current_User->ID) {
                    // Set the messages when admin changes a password of other user
                    $checkpwd_params = array('msg_pass_new' => T_('Please enter new password.'), 'msg_pass_twice' => T_('Please enter new password twice.'));
                } else {
                    // Use default messages
                    $checkpwd_params = array();
                }
                if (!strlen($current_user_pass)) {
                    param_error('current_user_pass', T_('Please enter your current password.'));
                    param_check_passwords('edited_user_pass1', 'edited_user_pass2', true, $Settings->get('user_minpwdlen'), $checkpwd_params);
                } else {
                    if ($has_full_access && $this->ID != $current_User->ID) {
                        // Admin is changing a password of other user, Check a password of current admin
                        $pass_to_check = $current_User->pass;
                        $current_user_salt = $current_User->salt;
                    } else {
                        // User is changing own pasword
                        $pass_to_check = $this->pass;
                        $current_user_salt = $this->salt;
                    }
                    if ($pass_to_check == md5($current_user_salt . $current_user_pass, true)) {
                        if (param_check_passwords('edited_user_pass1', 'edited_user_pass2', true, $Settings->get('user_minpwdlen'), $checkpwd_params)) {
                            // We can set password
                            $this->set_password($edited_user_pass2);
                        }
                    } else {
                        param_error('current_user_pass', T_('Your current password is incorrect.'));
                        param_check_passwords('edited_user_pass1', 'edited_user_pass2', true, $Settings->get('user_minpwdlen'), $checkpwd_params);
                    }
                }
            }
        }
        // Used in Preferences & Notifications forms
        $has_messaging_perm = $this->check_perm('perm_messaging', 'reply');
        // ******* Preferences form ******* //
        $is_preferences_form = param('preferences_form', 'boolean', false);
        if ($is_preferences_form) {
            // Other preferences
            param('edited_user_locale', 'string', true);
            $this->set_from_Request('locale', 'edited_user_locale', true);
            // Session timeout
            $edited_user_timeout_sessions = param('edited_user_timeout_sessions', 'string', NULL);
            if (isset($edited_user_timeout_sessions) && ($current_User->ID == $this->ID || $current_User->check_perm('users', 'edit'))) {
                switch ($edited_user_timeout_sessions) {
                    case 'default':
                        $UserSettings->set('timeout_sessions', NULL, $this->ID);
                        break;
                    case 'custom':
                        $UserSettings->set('timeout_sessions', param_duration('timeout_sessions'), $this->ID);
                        break;
                }
            }
            $UserSettings->set('show_online', param('edited_user_showonline', 'integer', 0), $this->ID);
        }
        // ******* Notifications form ******* //
        $is_subscriptions_form = param('subscriptions_form', 'boolean', false);
        if ($is_subscriptions_form) {
            if ($action == 'subscribe') {
                // Do only subscribe to new blog (Don't update the user's settings from the same form)
                // A selected blog to subscribe
                $subscribe_blog_ID = param('subscribe_blog', 'integer', 0);
                // Get checkbox values:
                $sub_items = param('sub_items_new', 'integer', 0);
                $sub_comments = param('sub_comments_new', 'integer', 0);
                // Note: we do not check if subscriptions are allowed here, but we check at the time we're about to send something
                if ($subscribe_blog_ID && ($sub_items || $sub_comments)) {
                    // We need to record values:
                    $DB->query('REPLACE INTO T_subscriptions( sub_coll_ID, sub_user_ID, sub_items, sub_comments )
					  VALUES ( ' . $DB->quote($subscribe_blog_ID) . ', ' . $DB->quote($this->ID) . ', ' . $DB->quote($sub_items) . ', ' . $DB->quote($sub_comments) . ' )');
                    $Messages->add(T_('Subscriptions have been changed.'), 'success');
                } else {
                    // Display an error message to inform user about incorrect actions
                    $Messages->add(T_('Please select at least one setting to subscribe on the selected blog.'), 'error');
                }
            } else {
                // Update user's settings
                // Email communication
                $edited_user_email = utf8_strtolower(param('edited_user_email', 'string', true));
                param_check_not_empty('edited_user_email', T_('Please enter your e-mail address.'));
                param_check_email('edited_user_email', true);
                $this->set_email($edited_user_email);
                // set messaging options
                if ($has_messaging_perm) {
                    $UserSettings->set('enable_PM', param('PM', 'integer', 0), $this->ID);
                }
                $emails_msgform = $Settings->get('emails_msgform');
                if ($emails_msgform == 'userset' || $emails_msgform == 'adminset' && $current_User->check_perm('users', 'edit')) {
                    // enable email option is displayed only if user can set or if admin can set and current User is an administrator
                    $UserSettings->set('enable_email', param('email', 'integer', 0), $this->ID);
                }
                // Email format
                $UserSettings->set('email_format', param('edited_user_email_format', 'string', 'auto'), $this->ID);
                // set notification options
                if ($has_messaging_perm) {
                    // update 'notify messages' only if user has messaging rights and this option was displayed
                    $UserSettings->set('notify_messages', param('edited_user_notify_messages', 'integer', 0), $this->ID);
                    $UserSettings->set('notify_unread_messages', param('edited_user_notify_unread_messages', 'integer', 0), $this->ID);
                }
                if ($this->check_role('post_owner')) {
                    // update 'notify_published_comments' only if user has at least one post or user has right to create new post
                    $UserSettings->set('notify_published_comments', param('edited_user_notify_publ_comments', 'integer', 0), $this->ID);
                }
                $is_comment_moderator = $this->check_role('comment_moderator');
                if ($is_comment_moderator || $this->check_role('comment_editor')) {
                    // update 'notify_comment_moderation' only if user is comment moderator/editor at least in one blog
                    $UserSettings->set('notify_comment_moderation', param('edited_user_notify_cmt_moderation', 'integer', 0), $this->ID);
                }
                if ($this->check_perm('admin', 'restricted', false)) {
                    // update 'notify_meta_comments' only if edited user has a permission to back-office
                    $UserSettings->set('notify_meta_comments', param('edited_user_notify_meta_comments', 'integer', 0), $this->ID);
                }
                if ($is_comment_moderator) {
                    // update 'send_cmt_moderation_reminder' only if user is comment moderator at least in one blog
                    $UserSettings->set('send_cmt_moderation_reminder', param('edited_user_send_cmt_moderation_reminder', 'integer', 0), $this->ID);
                }
                if ($this->check_role('post_moderator')) {
                    // update 'notify_post_moderation' and 'send_cmt_moderation_reminder' only if user is post moderator at least in one blog
                    $UserSettings->set('notify_post_moderation', param('edited_user_notify_post_moderation', 'integer', 0), $this->ID);
                    $UserSettings->set('send_pst_moderation_reminder', param('edited_user_send_pst_moderation_reminder', 'integer', 0), $this->ID);
                }
                if ($this->grp_ID == 1) {
                    $UserSettings->set('send_activation_reminder', param('edited_user_send_activation_reminder', 'integer', 0), $this->ID);
                }
                if ($this->check_perm('users', 'edit')) {
                    // edited user has permission to edit all users, save notification preferences
                    $UserSettings->set('notify_new_user_registration', param('edited_user_notify_new_user_registration', 'integer', 0), $this->ID);
                    $UserSettings->set('notify_activated_account', param('edited_user_notify_activated_account', 'integer', 0), $this->ID);
                    $UserSettings->set('notify_closed_account', param('edited_user_notify_closed_account', 'integer', 0), $this->ID);
                    $UserSettings->set('notify_reported_account', param('edited_user_notify_reported_account', 'integer', 0), $this->ID);
                    $UserSettings->set('notify_changed_account', param('edited_user_notify_changed_account', 'integer', 0), $this->ID);
                }
                if ($this->check_perm('options', 'edit')) {
                    // edited user has permission to edit options, save notification preferences
                    $UserSettings->set('notify_cronjob_error', param('edited_user_notify_cronjob_error', 'integer', 0), $this->ID);
                }
                // Newsletter
                $UserSettings->set('newsletter_news', param('edited_user_newsletter_news', 'integer', 0), $this->ID);
                $UserSettings->set('newsletter_ads', param('edited_user_newsletter_ads', 'integer', 0), $this->ID);
                // Emails limit per day
                param_integer_range('edited_user_notification_email_limit', 0, 999, T_('Notificaiton email limit must be between %d and %d.'));
                $UserSettings->set('notification_email_limit', param('edited_user_notification_email_limit', 'integer', 0), $this->ID);
                param_integer_range('edited_user_newsletter_limit', 0, 999, T_('Newsletter limit must be between %d and %d.'));
                $UserSettings->set('newsletter_limit', param('edited_user_newsletter_limit', 'integer', 0), $this->ID);
                /**
                 * Update the subscriptions:
                 */
                $subs_blog_IDs = param('subs_blog_IDs', 'string', true);
                $subs_item_IDs = param('subs_item_IDs', 'string', true);
                // Work the blogs:
                $subscription_values = array();
                $unsubscribed = array();
                $subs_blog_IDs = explode(',', $subs_blog_IDs);
                foreach ($subs_blog_IDs as $loop_blog_ID) {
                    // Make sure no dirty hack is coming in here:
                    $loop_blog_ID = intval($loop_blog_ID);
                    // Get checkbox values:
                    $sub_items = param('sub_items_' . $loop_blog_ID, 'integer', 0);
                    $sub_comments = param('sub_comments_' . $loop_blog_ID, 'integer', 0);
                    if ($sub_items || $sub_comments) {
                        // We have a subscription for this blog
                        $subscription_values[] = "( {$loop_blog_ID}, {$this->ID}, {$sub_items}, {$sub_comments} )";
                    } else {
                        // No subscription here:
                        $unsubscribed[] = $loop_blog_ID;
                    }
                }
                // Note: we do not check if subscriptions are allowed here, but we check at the time we're about to send something
                if (count($subscription_values)) {
                    // We need to record values:
                    $DB->query('REPLACE INTO T_subscriptions( sub_coll_ID, sub_user_ID, sub_items, sub_comments )
												VALUES ' . implode(', ', $subscription_values));
                }
                if (count($unsubscribed)) {
                    // We need to make sure some values are cleared:
                    $DB->query('DELETE FROM T_subscriptions
												 WHERE sub_user_ID = ' . $this->ID . '
													 AND sub_coll_ID IN (' . implode(', ', $unsubscribed) . ')');
                }
                // Individual post subscriptions
                if (!empty($subs_item_IDs)) {
                    // user was subscribed to at least one post update notification
                    $subs_item_IDs = explode(',', $subs_item_IDs);
                    $unsubscribed = array();
                    foreach ($subs_item_IDs as $loop_item_ID) {
                        if (!param('item_sub_' . $loop_item_ID, 'integer', 0)) {
                            // user wants to unsubscribe from this post notifications
                            $unsubscribed[] = $loop_item_ID;
                        }
                    }
                    if (!empty($unsubscribed)) {
                        // unsubscribe list is not empty, delete not wanted subscriptions
                        $DB->query('DELETE FROM T_items__subscriptions
												 WHERE isub_user_ID = ' . $this->ID . '
													 AND isub_item_ID IN (' . implode(', ', $unsubscribed) . ')');
                    }
                }
            }
        }
        // ******* Advanced form ******* //
        $is_advanced_form = param('advanced_form', 'boolean', false);
        if ($is_advanced_form) {
            $UserSettings->set('admin_skin', param('edited_user_admin_skin', 'string'), $this->ID);
            // Action icon params:
            param_integer_range('edited_user_action_icon_threshold', 1, 5, T_('The threshold must be between 1 and 5.'));
            $UserSettings->set('action_icon_threshold', param('edited_user_action_icon_threshold', 'integer', true), $this->ID);
            param_integer_range('edited_user_action_word_threshold', 1, 5, T_('The threshold must be between 1 and 5.'));
            $UserSettings->set('action_word_threshold', param('edited_user_action_word_threshold', 'integer'), $this->ID);
            $UserSettings->set('display_icon_legend', param('edited_user_legend', 'integer', 0), $this->ID);
            // Set bozo validador activation
            $UserSettings->set('control_form_abortions', param('edited_user_bozo', 'integer', 0), $this->ID);
            // Focus on first
            $UserSettings->set('focus_on_first_input', param('edited_user_focusonfirst', 'integer', 0), $this->ID);
            // Results per page
            $edited_user_results_page_size = param('edited_user_results_page_size', 'integer', NULL);
            if (isset($edited_user_results_page_size)) {
                $UserSettings->set('results_per_page', $edited_user_results_page_size, $this->ID);
            }
        }
        if ($is_preferences_form || $is_identity_form && $is_new_user) {
            // Multiple session
            $multiple_sessions = $Settings->get('multiple_sessions');
            if ($multiple_sessions != 'adminset_default_no' && $multiple_sessions != 'adminset_default_yes' || $current_User->check_perm('users', 'edit')) {
                $UserSettings->set('login_multiple_sessions', param('edited_user_set_login_multiple_sessions', 'integer', 0), $this->ID);
            }
        }
        return !param_errors_detected();
    }
Exemplo n.º 3
0
                 $v = $o['order_country'];
             } else {
                 $v = 'ru';
             }
         }
         $post[$k] = $v;
     }
 } else {
     $post = false;
 }
 $url = $c['int_add_url'];
 if ($c['int_add_pre']) {
     eval($c['int_add_pre']);
 }
 $url = str_replace('{id}', $o['order_id'], $url);
 $url = str_replace('{ip}', int2ip($o['order_ip']), $url);
 $url = str_replace('{wm}', $o['wm'], $url);
 $url = str_replace('{name}', strtr($o['order_name'], ' ', '+'), $url);
 $url = str_replace('{phone}', $o['order_phone'], $url);
 $url = str_replace('{addr}', strtr($addr, ' ', '+'), $url);
 $url = str_replace('{count}', $o['order_count'], $url);
 foreach ($ofps as $k => $v) {
     $url = str_replace('{ofp:' . $k . '}', $v, $url);
 }
 if ($result = curl($url, $post)) {
     $rid = (int) eval($c['int_add_code']);
     if ($rid > 0) {
         order_edit($core, $o['order_id'], array('status' => 2, 'exto' => $rid));
     }
     if ($rid < 0) {
         order_edit($core, $o['order_id'], array('status' => 5, 'reason' => abs($rid)));
Exemplo n.º 4
0
 /**
  * creates some ips range for newly created pool
  * 
  * @return void
  */
 protected function ipsCreate($poolid, $begin, $end)
 {
     $poolid = vf($poolid, 3);
     $begin = ip2int($begin);
     $end = ip2int($end);
     //valid ips ugly check
     if ($begin <= $end) {
         for ($i = $begin; $i <= $end; $i++) {
             $newIp = int2ip($i);
             $query = "INSERT INTO `netextips` " . "(`id`, `poolid`, `ip`, `nas`, `iface`, `mac`, `switchid`, `port`, `vlan`) " . "VALUES (NULL, '" . $poolid . "', '" . $newIp . "', NULL, NULL, NULL, NULL, NULL, NULL); ";
             nr_query($query);
         }
     }
     log_register("POOL [" . $poolid . "] IPS CREATE RANGE `" . int2ip($begin) . "-" . int2ip($end) . "` ");
 }
Exemplo n.º 5
0
function webmaster_module($core)
{
    $module = $core->get['m'] ? $core->get['m'] : null;
    $id = $core->post['id'] ? (int) $core->post['id'] : ($core->get['id'] ? (int) $core->get['id'] : 0);
    $page = $core->get['page'] > 0 ? (int) $core->get['page'] : 1;
    $message = $core->get['message'] ? $core->get['message'] : null;
    switch ($module) {
        case 'offers':
            require_once PATH_LIB . 'offers.php';
            offers($core);
        case 'referal':
            $sh = 30;
            $st = $sh * ($page - 1);
            $users = $core->db->field("SELECT COUNT(*) FROM " . DB_USER . " WHERE user_ref = '" . $core->user->id . "'");
            $user = $users ? $core->db->data("SELECT * FROM " . DB_USER . " WHERE user_ref = '" . $core->user->id . "' ORDER BY user_name ASC LIMIT {$st}, {$sh}") : array();
            $core->mainline->add($core->lang['referal_h'], $core->url('m', 'referal'));
            $core->header();
            $core->tpl->load('body', 'referal');
            $core->tpl->vars('body', array('title' => $core->lang['referal_h'], 'text' => $core->text->lines(sprintf($core->lang['referal_t'], $core->user->id)), 'nousers' => $core->lang['referal_no'], 'name' => $core->lang['user'], 'pages' => pages($core->url('m', 'referal'), $users, $sh, $page), 'shown' => $users ? sprintf($core->lang['shown'], $st + 1, min($st + $sh, $users), $users) : ''));
            if (count($user)) {
                foreach ($user as &$i) {
                    $core->tpl->block('body', 'user', array('name' => $i['user_name'], 'cash' => rur($i['user_got']), 'flwa' => (int) $i['user_flwa']));
                }
            } else {
                $core->tpl->block('body', 'nouser');
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'lead':
            $where = array("wm_id = '" . $core->user->id . "'");
            if (isset($core->get['d']) && $core->get['d']) {
                $d = date2form(form2date($core->get['d']));
                $ds = strtotime($d . ' 00:00:00');
                $de = strtotime($d . ' 23:59:59');
                $where[] = " order_time BETWEEN '{$ds}' AND '{$de}' ";
            } else {
                $d = false;
            }
            if (isset($core->get['o']) && $core->get['o']) {
                $o = (int) $core->get['o'];
                $where[] = " offer_id = '{$o}' ";
            } else {
                $o = false;
            }
            if (isset($core->get['f']) && $core->get['f']) {
                $f = (int) $core->get['f'];
                $where[] = " flow_id = '{$f}' ";
            } else {
                $f = false;
            }
            if (isset($core->get['w']) && $core->get['w']) {
                $w = (int) $core->get['w'];
                $where[] = " site_id = '{$w}' ";
            } else {
                $w = false;
            }
            if (isset($core->get['s']) && ($s = $core->get['s'])) {
                switch ($s) {
                    case 'w':
                        $where[] = " order_webstat < 5 ";
                        break;
                    case 'c':
                        $where[] = " order_webstat IN ( 5, 12 ) ";
                        break;
                    case 'a':
                        $where[] = " order_webstat BETWEEN 6 AND 11 ";
                        break;
                    default:
                        $s = false;
                }
            } else {
                $s = false;
            }
            $where = implode(' AND ', $where);
            $sh = 30;
            $st = ($page - 1) * $sh;
            $orders = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE {$where}");
            $order = $orders ? $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE {$where} ORDER BY order_id DESC LIMIT {$st}, {$sh}") : array();
            $flow = $core->db->icol("SELECT flow_id, flow_name FROM " . DB_FLOW . " WHERE user_id = '" . $core->user->id . "' " . ($o ? " AND offer_id = '{$o}' " : '') . " ORDER BY flow_name ASC");
            $offer = $core->wmsale->get('offers');
            $sids = $core->db->col("SELECT DISTINCT site_id FROM " . DB_ORDER . " WHERE wm_id = '" . $core->user->id . "'");
            $site = array();
            foreach ($sids as $ss) {
                $site[$ss] = $core->wmsale->get('site', $ss, 'site_url');
            }
            $core->mainline->add($core->lang['stats_lead']);
            $core->header();
            $core->tpl->load('body', 'lead');
            if (!defined('WORKFACE')) {
                $core->tpl->block('body', 'help');
            }
            $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'date' => $core->lang['date'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'status' => $core->lang['status'], 'show' => $core->lang['show'], 'site' => $core->lang['site'], 'space' => $core->lang['stat_spaces'], 'calls' => $core->lang['order_calls_sh'], 'reason' => $core->lang['comment'], 'd' => $d, 'u_stat' => $core->url('m', 'stats'), 'stat' => $core->lang['stats_date'], 'pages' => pages($core->url('m', 'lead?') . ($f ? 'f=' . $f . '&' : '') . ($d ? 'd=' . $d . '&' : '') . ($s ? 's=' . $s . '&' : '') . ($o ? 'o=' . $o : '') . ($w ? 'w=' . $w : ''), $orders, $sh, $page), 'shown' => sprintf($core->lang['shown'], $st + 1, min($st + $sh, $orders), $orders)));
            foreach ($offer as $of => $n) {
                $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
            }
            foreach ($flow as $fl => $n) {
                $core->tpl->block('body', 'flow', array('name' => $n, 'value' => $fl, 'select' => $fl == $f ? 'selected="selected"' : ''));
            }
            foreach ($site as $sl => $n) {
                $core->tpl->block('body', 'site', array('name' => $n, 'value' => $sl, 'select' => $sl == $w ? 'selected="selected"' : ''));
            }
            foreach ($core->lang['stat_status'] as $st => $n) {
                $core->tpl->block('body', 'status', array('name' => $n, 'value' => $st, 'select' => $st == $s ? 'selected="selected"' : ''));
            }
            if ($orders) {
                foreach ($order as $r) {
                    $core->tpl->block('body', 'order', array('offer' => $offer[$r['offer_id']], 'site' => $core->wmsale->get('site', $r['site_id'], 'site_url'), 'space' => $core->wmsale->get('site', $r['space_id'], 'site_url'), 'flow' => $flow[$r['flow_id']], 'ip' => int2ip($r['order_ip']), 'country' => $r['order_country'] ? $r['order_country'] : 'zz', 'time' => smartdate($r['order_time']), 'stid' => $r['order_webstat'] < 6 || $r['order_webstat'] == 12 ? $r['order_webstat'] : 10, 'status' => $r['order_webstat'] < 6 || $r['order_webstat'] == 12 ? $core->lang['statuso'][$r['order_webstat']] : $core->lang['statusok'], 'calls' => $r['order_calls'], 'reason' => $r['order_reason'] ? $core->lang['reasono'][$r['order_reason']] : ($r['order_webstat'] == 5 || $r['order_webstat'] == 12 ? $r['order_comment'] ? sprintf($core->lang['noreason_comment'], $r['order_comment']) : $core->lang['noreason'] : ($r['order_check'] ? $core->lang['stat_check'] : ($r['order_webstat'] < 5 && $r['order_comment'] ? sprintf($core->lang['noreason_comment'], $r['order_comment']) : ''))), 'utm_id' => $core->lang['stat_srcsm'][$r['utm_id']], 'utm_cn' => $r['utm_cn'], 'utm_src' => $r['utm_src']));
                }
            } else {
                $core->tpl->block('body', 'nostat');
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'stats':
            $today = date('Ymd');
            $week1 = date('Ymd', strtotime('-1 week'));
            extract(params($core, array('to' => 'date', 'from' => 'date', 'o', 'f')));
            if (!$to || $to > $today) {
                $to = $today;
            }
            if ($from > $to) {
                $from = $to;
            }
            if (!$from) {
                $from = $week1;
            }
            list($offer, $flow, $stats) = webmaster_clicks($core, $core->user->id, $from, $to, $f, $o);
            $csv = $core->get['show'] == 'csv' ? 1 : 0;
            $core->mainline->add($core->lang['stats_h']);
            if ($csv) {
                header('Content-type: text/csv');
                header('Content-disposition: attachment;filename=stats.csv');
            } else {
                $core->header();
            }
            if ($csv) {
                $core->tpl->load('body', 'csv-stats');
            } else {
                $core->tpl->load('body', 'stats');
            }
            if (!defined('WORKFACE')) {
                $core->tpl->block('body', 'help');
            }
            $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'date' => $core->lang['date'], 'wait' => $core->lang['stat_wait'], 'accept' => $core->lang['stat_accept'], 'cancel' => $core->lang['stat_cancel'], 'spaces' => $core->lang['stat_spaces'], 'clicks' => $core->lang['stat_clicks'], 'unique' => $core->lang['stat_unique'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'show' => $core->lang['show'], 'from' => date2form($from), 'to' => date2form($to), 'u_csv' => $core->url('m', 'stats?show=csv&from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '')));
            foreach ($offer as $of => $n) {
                $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
            }
            foreach ($flow as $fl => $n) {
                $core->tpl->block('body', 'flow', array('name' => $n, 'value' => $fl, 'select' => $fl == $f ? 'selected="selected"' : ''));
            }
            if ($stats) {
                foreach ($stats as $d => &$s) {
                    $cl = max($s['unique'], $s['suni']);
                    $core->tpl->block('body', 'stat', array('date' => date2form($d), 'cr' => $cl ? sprintf("%0.2f", $s['ca'] / $cl * 100) : 0, 'epc' => $cl ? rur($s['sa'] / $cl) : '-', 'epcr' => $cl ? sprintf("%0.2f", $s['sa'] / $cl) : '-', 'spaces' => (int) $s['spaces'], 'suni' => (int) $s['suni'], 'clicks' => (int) $s['clicks'], 'unique' => (int) $s['unique'], 'ca' => (int) $s['ca'], 'sa' => rur($s['sa']), 'sar' => (int) $s['sa'], 'ua' => $core->url('m', 'lead') . '?d=' . date2form($d) . '&s=a', 'cw' => (int) $s['cw'], 'sw' => rur($s['sw']), 'swr' => (int) $s['sw'], 'uw' => $core->url('m', 'lead') . '?d=' . date2form($d) . '&s=w', 'cc' => (int) $s['cc'], 'sc' => rur($s['sc']), 'scr' => (int) $s['sc'], 'uc' => $core->url('m', 'lead') . '?d=' . date2form($d) . '&s=c'));
                }
                unset($d, $s, $stats);
            } else {
                $core->tpl->block('body', 'nostat');
            }
            $core->tpl->output('body', $csv ? 'windows-1251' : false);
            if (!$csv) {
                $core->footer();
            }
            $core->_die();
        case 'sources':
            $today = date('Ymd');
            $week1 = date('Ymd', strtotime('-2 week'));
            extract(params($core, array('to' => 'date', 'from' => 'date', 'o', 'f', 'c', 'q', 'g', 'a', 'fi')));
            if (!$to || $to > $today) {
                $to = $today;
            }
            if ($from > $to) {
                $from = $to;
            }
            if (!$from) {
                $from = $week1;
            }
            if (!$c) {
                $c = 10;
            }
            if ($core->user->level) {
                $core->tpl->block('body', 'alls');
                $all = $a ? true : false;
            } else {
                $all = false;
            }
            list($offer, $flow, $stats) = webmaster_sources($core, $core->user->id, $from, $to, $o, $f, $g, $q, $c, $all, $fi);
            $gv = $g ? 'utm_src' : 'utm_cn';
            $og = $g ? 0 : 1;
            $csv = $core->get['show'] == 'csv' ? 1 : 0;
            $bls = $core->db->data("SELECT * FROM " . DB_BL . " WHERE user_id = '" . $core->user->id . "'");
            $bl = array();
            foreach ($bls as $b) {
                $bl[$b['bl_type']][$b['bl_utm']][$b['bl_item']] = $b['bl_id'];
            }
            $core->mainline->add($core->lang['stats_src']);
            if ($csv) {
                header('Content-type: text/csv');
                header('Content-disposition: attachment;filename=sources.csv');
            } else {
                $core->header();
            }
            if ($csv) {
                $core->tpl->load('body', 'csv-sources');
            } else {
                $core->tpl->load('body', 'sources');
            }
            if (!defined('WORKFACE')) {
                $core->tpl->block('body', 'help');
            }
            $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'type' => $core->lang['type'], 'today' => $core->lang['today'], 'source' => $core->lang['source'], 'showall' => $core->lang['showall'], 'all' => $all ? 'checked="checked"' : '', 'wait' => $core->lang['stat_wait'], 'accept' => $core->lang['stat_accept'], 'cancel' => $core->lang['stat_cancel'], 'spaces' => $core->lang['stat_spaces'], 'clicks' => $core->lang['stat_clicks'], 'unique' => $core->lang['stat_unique'], 'total' => $core->lang['total'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'show' => $core->lang['show'], 'help' => $core->lang['help'], 'helptext' => $core->lang['stat_help'], 'from' => date2form($from), 'to' => date2form($to), 'u_today' => $core->url('m', 'sources?from=') . date('Y-m-d') . '&to=' . date('Y-m-d') . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '') . ($q ? '&q=' . $q : '') . ($g ? '&g=' . $g : '') . ($c ? '&c=' . $c : '') . ($all ? '&a=' . $all : ''), 'u_csv' => $core->url('m', 'sources?show=csv&from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '') . ($q ? '&q=' . $q : '') . ($g ? '&g=' . $g : '') . ($c ? '&c=' . $c : '') . ($all ? '&a=' . $all : '')));
            foreach ($offer as $of => $n) {
                $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
            }
            foreach ($flow as $fl => $n) {
                $core->tpl->block('body', 'flow', array('name' => $n, 'value' => $fl, 'select' => $fl == $f ? 'selected="selected"' : ''));
            }
            foreach ($core->lang['stat_group'] as $gr => $n) {
                $core->tpl->block('body', 'group', array('name' => $n, 'value' => $gr, 'select' => $gr == $g ? 'selected="selected"' : ''));
            }
            foreach ($core->lang['stat_srcs'] as $sr => $n) {
                if ($sr) {
                    $core->tpl->block('body', 'source', array('name' => $n, 'value' => $sr, 'select' => $sr == $q ? 'selected="selected"' : ''));
                }
            }
            foreach ($core->lang['stat_cutoff'] as $cc => $n) {
                $core->tpl->block('body', 'cutoff', array('name' => $n, 'value' => $cc, 'select' => $cc == $c ? 'selected="selected"' : ''));
            }
            if ($stats) {
                if ($g == 0) {
                    $mids = array();
                    foreach ($stats as &$s) {
                        if ($s['network'] == 1) {
                            $mids[] = $s['source'];
                        }
                    }
                    $mban = $mids ? $core->db->icol("SELECT img_mg, img_block FROM " . DB_IMAGE . " WHERE img_mg IN ( " . implode(',', $mids) . " )") : array();
                } else {
                    $mban = array();
                }
                foreach ($stats as $d => &$s) {
                    list($id, $src) = explode(':', $d);
                    $inbl = $bl[$g][$id][$src];
                    $tc = max((int) $s['spaces'], (int) $s['clicks'], (int) $s['unique']);
                    $ts = $s['ct'] / $tc * 1000;
                    $cls = $inbl ? 'grey' : ($tc > 100 ? $ts < 1 ? 'red' : ($ts < 10 ? 'yellow' : '') : '');
                    $core->tpl->block('body', 'stat', array('u' => $core->url('m', 'sources?from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '') . ($og ? '&g=' . $og : '') . '&q=' . $id . '&c=1' . ($all ? '&a=' . $all : '') . '&fi=' . $src, 'id' => $core->lang['stat_srcs'][$id], 'src' => $src, 'class' => $cls, 'block' => isset($mban[$src]) ? $mban[$src] ? 'isbad' : 'isok' : '', 'spaces' => (int) $s['spaces'], 'suni' => (int) $s['suni'], 'clicks' => (int) $s['clicks'], 'unique' => (int) $s['unique'], 'ca' => (int) $s['ca'], 'cw' => (int) $s['cw'], 'cc' => (int) $s['cc'], 'ct' => (int) $s['ct'], 'bli' => $inbl ? $inbl : $g . '_' . $id . '_' . strtr($src, '.', '_'), 'blc' => $inbl ? 'decline red' : 'accept green', 'blu' => $inbl ? $core->url('a', 'bl-del', $inbl) . '?' : $core->url('a', 'bl-add', 0) . '?i=' . $src . '&u=' . $id . '&t=' . $g, 'blt' => $inbl ? $core->lang['bl_del'] : $core->lang['bl_add']));
                }
                unset($d, $s, $stats);
            } else {
                $core->tpl->block('body', 'nostat');
            }
            $core->tpl->output('body', $csv ? 'windows-1251' : false);
            if (!$csv) {
                $core->footer();
            }
            $core->_die();
        case 'target':
            switch ($message) {
                case 'ok':
                    $core->info('info', 'done_add');
                    break;
                case 'save':
                    $core->info('info', 'done_edit');
                    break;
                case 'del':
                    $core->info('info', 'done_del');
                    break;
                case 'access':
                    $core->info('error', 'access_denied');
                    break;
            }
            if ($id) {
                $tg = $core->db->row("SELECT * FROM " . DB_TARGET . " WHERE target_id = '{$id}' LIMIT 1");
                if ($tg['user_id'] != $core->user->id) {
                    $core->go($core->url('mm', 'target', 'access'));
                }
                $types = array();
                foreach ($core->lang['stat_tartype'] as $v => $n) {
                    $types[] = array('name' => $n, 'value' => $v, 'select' => $v == $tg['target_type']);
                }
                $core->mainline->add($core->lang['stats_target'], $core->url('m', 'target'));
                $core->mainline->add($tg['target_name']);
                $core->header();
                $title = $core->lang['target_edit_h'];
                $action = $core->url('a', 'target-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['target_edit_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'value' => $tg['target_name']), array('type' => 'select', 'name' => 'type', 'head' => $core->lang['type'], 'value' => $types));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('targetedit', $action, $method, $title, $field, $button);
                $core->footer();
                $core->_die();
            }
            $today = date('Ymd');
            $week1 = date('Ymd', strtotime('-2 week'));
            extract(params($core, array('to' => 'date', 'from' => 'date', 'o', 'f')));
            if (!$to || $to > $today) {
                $to = $today;
            }
            if ($from > $to) {
                $from = $to;
            }
            if (!$from) {
                $from = $week1;
            }
            list($offer, $flow, $stats) = webmaster_target($core, $core->user->id, $from, $to, $o, $f);
            $csv = $core->get['show'] == 'csv' ? 1 : 0;
            $core->mainline->add($core->lang['stats_target']);
            if ($csv) {
                header('Content-type: text/csv');
                header('Content-disposition: attachment;filename=target.csv');
            } else {
                $core->header();
            }
            if ($csv) {
                $core->tpl->load('body', 'csv-target');
            } else {
                $core->tpl->load('body', 'target');
            }
            $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'type' => $core->lang['type'], 'today' => $core->lang['today'], 'target' => $core->lang['target'], 'wait' => $core->lang['stat_wait'], 'accept' => $core->lang['stat_accept'], 'cancel' => $core->lang['stat_cancel'], 'spaces' => $core->lang['stat_spaces'], 'clicks' => $core->lang['stat_clicks'], 'unique' => $core->lang['stat_unique'], 'total' => $core->lang['total'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'show' => $core->lang['show'], 'help' => $core->lang['help'], 'helptext' => $core->lang['stat_help'], 'confirm' => $core->lang['confirm'], 'from' => date2form($from), 'to' => date2form($to), 'u_add' => $core->url('a', 'target-add', 0), 'u_today' => $core->url('m', 'target?from=') . date('Y-m-d') . '&to=' . date('Y-m-d') . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : ''), 'u_csv' => $core->url('m', 'target?show=csv&from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '')));
            foreach ($offer as $of => $n) {
                $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
            }
            foreach ($flow as $fl => $n) {
                $core->tpl->block('body', 'flow', array('name' => $n, 'value' => $fl, 'select' => $fl == $f ? 'selected="selected"' : ''));
            }
            if ($stats) {
                foreach ($stats as $d => &$s) {
                    $tc = max((int) $s['spaces'], (int) $s['clicks'], (int) $s['unique']);
                    $ts = $tc ? $s['ct'] / $tc * 1000 : 0;
                    $cls = $inbl ? 'grey' : ($tc > 100 ? $ts < 1 ? 'red' : ($ts < 10 ? 'yellow' : '') : '');
                    $core->tpl->block('body', 'stat', array('id' => $d, 'class' => $cls, 'name' => $s['name'], 'type' => (int) $s['type'], 'spaces' => (int) $s['space'], 'suni' => (int) $s['suni'], 'clicks' => (int) $s['clicks'], 'unique' => (int) $s['unique'], 'ca' => (int) $s['ca'], 'cw' => (int) $s['cw'], 'cc' => (int) $s['cc'], 'ct' => (int) $s['ct'], 'edit' => $core->url('i', 'target', $d), 'del' => $core->url('a', 'target-del', $d)));
                }
                unset($d, $s, $stats);
            } else {
                $core->tpl->block('body', 'nostat');
            }
            $core->tpl->output('body', $csv ? 'windows-1251' : false);
            if (!$csv) {
                $core->footer();
            }
            $core->_die();
        case 'flowstat':
            $today = date('Ymd');
            $week1 = date('Ymd', strtotime('-2 week'));
            $yest = strtotime('-1 day');
            extract(params($core, array('to' => 'date', 'from' => 'date')));
            if (!$to || $to > $today) {
                $to = $today;
            }
            if ($from > $to) {
                $from = $to;
            }
            if (!$from) {
                $from = $week1;
            }
            $stats = webmaster_flowstat($core, $core->user->id, $from, $to);
            $csv = $core->get['show'] == 'csv' ? 1 : 0;
            $core->mainline->add($core->lang['stats_flow']);
            if ($csv) {
                header('Content-type: text/csv');
                header('Content-disposition: attachment;filename=flowstat.csv');
            } else {
                $core->header();
            }
            if ($csv) {
                $core->tpl->load('body', 'csv-flowstat');
            } else {
                $core->tpl->load('body', 'flowstat');
            }
            $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'type' => $core->lang['type'], 'today' => $core->lang['today'], 'yesterday' => $core->lang['yesterday'], 'target' => $core->lang['target'], 'wait' => $core->lang['stat_wait'], 'accept' => $core->lang['stat_accept'], 'cancel' => $core->lang['stat_cancel'], 'spaces' => $core->lang['stat_spaces'], 'clicks' => $core->lang['stat_clicks'], 'unique' => $core->lang['stat_unique'], 'total' => $core->lang['total'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'show' => $core->lang['show'], 'help' => $core->lang['help'], 'helptext' => $core->lang['stat_help'], 'confirm' => $core->lang['confirm'], 'from' => date2form($from), 'to' => date2form($to), 'u_today' => $core->url('m', 'flowstat?from=') . date('Y-m-d') . '&to=' . date('Y-m-d') . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : ''), 'u_yesterday' => $core->url('m', 'flowstat?from=') . date('Y-m-d', $yest) . '&to=' . date('Y-m-d', $yest) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : ''), 'u_csv' => $core->url('m', 'flowstat?show=csv&from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($f ? '&f=' . $f : '')));
            if ($stats) {
                foreach ($stats as $d => &$s) {
                    $tc = max((int) $s['spaces'], (int) $s['clicks'], (int) $s['unique']);
                    $ts = $tc ? $s['ct'] / $tc * 1000 : 0;
                    $cls = $tc > 100 ? $ts < 1 ? 'red' : ($ts < 10 ? 'yellow' : '') : '';
                    $core->tpl->block('body', 'stat', array('class' => $cls, 'offer' => $s['offer'], 'flow' => $s['flow'], 'type' => (int) $s['type'], 'spaces' => (int) $s['space'], 'suni' => (int) $s['suni'], 'clicks' => (int) $s['clicks'], 'unique' => (int) $s['unique'], 'ca' => (int) $s['ca'], 'cw' => (int) $s['cw'], 'cc' => (int) $s['cc'], 'ct' => (int) $s['ct']));
                }
                unset($d, $s, $stats);
            } else {
                $core->tpl->block('body', 'nostat');
            }
            $core->tpl->output('body', $csv ? 'windows-1251' : false);
            if (!$csv) {
                $core->footer();
            }
            $core->_die();
        case 'bl':
            $bls = $core->db->data("SELECT * FROM " . DB_BL . " WHERE user_id = '" . $core->user->id . "' ORDER BY bl_type DESC, bl_utm ASC, bl_item ASC");
            $bl = array(1 => array(), 0 => array());
            foreach ($bls as $b) {
                $bl[$b['bl_type']][$b['bl_utm']][$b['bl_item']] = $b['bl_id'];
            }
            $core->mainline->add($core->lang['black_list']);
            $core->header();
            $core->tpl->load('body', 'bl');
            foreach ($bl as $blti => $blt) {
                $core->tpl->block('body', 'type', array('name' => $core->lang['bl_type'][$blti], 'url' => $core->url('a', 'bl-load', $blti)));
                if ($blt) {
                    foreach ($blt as $blui => $blu) {
                        $core->tpl->block('body', 'type.utm', array('name' => $core->lang['stat_srcs'][$blui], 'url' => $core->url('a', 'bl-load', $blti) . '?u=' . $blui));
                        foreach ($blu as $i => $v) {
                            $core->tpl->block('body', 'type.utm.item', array('id' => $i, 'bli' => $v, 'blu' => $core->url('a', 'bl-del', $v) . '?', 'blt' => $core->lang['bl_del']));
                        }
                    }
                } else {
                    $core->tpl->block('body', 'type.no');
                }
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
            // Parked domains
        // Parked domains
        case 'domain':
            switch ($message) {
                case 'ok':
                    $core->info('info', 'done_add');
                    break;
                case 'del':
                    $core->info('info', 'done_del');
                    break;
                case 'check':
                    $core->info('info', 'done_domain_check');
                    break;
                case 'error':
                    $core->info('error', 'error_domain_check');
                    break;
                case 'access':
                    $core->info('error', 'access_denied');
                    break;
            }
            $core->mainline->add($core->lang['menu_domain'], $core->url('m', 'domain'));
            $core->header();
            $core->tpl->load('body', 'domain');
            $core->tpl->vars('body', array('text' => $core->text->lines($core->lang['domain_t']), 'u_add' => $core->url('a', 'dmn-add', 0), 'url' => $core->lang['domain'], 'status' => $core->lang['status'], 'action' => $core->lang['action'], 'check' => $core->lang['domain_check'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirm'], 'nodomain' => $core->lang['nodomain']));
            $domain = $core->db->data("SELECT * FROM " . DB_DOMAIN . " WHERE user_id = '" . $core->user->id . "' ORDER BY dom_status ASC, dom_url ASC");
            if (count($domain)) {
                foreach ($domain as $d) {
                    $core->tpl->block('body', 'domain', array('url' => $d['dom_url'], 'stclass' => $d['dom_status'] ? 'isok' : 'wait', 'status' => $d['dom_status'] ? $core->lang['dom_ok'] : $core->lang['dom_wait'], 'check' => $core->url('a', 'dmn-check', $d['dom_id']), 'del' => $core->url('a', 'dmn-del', $d['dom_id'])));
                }
            } else {
                $core->tpl->block('body', 'nodoms');
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
            // WorkFlow
        // WorkFlow
        default:
        case 'flow':
            switch ($message) {
                case 'ok':
                    $core->info('info', 'done_flow_ok');
                    break;
                case 'save':
                    $core->info('info', 'done_flow_save');
                    break;
                case 'del':
                    $core->info('info', 'done_flow_del');
                    break;
                case 'error':
                    $core->info('error', 'error_flow');
                    break;
                case 'access':
                    $core->info('error', 'access_denied');
                    break;
            }
            if ($id) {
                $flow = $core->db->row("SELECT * FROM " . DB_FLOW . " WHERE flow_id = '{$id}' LIMIT 1");
                if ($flow['user_id'] != $core->user->id) {
                    $core->go($core->url('mm', '', 'access'));
                }
                $sitel = $core->wmsale->get('lands', $flow['offer_id']);
                $sites = array();
                foreach ($sitel as $k => $v) {
                    $sites[] = array('name' => $v['site_url'], 'value' => $v['site_id'], 'select' => $v['site_id'] == $flow['flow_site']);
                }
                $spacl = $core->wmsale->get('space', $flow['offer_id']);
                $space = array(array('name' => '&mdash;', 'value' => 0));
                foreach ($spacl as $k => $v) {
                    $space[] = array('name' => $v['site_url'], 'value' => $v['site_id'], 'select' => $v['site_id'] == $flow['flow_space']);
                }
                $core->mainline->add($core->lang['menu_flow'], $core->url('m', 'flow'));
                $core->mainline->add($flow['flow_name']);
                $core->header();
                $title = $core->lang['flow_edit_h'];
                $action = $core->url('a', 'flow-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['flow_edit_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'descr' => $core->lang['flow_name_d'], 'value' => $flow['flow_name']), array('type' => 'select', 'name' => 'site', 'head' => $core->lang['flow_land'], 'value' => $sites), array('type' => 'select', 'name' => 'space', 'head' => $core->lang['flow_space'], 'value' => $space), array('type' => 'checkbox', 'name' => 'cb', 'head' => $core->lang['flow_comeback'], 'checked' => $flow['flow_cb']), array('type' => 'checkbox', 'name' => 'param', 'head' => $core->lang['flow_param'], 'checked' => $flow['flow_param']), array('type' => 'text', 'length' => 200, 'name' => 'url', 'head' => $core->lang['flow_url'], 'descr' => $core->lang['flow_url_d'], 'value' => $flow['flow_url']), array('type' => 'text', 'length' => 200, 'name' => 'pbu', 'head' => $core->lang['flow_pbu'], 'descr' => $core->lang['flow_pbu_d'], 'value' => $flow['flow_pbu']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('flowedit', $action, $method, $title, $field, $button);
                $core->footer();
                $core->_die();
            }
            $flows = $core->db->data("SELECT * FROM " . DB_FLOW . " WHERE user_id = '" . $core->user->id . "' ORDER BY flow_id DESC");
            $flow = array();
            foreach ($flows as $f) {
                $flow[$f['offer_id']][] = $f;
            }
            $redmn = $core->wmsale->get('domain', $core->user->id);
            $core->mainline->add($core->lang['menu_flow'], $core->url('m', 'flow'));
            $core->header();
            $core->tpl->load('body', 'flows');
            $core->tpl->vars('body', array('text' => $core->text->lines($core->lang['flows_text']), 'flow_site' => $core->text->lines($core->lang['flow_site']), 'flow_cb' => $core->lang['flow_comeback'], 'flow_sub' => $core->text->lines($core->lang['flow_sub']), 'flow_ajax' => $core->url('a', 'flow-ajax', 0), 'flow_tgt' => $core->url('a', 'flow-target', 0), 'flow_rd' => BASEURL, 'u_stats' => $core->url('m', 'stats'), 'u_flowstat' => $core->url('m', 'flowstat'), 'u_lead' => $core->url('m', 'lead'), 'u_sources' => $core->url('m', 'sources'), 'u_domain' => $core->url('m', 'domain'), 'u_target' => $core->url('m', 'target'), 'name' => $core->lang['name'], 'action' => $core->lang['action'], 'total' => $core->lang['total'], 'offer' => $core->lang['offer'], 'stats' => $core->lang['stats'], 'url' => $core->lang['site'], 'partner' => $core->lang['flow_partner_url'], 'edit' => $core->lang['settings'], 'del' => $core->lang['del'], 'confirm' => $core->lang['flow_confirm']));
            if ($flow) {
                foreach ($flow as $o => $fl) {
                    $offer = $core->wmsale->get('offer', $o);
                    $lands = $core->wmsale->get('lands', $o);
                    $space = $core->wmsale->get('space', $o);
                    $core->tpl->block('body', 'offer', array('id' => $offer['offer_id'], 'name' => $offer['offer_name'], 'url' => $core->url('i', 'offers', $o), 'stats' => $core->url('m', 'stats') . '?o=' . $o, 'add' => $core->url('a', 'flow-add', $o)));
                    if ($lands) {
                        foreach ($lands as &$ss) {
                            $core->tpl->block('body', 'offer.site', array('id' => $ss['site_id'], 'url' => $ss['site_url'], 'epc' => sprintf("%0.2f", $offer['offer_wm'] * $ss['site_convert']), 'cr' => sprintf("%0.2f", $ss['site_convert'] * 100)));
                        }
                    }
                    unset($ss);
                    if ($space) {
                        $core->tpl->block('body', 'offer.subsite', array());
                        foreach ($space as &$ss) {
                            $core->tpl->block('body', 'offer.subsite.s', array('id' => $ss['site_id'], 'url' => $ss['site_url'], 'epc' => sprintf("%0.2f", $offer['offer_wm'] * $ss['site_convert']), 'cr' => sprintf("%0.2f", $ss['site_convert'] * 100)));
                        }
                        unset($ss);
                    }
                    if ($redmn) {
                        $core->tpl->block('body', 'offer.redmn', array());
                        foreach ($redmn as &$redm) {
                            $core->tpl->block('body', 'offer.redmn.s', array('url' => $redm));
                        }
                        unset($redm);
                    }
                    foreach ($fl as $f) {
                        $core->tpl->block('body', 'offer.flow', array('id' => $f['flow_id'], 'name' => $search ? $search->highlight($f['flow_name']) : $f['flow_name'], 'site' => $f['flow_site'], 'space' => $f['flow_space'], 'cb' => $f['flow_cb'], 'param' => $f['flow_param'], 'url' => $f['flow_url'], 'pbu' => $f['flow_pbu'], 'offer' => $offer[$f['offer_id']], 'cr' => sprintf("%0.2f", $f['flow_convert'] * 100), 'epc' => rur($f['flow_epc']), 'total' => $f['flow_total'], 'edit' => $core->url('i', 'flow', $f['flow_id']), 'del' => $core->url('a', 'flow-del', $f['flow_id']), 'stats' => $core->url('m', 'stats') . '?f=' . $f['flow_id'], 'u_offer' => $core->url('m', 'stats') . '?o=' . $f['offer_id']));
                    }
                }
                unset($f, $flows);
            } else {
                $core->tpl->block('body', 'noflow');
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
    }
    return false;
}
Exemplo n.º 6
0
function external_module($core)
{
    $module = $core->get['m'] ? $core->get['m'] : null;
    $id = $core->post['id'] ? (int) $core->post['id'] : ($core->get['id'] ? (int) $core->get['id'] : 0);
    $page = $core->get['page'] > 0 ? (int) $core->get['page'] : 1;
    $message = $core->get['message'] ? $core->get['message'] : null;
    if ($module == 'offers') {
        require_once PATH_LIB . 'offers.php';
        offers($core);
    }
    $where = array("ext_id = '" . $core->user->ext . "'");
    if (isset($core->get['d']) && $core->get['d']) {
        $d = date2form(form2date($core->get['d']));
        $ds = strtotime($d . ' 00:00:00');
        $de = strtotime($d . ' 23:59:59');
        $where[] = " order_time BETWEEN '{$ds}' AND '{$de}' ";
    } else {
        $d = false;
    }
    if (isset($core->get['o']) && $core->get['o']) {
        $o = (int) $core->get['o'];
        $where[] = " offer_id = '{$o}' ";
    } else {
        $o = false;
    }
    if (isset($core->get['w']) && $core->get['w']) {
        $w = (int) $core->get['w'];
        $where[] = " site_id = '{$w}' ";
    } else {
        $w = false;
    }
    if (isset($core->get['s']) && ($s = $core->get['s'])) {
        switch ($s) {
            case 'w':
                $where[] = " order_webstat < 5 ";
                break;
            case 'c':
                $where[] = " order_webstat IN ( 5, 12 ) ";
                break;
            case 'a':
                $where[] = " order_webstat BETWEEN 6 AND 11 ";
                break;
            default:
                $s = false;
        }
    } else {
        $s = false;
    }
    $where = implode(' AND ', $where);
    $sh = 30;
    $st = ($page - 1) * $sh;
    $orders = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE {$where} ");
    $order = $orders ? $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE {$where} ORDER BY order_id DESC LIMIT {$st}, {$sh}") : array();
    $offer = $core->wmsale->get('offers');
    $site = $core->wmsale->get('lands');
    $core->mainline->add($core->lang['stats_lead']);
    $core->header();
    $core->tpl->load('body', 'external');
    $core->tpl->vars('body', array('nostats' => $core->lang['nostats'], 'date' => $core->lang['date'], 'flow' => $core->lang['flow'], 'offer' => $core->lang['offer'], 'status' => $core->lang['status'], 'show' => $core->lang['show'], 'site' => $core->lang['site'], 'calls' => $core->lang['order_calls_sh'], 'reason' => $core->lang['order_reason'], 'd' => $d, 'u_stat' => $core->url('m', 'stats'), 'stat' => $core->lang['stats_date'], 'pages' => pages($core->url('m', '?') . ($f ? 'f=' . $f . '&' : '') . ($d ? 'd=' . $d . '&' : '') . ($s ? 's=' . $s . '&' : '') . ($o ? 'o=' . $o : '') . ($w ? 'w=' . $w : ''), $orders, $sh, $page), 'shown' => sprintf($core->lang['shown'], $st + 1, min($st + $sh, $orders), $orders)));
    foreach ($offer as $of => $n) {
        $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
    }
    foreach ($site as $sl => $n) {
        $core->tpl->block('body', 'site', array('name' => $n, 'value' => $sl, 'select' => $sl == $w ? 'selected="selected"' : ''));
    }
    foreach ($core->lang['stat_status'] as $st => $n) {
        $core->tpl->block('body', 'status', array('name' => $n, 'value' => $st, 'select' => $st == $s ? 'selected="selected"' : ''));
    }
    if ($orders) {
        foreach ($order as $r) {
            $core->tpl->block('body', 'order', array('offer' => $offer[$r['offer_id']], 'site' => $site[$r['site_id']], 'uid' => strlen($r['ext_uid']) > 25 ? sprintf('<input type="text" value="%s" class="intable-view" />', htmlspecialchars($r['ext_uid'])) : $r['ext_uid'], 'src' => $r['ext_src'], 'ip' => int2ip($r['order_ip']), 'country' => $r['order_country'], 'time' => smartdate($r['order_time']), 'stid' => $r['order_webstat'] < 6 || $r['order_webstat'] == 12 ? $r['order_webstat'] : 10, 'status' => $r['order_webstat'] < 6 || $r['order_webstat'] == 12 ? $core->lang['statuso'][$r['order_webstat']] : $core->lang['statusok'], 'edit' => $core->url('i', 'order', $r['order_id']), 'calls' => $r['order_calls'], 'reason' => $r['order_reason'] ? $core->lang['reasono'][$r['order_reason']] : ($r['order_webstat'] == 5 || $r['order_webstat'] == 12 ? $core->lang['noreason'] : '')));
        }
    } else {
        $core->tpl->block('body', 'nostat');
    }
    $core->tpl->output('body');
    $core->footer();
    $core->_die();
}
Exemplo n.º 7
0
function support_show($core, $user, $type, $from = 0)
{
    // Check what to get from the base
    $user = (int) $user;
    $type = $type ? 1 : 0;
    $from = ($from = (int) $from) > 0 ? "< '{$from}'" : "> '" . abs($from) . "'";
    // Make an array of the messages
    $ms = array();
    $ur = array(0 => 0, 1 => 0);
    $mms = $core->db->data("SELECT * FROM " . DB_SUPP . " WHERE supp_user = '******' AND supp_id {$from} ORDER BY supp_id DESC LIMIT 10");
    foreach ($mms as &$m) {
        // Add new item
        $ms[] = array('id' => $m['supp_id'], 'uid' => $m['user_id'], 'user' => $m['user_name'], 'link' => $type ? '/users/' . $m['user_id'] : '', 'time' => smartdate($m['supp_time']), 'text' => $core->text->lines($m['supp_text']), 'uclass' => $m['supp_type'] ? 'user-alt' : 'user-blue', 'rclass' => $m['supp_read'] ? '' : 'unread', 'new' => $m['supp_read'] ? 0 : $m['supp_type'] != $type, 'ip' => int2ip($m['supp_ip']), 'geo' => $m['supp_geo']);
        // Set unread parameters
        if ($m['supp_read'] == 0) {
            $ur[$m['supp_type'] ? 0 : 1] = 1;
        }
    }
    unset($m, $mms);
    // Mark messages as read and check activity
    if ($ur[$type]) {
        $core->db->query("UPDATE " . DB_SUPP . " SET supp_read = 1 WHERE supp_user = '******' AND supp_type = '" . ($type ? 0 : 1) . "'");
        if ($type == 0) {
            $core->user->set($user, array('supp_new' => 0));
        } else {
            $core->user->set($user, array('supp_admin' => 0));
        }
    }
    return $ms;
    // Message array completed
}
Exemplo n.º 8
0
    debug_die(T_('You have no permission to see this tab!'));
}
memorize_param('user_tab', 'string', '', $user_tab);
memorize_param('user_ID', 'integer', 0, $user_ID);
// ------------------- PREV/NEXT USER LINKS -------------------
user_prevnext_links(array('block_start' => '<table class="prevnext_user"><tr>', 'prev_start' => '<td width="33%">', 'prev_end' => '</td>', 'prev_no_user' => '<td width="33%">&nbsp;</td>', 'back_start' => '<td width="33%" class="back_users_list">', 'back_end' => '</td>', 'next_start' => '<td width="33%" class="right">', 'next_end' => '</td>', 'next_no_user' => '<td width="33%">&nbsp;</td>', 'block_end' => '</tr></table>', 'user_tab' => 'activity'));
// ------------- END OF PREV/NEXT USER LINKS -------------------
if (!$user_profile_only) {
    // echo user edit action icons
    $Widget = new Widget();
    echo_user_actions($Widget, $edited_User, 'edit');
    echo '<span class="floatright">' . $Widget->gen_global_icons() . '</span>';
}
echo '<div>' . get_usertab_header($edited_User, $user_tab, $current_User->ID == $edited_User->ID ? T_('My Activity') : T_('User Activity')) . '</div>';
// Display IP address from where this user was created
echo '<div style="margin-top:25px;font-weight:bold;"><span>' . T_('User created from IP') . ': ' . int2ip($UserSettings->get('created_fromIPv4', $edited_User->ID)) . '</span></div>';
/**** Reports from edited user  ****/
user_reports_results_block(array('edited_User' => $edited_User));
evo_flush();
/**** Blogs owned by the user ****/
blogs_results_block(array('edited_User' => $edited_User));
evo_flush();
/**** Posts created by the user  ****/
items_created_results_block(array('edited_User' => $edited_User));
evo_flush();
/**** Posts edited by the user ****/
items_edited_results_block(array('edited_User' => $edited_User));
evo_flush();
/**** Comments posted by the user ****/
comments_results_block(array('edited_User' => $edited_User));
evo_flush();
Exemplo n.º 9
0
        my_die();
    }
    $aStat = array();
    while ($row = mysql_fetch_assoc($sql)) {
        $aStat[] = $row;
    }
    $aEventsNewUser[$k]['stat'] = $aStat;
}
if (empty($aEventsNewUser)) {
    $_t->assign('content', 'Новых пользователей нет');
}
//dbg($aEventsNewUser);
foreach ($aEventsNewUser as $k => $v) {
    $sLog = '';
    $sLog .= "<br /><b>agent:</b> " . $v['agent'];
    $sLog .= "<br /><b>ip:</b> " . int2ip($v['ip']);
    if (!empty($v['user'])) {
        foreach ($v['user'] as $kk => $vv) {
            $sLog .= "<br /><b>{$kk}:</b> " . $vv;
        }
    }
    $from = '';
    if (!empty($v['stat'])) {
        foreach ($v['stat'] as $kk => $vv) {
            foreach ($vv as $kkk => $vvv) {
                if ($kkk == 'from') {
                    if ($from == '') {
                        $sLog .= "<br /><b>{$kkk}:</b> " . $vvv;
                        $sLog .= '<br />';
                        $from = $vvv;
                    }
Exemplo n.º 10
0
function api_sale_list($core, $user)
{
    $cid = $core->user->get($user, 'user_comp');
    if (!$cid) {
        return array('status' => 'error', 'error' => 'access-denied');
    }
    $where = array("comp_id = '{$cid}'");
    // Order status
    if ($s = $core->post['status'] ? (int) $core->post['status'] : (int) $core->get['status']) {
        if ($s < 0) {
            switch ($s) {
                case -1:
                    $where[] = "order_status NOT IN ( 5, 12 )";
                    break;
                case -2:
                    $where[] = "order_status < 5";
                    break;
                case -3:
                    $where[] = "order_status > 5 AND order_status < 12";
                    break;
            }
        } else {
            $where[] = "order_status = '{$s}'";
        }
    }
    // Timing
    $f = $core->post['from'] ? (int) $core->post['from'] : (int) $core->get['from'];
    $t = $core->post['to'] ? (int) $core->post['to'] : (int) $core->get['to'];
    if (!($f && $t)) {
        if ($f) {
            $where[] = "order_time > '{$f}'";
        }
        if ($f) {
            $where[] = "order_time < '{$t}'";
        }
    } else {
        $where[] = "order_time BETWEEN '{$f}' AND '{$t}'";
    }
    // Order IDs
    if ($id = $core->post['oid'] ? $core->post['oid'] : $core->get['oid']) {
        $ids = explode(',', $id);
    } else {
        $ids = $core->post['ids'] ? $core->post['ids'] : $core->get['ids'];
    }
    if ($ids) {
        $ids = array_map('intval', $ids);
        if (count($ids) > 1) {
            $where[] = 'order_id IN ( ' . implode(', ', $ids) . ' )';
        } elseif ($ids) {
            $where[] = "order_id = '" . $ids[0] . "'";
        }
    }
    // External Order IDs
    if ($eid = $core->post['eid'] ? $core->post['eid'] : $core->get['eid']) {
        $eids = explode(',', $eid);
    } else {
        $eids = $core->post['eids'] ? $core->post['eids'] : $core->get['eids'];
    }
    if ($eids) {
        $eids = array_map('intval', $eids);
        if (count($eids) > 1) {
            $where[] = 'ext_oid IN ( ' . implode(', ', $eids) . ' )';
        } elseif ($eids) {
            $where[] = "ext_oid = '" . $eids[0] . "'";
        }
    }
    // Other IDs
    if ($o = $core->post['offer'] ? (int) $core->post['offer'] : (int) $core->get['offer']) {
        $where[] = "offer_id = '{$o}'";
    }
    if ($o = $core->post['after'] ? (int) $core->post['after'] : (int) $core->get['after']) {
        $where[] = "order_id > '{$s}'";
    }
    // Get items into array
    $items = array();
    $where = implode(' AND ', $where);
    $query = $core->db->start("SELECT * FROM " . DB_ORDER . " WHERE {$where}");
    while ($o = $core->db->one($query)) {
        $items[] = array('id' => (int) $o['order_id'], 'ext' => (int) $o['ext_oid'], 'offer' => (int) $o['offer_id'], 'wm' => (int) $o['wm_id'], 'status' => (int) $o['order_status'], 'reason' => (int) $o['order_reason'], 'check' => (int) $o['order_check'], 'calls' => (int) $o['order_calls'], 'site' => $o['site_id'] ? $core->wmsale->get('site', $o['site_id'], 'site_url') : false, 'ip' => int2ip($o['order_ip']), 'time' => (int) $o['order_time'], 'name' => $o['order_name'], 'gender' => (int) $o['order_gender'], 'phone' => $o['order_phone'], 'country' => $o['order_country'], 'index' => $o['order_index'], 'addr' => $o['order_addr'], 'area' => $o['order_area'], 'city' => $o['order_city'], 'street' => $o['order_street'], 'count' => (int) $o['order_count'], 'items' => $o['order_items'] ? unserialize($o['order_items']) : false, 'delivery' => (int) $o['order_delivery'], 'discount' => (int) $o['order_discount'], 'more' => (int) $o['order_more'], 'price' => (int) $o['order_price'], 'comment' => $o['order_comment']);
    }
    $core->db->stop($query);
    return $items;
}
Exemplo n.º 11
0
    /**
     * Event handler: Called when handling actions for the "Tools" menu.
     *
     * Use {@link $Messages} to add Messages for the user.
     *
     * @see Plugin::AdminToolAction()
     */
    function AdminToolAction()
    {
        $action = param_action();
        if (!empty($action)) {
            // If form is submitted
            global $DB;
            switch ($action) {
                case 'geoip_find_country':
                    // Find and Assign Registration Country for all Users
                    $SQL = new SQL('Find all users without registration country');
                    $SQL->SELECT('user_ID, uset_value');
                    $SQL->FROM('T_users');
                    $SQL->FROM_add('LEFT JOIN T_users__usersettings
						 ON user_ID = uset_user_ID
						AND uset_name = "created_fromIPv4"');
                    $SQL->WHERE('user_reg_ctry_ID IS NULL');
                    $users = $DB->get_assoc($SQL->get());
                    $total_users = count($users);
                    if ($total_users == 0) {
                        // No users
                        $this->text_from_AdminTabAction = T_('No found users without registration country.');
                        break;
                    }
                    $count_nofound_country = 0;
                    $users_report = '';
                    foreach ($users as $user_ID => $created_fromIPv4) {
                        $users_report .= sprintf(T_('User #%s, IP:%s'), $user_ID, int2ip($created_fromIPv4));
                        if (empty($created_fromIPv4)) {
                            // No defined IP, Skip this user
                            $count_nofound_country++;
                            $users_report .= ' - <b class="orange">' . T_('IP is not defined!') . '</b><br />';
                            continue;
                        }
                        // Get Country by IP address
                        $Country = $this->get_country_by_IP(int2ip($created_fromIPv4));
                        if (!$Country) {
                            // No found country by IP address
                            $count_nofound_country++;
                            $users_report .= ' - <b class="red">' . T_('Country is not detected!') . '</b><br />';
                            continue;
                        }
                        // Update user's registration country
                        $DB->query('UPDATE T_users
								  SET user_reg_ctry_ID = ' . $DB->quote($Country->ID) . '
								WHERE user_ID = ' . $DB->quote($user_ID));
                        $users_report .= ' - ' . sprintf(T_('Country: <b>%s</b>'), $Country->get('name')) . '<br />';
                    }
                    $this->text_from_AdminTabAction = '<div>' . sprintf(T_('Count of users without registration country: <b>%s</b>'), $total_users) . '</div>';
                    if ($count_nofound_country > 0) {
                        // If some users have IP address with unknown country
                        $this->text_from_AdminTabAction .= '<div>' . sprintf(T_('Count of users whose country could not be identified: <b>%s</b>'), $count_nofound_country) . '</div>';
                    }
                    $this->text_from_AdminTabAction .= '<div style="margin-top:20px">' . $users_report . '</div>';
                    break;
            }
        }
    }
Exemplo n.º 12
0
    $CountryCache =& get_CountryCache();
    $Country = $CountryCache->get_by_ID($edited_User->reg_ctry_ID);
    $from_country = country_flag($Country->get('code'), $Country->get_name(), 'w16px', 'flag', '', false, true, 'margin-bottom:3px;vertical-align:middle;') . ' ' . $Country->get_name();
}
// Get field suffix for a field 'From Country' from the Plugins
$user_from_country_suffix = '';
$Plugins->restart();
while ($loop_Plugin =& $Plugins->get_next()) {
    $user_from_country_suffix .= $loop_Plugin->GetUserFromCountrySuffix($tmp_params = array('User' => &$edited_User));
}
$Form->begin_fieldset(T_('Registration info') . get_manual_link('user-admin-registration'));
$Form->info_field(T_('Account registered on'), $edited_User->dget('datecreated'), array('note' => '(' . date_ago(strtotime($edited_User->get('datecreated'))) . ')'));
$Form->info_field(T_('From IP'), format_to_output(int2ip($UserSettings->get('created_fromIPv4', $edited_User->ID))));
// Get status and name of IP range
$IPRangeCache =& get_IPRangeCache();
if ($IPRange =& $IPRangeCache->get_by_ip(int2ip($UserSettings->get('created_fromIPv4', $edited_User->ID)))) {
    // IP range exists in DB
    $iprange_status = $IPRange->get('status');
    $iprange_name = $IPRange->get_name();
} else {
    // There is no IP range in DB
    $iprange_status = '';
    $iprange_name = '';
}
$Form->info_field(T_('IP range'), $iprange_name);
$email_status_icon = '<div id="iprange_status_icon">' . aipr_status_icon($iprange_status) . '</div>';
$Form->select_input_array('edited_iprange_status', $iprange_status, aipr_status_titles(true), T_('IP range status'), '', array('force_keys_as_values' => true, 'background_color' => aipr_status_colors(), 'field_suffix' => $email_status_icon));
$Form->info_field(T_('From Country'), $from_country, array('field_suffix' => $user_from_country_suffix));
$Form->info_field(T_('From Domain'), format_to_output($UserSettings->get('user_domain', $edited_User->ID)));
$Form->info_field(T_('With Browser'), format_to_output($UserSettings->get('user_browser', $edited_User->ID)));
$Form->text_input('edited_user_source', $edited_User->source, 30, T_('Source link/code'), '', array('maxlength' => 30));
Exemplo n.º 13
0
/**
 * Increase a counter in DB antispam ip range table
 *
 * @param string Counter name: 'user', 'contact_email'
 */
function antispam_increase_counter($counter_name)
{
    switch ($counter_name) {
        case 'user':
            $field_name = 'aipr_user_count';
            break;
        case 'contact_email':
            $field_name = 'aipr_contact_email_count';
            break;
        default:
            debug_die('Wrong antispam counter name');
    }
    foreach (get_ip_list() as $ip) {
        if ($ip === '') {
            // Skip an empty
            continue;
        }
        $ip = int2ip(ip2int($ip));
        // Convert IPv6 to IPv4
        if (preg_match('#^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$#i', $ip)) {
            // Check IP for correct format
            $ip_24bit_start = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.0', $ip));
            $ip_24bit_end = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.255', $ip));
            global $DB;
            if ($iprange = get_ip_range($ip_24bit_start, $ip_24bit_end)) {
                // Update ip range
                $DB->query('UPDATE T_antispam__iprange
								SET ' . $field_name . ' = ' . $field_name . ' + 1
								WHERE aipr_ID = ' . $DB->quote($iprange->aipr_ID));
            } else {
                // Insert new ip range
                $DB->query('INSERT INTO T_antispam__iprange ( aipr_IPv4start, aipr_IPv4end, ' . $field_name . ' )
								VALUES ( ' . $DB->quote($ip_24bit_start) . ', ' . $DB->quote($ip_24bit_end) . ', 1 ) ');
            }
        }
    }
}
Exemplo n.º 14
0
function admin_module($core)
{
    $module = $core->get['m'] ? $core->get['m'] : null;
    $id = $core->post['id'] ? (int) $core->post['id'] : ($core->get['id'] ? (int) $core->get['id'] : 0);
    $page = $core->get['page'] > 0 ? (int) $core->get['page'] : 1;
    $message = $core->get['message'] ? $core->get['message'] : null;
    switch ($module) {
        case 'files':
            $d = opendir(DIR_NEWS);
            $files = array();
            while ($f = readdir($d)) {
                if (is_file(DIR_NEWS . $f)) {
                    $files[] = $f;
                }
            }
            closedir($d);
            sort($files);
            $core->tpl->load('body', 'files');
            $core->tpl->vars('body', array('upload' => $core->url('a', 'file-add', 0)));
            foreach ($files as $f) {
                $core->tpl->block('body', 'file', array('url' => sprintf(PATH_NEWS, $f), 'size' => mkb_out(filesize(DIR_NEWS . $f)), 'time' => date('d.m.Y H:i:s', filemtime(DIR_NEWS . $f)), 'name' => $f, 'del' => $core->url('a', 'file-del', 0) . '?name=' . $f));
            }
            $core->tpl->output('body');
            $core->_die();
            // Users List
        // Users List
        case 'users':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_user_add');
                    break;
                case 'edit-ok':
                    $core->info('info', 'done_user_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_user_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_user_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_user_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_user_del');
                    break;
                case 'del-a':
                    $core->info('error', 'error_user_root');
                    break;
            }
            if ($id) {
                $user = $core->db->row("SELECT * FROM " . DB_USER . " WHERE user_id = '{$id}' LIMIT 1");
                $core->mainline->add($core->lang['admin_user_h'], $core->url('m', 'users'));
                $core->mainline->add($user['user_name']);
                $core->header();
                $work = array();
                foreach ($core->lang['user_works'] as $i => $v) {
                    $work[] = array('name' => $v, 'value' => $i, 'select' => $user['user_work'] == $i);
                }
                $comps = $core->wmsale->get('comps');
                $comp = array(array('name' => '---', 'value' => 0));
                foreach ($comps as $i => $c) {
                    $comp[] = array('name' => $c, 'value' => $i, 'select' => $i == $user['user_comp']);
                }
                $exts = $core->wmsale->get('exts');
                $ext = array(array('name' => '---', 'value' => 0));
                foreach ($exts as $i => $c) {
                    $ext[] = array('name' => $c, 'value' => $i, 'select' => $i == $user['user_ext']);
                }
                $title = $core->lang['user_edit'];
                $action = $core->url('a', 'user-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['user_name'], 'descr' => $core->lang['user_name_d'], 'value' => $user['user_name']), array('type' => 'text', 'length' => 100, 'name' => 'email', 'head' => $core->lang['user_email'], 'descr' => $core->lang['user_email_d'], 'value' => $user['user_mail']), array('type' => 'text', 'length' => 32, 'name' => 'pass', 'head' => $core->lang['user_pass'], 'descr' => $core->lang['user_pass_d']), array('type' => 'checkbox', 'name' => 'level', 'head' => $core->lang['user_level'], 'descr' => $core->lang['user_level_d'], 'checked' => $user['user_level']), array('type' => 'checkbox', 'name' => 'ban', 'head' => $core->lang['user_ban'], 'descr' => $core->lang['user_ban_d'], 'checked' => $user['user_ban']), array('type' => 'checkbox', 'name' => 'warn', 'head' => $core->lang['user_warn'], 'descr' => $core->lang['user_warn_d'], 'checked' => $user['user_warn']), array('type' => 'checkbox', 'name' => 'vip', 'head' => $core->lang['comp_vip'], 'descr' => $core->lang['comp_vip_d'], 'checked' => $user['user_vip']), array('type' => 'select', 'name' => 'work', 'head' => $core->lang['user_work'], 'descr' => $core->lang['user_work_d'], 'value' => $work), array('type' => 'select', 'name' => 'comp', 'head' => $core->lang['company'], 'value' => $comp), array('type' => 'select', 'name' => 'ext', 'head' => $core->lang['agency'], 'value' => $ext), array('type' => 'checkbox', 'name' => 'compad', 'head' => $core->lang['user_compad'], 'descr' => $core->lang['user_compad_d'], 'checked' => $user['user_compad']), array('type' => 'checkbox', 'name' => 'call', 'head' => $core->lang['user_call'], 'descr' => $core->lang['user_call_d'], 'checked' => $user['user_call']), array('type' => 'checkbox', 'name' => 'shave', 'head' => $core->lang['user_shave'], 'descr' => $core->lang['user_shave_d'], 'checked' => $user['user_shave']), array('type' => 'text', 'length' => 5, 'name' => 'tariff', 'head' => $core->lang['tariff'], 'value' => $user['user_tariff']), array('type' => 'text', 'length' => 7, 'name' => 'money', 'head' => $core->lang['user_money'], 'descr' => $core->lang['user_money_d']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('useredit', $action, $method, $title, $field, $button);
                $core->footer();
            } else {
                $today = date('Ymd');
                $m1m = date('Ymd', strtotime('-2 weeks'));
                $m2m = date('Ymd', strtotime('-1 months'));
                $where = array();
                if (isset($core->get['s']) && $core->get['s']) {
                    require_once PATH_CORE . 'search.php';
                    $search = new SearchWords($core->get['s']);
                    if ($s = $search->get()) {
                        $where[] = $search->field(array('user_name', 'user_mail'));
                    } else {
                        $s = false;
                    }
                } else {
                    $s = false;
                }
                if (isset($core->get['c']) && $core->get['c']) {
                    $c = (int) $core->get['c'];
                    $where[] = "user_comp = '{$c}'";
                } else {
                    $c = false;
                }
                if (isset($core->get['l']) && $core->get['l'] != '') {
                    $l = (int) $core->get['l'];
                    $where[] = "user_work = '{$l}'";
                } else {
                    $l = null;
                }
                $where = count($where) ? implode(' AND ', $where) : '1';
                $sh = 30;
                $st = $sh * ($page - 1);
                $users = $core->db->field("SELECT COUNT(*) FROM " . DB_USER . " WHERE {$where}");
                $user = $users ? $core->db->data("SELECT * FROM " . DB_USER . " WHERE {$where} ORDER BY user_work DESC, user_id ASC LIMIT {$st}, {$sh}") : array();
                $comp = $core->wmsale->get('comps');
                $ext = $core->wmsale->get('exts');
                $core->mainline->add($core->lang['admin_user_h'], $core->url('m', 'users'));
                $core->header();
                $core->tpl->load('body', 'users');
                $core->tpl->vars('body', array('title' => $core->lang['admin_user_h'], 'text' => $core->text->lines($core->lang['admin_user_t']), 'name' => $core->lang['user'], 'email' => $core->lang['email'], 'vip' => $core->lang['iamvip'], 'level' => $core->lang['level'], 'comp' => $core->lang['company'], 'name' => $core->lang['user'], 'info' => $core->lang['cash'], 'action' => $core->lang['action'], 'enter' => $core->lang['enter'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirm'], 's' => $s, 'pages' => pages($core->url('m', 'users?') . ($c ? 'c=' . $c . '&' : '') . ($l !== null ? 'l=' . $l . '&' : '') . ($s ? 's=' . $s : ''), $users, $sh, $page), 'shown' => sprintf($core->lang['shown'], $st + 1, min($st + $sh, $users), $users), 'search' => $core->lang['search'], 'find' => $core->lang['find']));
                foreach ($comp as $ci => $cn) {
                    $core->tpl->block('body', 'comp', array('name' => $cn, 'value' => $ci, 'select' => $c == $ci ? 'selected="selected"' : ''));
                }
                foreach ($core->lang['user_works'] as $li => $ln) {
                    $core->tpl->block('body', 'level', array('name' => $ln, 'value' => $li, 'select' => $l !== null && $l == $li ? 'selected="selected"' : ''));
                }
                foreach ($user as &$i) {
                    $key = $i['user_id'] . md5(crypto::encode($i['user_mail'] . $i['user_pass'], $core->crypto));
                    $core->tpl->block('body', 'user', array('id' => $i['user_id'], 'name' => $search ? $search->highlight($i['user_name']) : $i['user_name'], 'email' => $search ? $search->highlight($i['user_mail']) : $i['user_mail'], 'mailto' => $i['user_mail'], 'vip' => $i['user_vip'] ? $core->lang['iamvip'] : '', 'level' => $i['user_level'] ? '<b class="boss" title="' . $core->lang['admin'] . '">' . $core->lang['user_works'][$i['user_work']] . '</b>' : $core->lang['user_works'][$i['user_work']], 'icon' => $i['user_ban'] ? 'block' : ($i['user_warn'] ? 'isua' : 'isok'), 'u_level' => $core->url('m', 'users?l=') . $i['user_work'] . ($c ? '&c=' . $c : '') . ($s ? '&s=' . $s : ''), 'enter' => sprintf($i['user_ref'] == 119 || $i['user_sub'] == 119 || $i['user_id'] == 119 ? $core->lang['mail_recover_r'] : $core->lang['mail_recover_u'], $key), 'cash' => rur($i['user_cash']), 'flw' => (int) $i['user_flw'], 'flwa' => (int) $i['user_flwa'], 'cr' => $i['user_cr'] < 10 ? sprintf("%0.2f", $i['user_cr']) : sprintf("%0.1f", $i['user_cr']), 'crc' => $i['user_cr'] < 10 ? $i['user_cr'] < 5 ? 'green' : 'yellow' : ($i['user_cr'] > 20 ? 'red fat' : 'red'), 'epc' => rur($i['user_epc']), 'comp' => $i['user_comp'] ? $i['user_compad'] ? '<b class="boss" title="' . $core->lang['admin'] . '">' . $comp[$i['user_comp']] . '</b>' : $comp[$i['user_comp']] : ($i['user_ref'] ? $core->user->get($i['user_ref'], 'user_name') : $ext[$i['user_ext']]), 'sclass' => $i['supp_last'] ? $i['supp_admin'] ? 'suppst-new' : ($i['supp_type'] ? $i['supp_new'] ? 'suppst-ur' : 'suppst-ok' : 'suppst-ua') : 'help', 'u_comp' => $core->url('m', 'users?c=') . $i['user_comp'] . ($l !== null ? '&l=' . $l : '') . ($s ? '&s=' . $s : ''), 'support' => $core->url('i', 'support', $i['user_id']), 'orders' => $core->url('m', 'order') . '?wm=' . $i['user_id'], 'url' => $core->url('i', 'users', $i['user_id']), 'edit' => $core->url('i', 'users', $i['user_id']), 'del' => $core->url('a', 'user-del', $i['user_id']), 'ip' => $i['user_ip'] ? int2ip($i['user_ip']) : '', 'date' => $i['user_date'] ? date2form($i['user_date']) : '', 'dclass' => $i['user_date'] == $today ? 'fat green' : ($i['user_date'] < $m1m ? $i['user_date'] < $m2m ? 'red' : 'yellow' : '')));
                }
                unset($d);
                $core->tpl->output('body');
                $title = $core->lang['user_add'];
                $action = $core->url('a', 'user-add', 0);
                $method = 'post';
                $field = array(array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['user_name'], 'descr' => $core->lang['user_name_d']), array('type' => 'text', 'length' => 100, 'name' => 'email', 'head' => $core->lang['user_email'], 'descr' => $core->lang['user_email_d']), array('type' => 'pass', 'length' => 32, 'name' => 'pass', 'head' => $core->lang['user_pass'], 'descr' => $core->lang['user_pass_d']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('useradd', $action, $method, $title, $field, $button);
                $core->footer('admin');
            }
            $core->_die();
            // Offers
        // Offers
        case 'offer':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_offer_add');
                    break;
                case 'edit-ok':
                    $core->info('info', 'done_offer_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_offer_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_offer_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_offer_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_offer_del');
                    break;
            }
            if ($id) {
                $offer = $core->db->row("SELECT * FROM " . DB_OFFER . " WHERE offer_id = '{$id}' LIMIT 1");
                $mrt = $offer['offer_mrt'] ? unserialize($offer['offer_mrt']) : array();
                $comps = $core->wmsale->get('comps');
                $payment = array();
                foreach ($core->lang['offer_payments'] as $v => $n) {
                    $payment[] = array('name' => $n, 'value' => $v, 'select' => $v == $offer['offer_payment']);
                }
                $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
                $core->mainline->add($offer['offer_name']);
                $core->header();
                $title = $core->lang['offer_edit_h'];
                $action = $core->url('a', 'offer-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_edit_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'value' => $offer['offer_name']), array('type' => 'text', 'length' => 200, 'name' => 'descr', 'head' => $core->lang['offer_descr'], 'descr' => $core->lang['offer_descr_d'], 'value' => $offer['offer_descr']), array('type' => 'textarea', 'rows' => 4, 'name' => 'text', 'head' => $core->lang['offer_text'], 'descr' => $core->lang['offer_text_d'], 'value' => $offer['offer_text']), array('type' => 'mces', 'name' => 'info', 'head' => $core->lang['offer_info'], 'descr' => $core->lang['offer_info_d'], 'value' => $offer['offer_info']), array('type' => 'text', 'length' => 100, 'name' => 'price', 'head' => $core->lang['price'], 'value' => $offer['offer_price']), array('type' => 'file', 'name' => 'image', 'head' => $core->lang['logo'], 'descr' => 'JPEG 320x180px'), array('type' => 'text', 'length' => 100, 'name' => 'country', 'head' => $core->lang['offer_country'], 'descr' => $core->lang['offer_country_d'], 'value' => $offer['offer_country']), array('type' => 'checkbox', 'name' => 'active', 'head' => $core->lang['active'], 'descr' => $core->lang['offer_active_d'], 'checked' => $offer['offer_active']), array('type' => 'checkbox', 'name' => 'vars', 'head' => $core->lang['offer_vars'], 'descr' => $core->lang['offer_vars_d'], 'checked' => $offer['offer_vars']), array('type' => 'checkbox', 'name' => 'delivery', 'head' => $core->lang['offer_delivery'], 'descr' => $core->lang['offer_delivery_d'], 'checked' => $offer['offer_delivery']), array('type' => 'select', 'name' => 'payment', 'head' => $core->lang['offer_payment'], 'descr' => $core->lang['offer_payment_d'], 'value' => $payment), array('type' => 'head', 'value' => $core->lang['offer_mr_h']), array('type' => 'checkbox', 'name' => 'mr', 'head' => $core->lang['offer_mr'], 'descr' => $core->lang['offer_mr_d'], 'checked' => $offer['offer_mr']), array('type' => 'textarea', 'rows' => 4, 'name' => 'script', 'head' => $core->lang['offer_script'], 'descr' => $core->lang['offer_script_d'], 'value' => $offer['offer_script']));
                foreach ($comps as $i => $n) {
                    $field[] = array('type' => 'text', 'name' => "mrt[{$i}]", 'head' => $n, 'descr' => $core->lang['offer_mrt_d'], 'value' => $mrt[$i]);
                }
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('offeredit', $action, $method, $title, $field, $button);
                $core->footer();
            } else {
                $offer = $core->db->data("SELECT * FROM " . DB_OFFER . " ORDER BY offer_name ASC");
                $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
                $core->header();
                $core->tpl->load('body', 'safelist');
                $core->tpl->vars('body', array('title' => $core->lang['offers_h'], 'text' => $core->text->lines($core->lang['offers_t']), 'name' => $core->lang['name'], 'info' => $core->lang['price'], 'action' => $core->lang['action'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirms']));
                foreach ($offer as &$i) {
                    $act = $i['offer_active'] ? '<span class="icon sm rf isok"></span>' : '';
                    $core->tpl->block('body', 'item', array('id' => $i['offer_id'], 'name' => $i['offer_name'], 'more' => $act . '<small>' . rur($i['offer_price']) . '</small>', 'info' => ($i['offer_vars'] ? '<a href="' . $core->url('i', 'offer-vars', $i['offer_id']) . '" class="variant">' . $core->lang['variants'] . '</a>' : '') . ' <a href="' . $core->url('i', 'offer-price', $i['offer_id']) . '" class="money">' . $core->lang['price'] . '</a> <a href="' . $core->url('i', 'offer-pars', $i['offer_id']) . '" class="param">' . $core->lang['params'] . '</a>', 'url' => $core->url('i', 'offer-sites', $i['offer_id']), 'edit' => $core->url('i', 'offer', $i['offer_id']), 'del' => $core->url('a', 'offer-del', $i['offer_id'])));
                }
                unset($d);
                $core->tpl->output('body');
                $title = $core->lang['offer_add_h'];
                $action = $core->url('a', 'offer-add', 0);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_add_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name']), array('type' => 'text', 'length' => 32, 'name' => 'price', 'head' => $core->lang['price']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
                $core->form('offeradd', $action, $method, $title, $field, $button);
                $core->footer('admin');
            }
            $core->_die();
        case 'offer-price':
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $offer = $core->db->row("SELECT * FROM " . DB_OFFER . " WHERE offer_id = '{$id}' LIMIT 1");
            $prices = unserialize($offer['offer_prt']);
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_price_h'], $offer['offer_name']));
            $core->header();
            $core->tpl->load('body', 'price');
            $core->tpl->vars('body', array('title' => sprintf($core->lang['offer_price_h'], $offer['offer_name']), 'u_save' => $core->url('a', 'offer-price', $id), 'save' => $core->lang['save']));
            $core->tpl->block('body', 'type', array('name' => $core->lang['offer_prices_base']));
            $core->tpl->block('body', 'type.price', array('name' => $core->lang['offer_price_main'], 'wmn' => 'wmb', 'wmv' => $offer['offer_wm'] ? $offer['offer_wm'] : '', 'wmun' => 'wmub', 'wmuv' => $offer['offer_wmu'] ? $offer['offer_wmu'] : '', 'payn' => 'payb', 'payv' => $offer['offer_pay'] ? $offer['offer_pay'] : '', 'pyun' => 'pyub', 'pyuv' => $offer['offer_pyu'] ? $offer['offer_pyu'] : '', 'refn' => 'refb', 'refv' => $offer['offer_ref'] ? $offer['offer_ref'] : ''));
            $core->tpl->block('body', 'type.price.ref');
            $core->tpl->block('body', 'type.price', array('name' => $core->lang['offer_price_vip'], 'wmn' => 'wmv', 'wmv' => $offer['offer_wm_vip'] ? $offer['offer_wm_vip'] : '', 'wmun' => 'wmuv', 'wmuv' => $offer['offer_wmu_vip'] ? $offer['offer_wmu_vip'] : '', 'payn' => 'payv', 'payv' => $offer['offer_pay_vip'] ? $offer['offer_pay_vip'] : '', 'pyun' => 'pyuv', 'pyuv' => $offer['offer_pyu_vip'] ? $offer['offer_pyu_vip'] : '', 'refn' => 'refv', 'refv' => $offer['offer_ref_vip'] ? $offer['offer_ref_vip'] : ''));
            $core->tpl->block('body', 'type.price.ref');
            $core->tpl->block('body', 'type.price', array('name' => $core->lang['offer_price_ext'], 'cls' => 'dark', 'wmn' => 'wme', 'wmv' => $offer['offer_wm_ext'] ? $offer['offer_wm_ext'] : '', 'wmun' => 'wmue', 'wmuv' => $offer['offer_wmu_ext'] ? $offer['offer_wmu_ext'] : '', 'payn' => 'paye', 'payv' => $offer['offer_pay_ext'] ? $offer['offer_pay_ext'] : '', 'pyun' => 'pyue', 'pyuv' => $offer['offer_pyu_ext'] ? $offer['offer_pyu_ext'] : ''));
            $comps = $core->wmsale->get('comps');
            if ($comps) {
                $core->tpl->block('body', 'type', array('name' => $core->lang['offer_prices_comp']));
                foreach ($comps as $i => $c) {
                    $uc = $core->wmsale->get('comp', $i, 'user_id');
                    $core->tpl->block('body', 'type.price', array('name' => $c, 'wmn' => "wm[{$uc}]", 'wmv' => $prices[$uc][0] ? $prices[$uc][0] : '', 'wmun' => "wmu[{$uc}]", 'wmuv' => $prices[$uc][3] ? $prices[$uc][3] : '', 'payn' => "pay[{$uc}]", 'payv' => $prices[$uc][1] ? $prices[$uc][1] : '', 'pyun' => "pyu[{$uc}]", 'pyuv' => $prices[$uc][4] ? $prices[$uc][4] : '', 'refn' => "ref[{$uc}]", 'refv' => $prices[$uc][2] ? $prices[$uc][2] : ''));
                    $core->tpl->block('body', 'type.price.ref');
                }
            }
            $exts = $core->wmsale->get('exts');
            if ($exts) {
                $core->tpl->block('body', 'type', array('name' => $core->lang['offer_prices_ext']));
                foreach ($exts as $i => $c) {
                    $uc = $core->wmsale->get('ext', $i, 'user_id');
                    $core->tpl->block('body', 'type.price', array('name' => $c, 'cls' => 'dark', 'wmn' => "wm[{$uc}]", 'wmv' => $prices[$uc][0] ? $prices[$uc][0] : '', 'wmun' => "wmu[{$uc}]", 'wmuv' => $prices[$uc][3] ? $prices[$uc][3] : '', 'payn' => "pay[{$uc}]", 'payv' => $prices[$uc][1] ? $prices[$uc][1] : '', 'pyun' => "pyu[{$uc}]", 'pyuv' => $prices[$uc][4] ? $prices[$uc][4] : ''));
                }
            }
            $refs = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_work = -2 ORDER BY user_name ASC");
            if ($refs) {
                $core->tpl->block('body', 'type', array('name' => $core->lang['offer_prices_ref']));
                foreach ($refs as $uc => $c) {
                    $core->tpl->block('body', 'type.price', array('name' => $c, 'wmn' => "wm[{$uc}]", 'wmv' => $prices[$uc][0] ? $prices[$uc][0] : '', 'wmun' => "wmu[{$uc}]", 'wmuv' => $prices[$uc][3] ? $prices[$uc][3] : '', 'payn' => "pay[{$uc}]", 'payv' => $prices[$uc][1] ? $prices[$uc][1] : '', 'pyun' => "pyu[{$uc}]", 'pyuv' => $prices[$uc][4] ? $prices[$uc][4] : '', 'refn' => "ref[{$uc}]", 'refv' => $prices[$uc][2] ? $prices[$uc][2] : ''));
                    $core->tpl->block('body', 'type.price.ref');
                }
            }
            $vips = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_vip = 1 AND user_work IN ( 0, 2 ) ORDER BY user_name ASC");
            if ($vips) {
                $core->tpl->block('body', 'type', array('name' => $core->lang['offer_prices_vip']));
                foreach ($vips as $uc => $c) {
                    $core->tpl->block('body', 'type.price', array('name' => $c, 'wmn' => "wm[{$uc}]", 'wmv' => $prices[$uc][0] ? $prices[$uc][0] : '', 'wmun' => "wmu[{$uc}]", 'wmuv' => $prices[$uc][3] ? $prices[$uc][3] : '', 'payn' => "pay[{$uc}]", 'payv' => $prices[$uc][1] ? $prices[$uc][1] : '', 'pyun' => "pyu[{$uc}]", 'pyuv' => $prices[$uc][4] ? $prices[$uc][4] : '', 'refn' => "ref[{$uc}]", 'refv' => $prices[$uc][2] ? $prices[$uc][2] : ''));
                    $core->tpl->block('body', 'type.price.ref');
                }
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'offer-pars':
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $offer = $core->db->row("SELECT * FROM " . DB_OFFER . " WHERE offer_id = '{$id}' LIMIT 1");
            $pars = unserialize($offer['offer_pars']);
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_pars_h'], $offer['offer_name']));
            $core->header();
            $core->tpl->load('body', 'param');
            $core->tpl->vars('body', array('title' => sprintf($core->lang['offer_pars_h'], $offer['offer_name']), 'u_save' => $core->url('a', 'offer-param', $id), 'shave' => $pars['shave'] ? $pars['shave'] : '', 'save' => $core->lang['save']));
            $i = 1;
            foreach ($pars as $k => $v) {
                if (substr($k, 0, 5) != 'shave') {
                    $core->tpl->block('body', 'param', array('id' => $i, 'name' => $k, 'val' => $v ? $v : ''));
                    $i++;
                }
            }
            $i = 111;
            $comps = $core->wmsale->get('comps');
            foreach ($comps as $n => $c) {
                $core->tpl->block('body', 'shave', array('id' => $i, 'name' => $c, 'param' => 'shave' . $n, 'val' => $pars['shave' . $n] ? $pars['shave' . $n] : ''));
                $i++;
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'offer-vars':
            switch ($message) {
                case 'edit-ok':
                    $core->info('info', 'done_offer_var_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_offer_var_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_offer_var_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_offer_var_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_offer_var_del');
                    break;
            }
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $offer = $core->db->row("SELECT * FROM " . DB_OFFER . " WHERE offer_id = '{$id}' LIMIT 1");
            if (!$offer['offer_vars']) {
                $core->go($core->url('m', 'offer'));
            }
            $vars = $core->db->data("SELECT * FROM " . DB_VARS . " WHERE offer_id = '{$id}' ORDER BY var_name ASC");
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_vars_h'], $offer['offer_name']));
            $core->header();
            $core->tpl->load('body', 'list');
            $core->tpl->vars('body', array('title' => sprintf($core->lang['offer_vars_h'], $offer['offer_name']), 'text' => $core->text->lines($core->lang['offer_vars_t']), 'name' => $core->lang['name'], 'info' => $core->lang['price'], 'action' => $core->lang['action'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirm']));
            foreach ($vars as &$i) {
                $core->tpl->block('body', 'item', array('id' => $i['var_id'], 'name' => $i['var_name'], 'info' => rur($i['var_price']), 'url' => $core->url('i', 'offer-var', $i['var_id']), 'edit' => $core->url('i', 'offer-var', $i['var_id']), 'del' => $core->url('a', 'offer-var-del', $i['var_id'])));
            }
            unset($d);
            $core->tpl->output('body');
            $title = $core->lang['offer_var_add_h'];
            $action = $core->url('a', 'offer-var-add', $id);
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_var_add_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name']), array('type' => 'text', 'length' => 32, 'name' => 'price', 'head' => $core->lang['price']));
            $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
            $core->form('offervaradd', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'offer-var':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_offer_var_add');
                    break;
                case 'add-e':
                    $core->info('error', 'error_offer_var_add');
                    break;
            }
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $vari = $core->db->row("SELECT * FROM " . DB_VARS . " WHERE var_id = '{$id}' LIMIT 1");
            $offer = $core->db->row("SELECT * FROM " . DB_OFFER . " WHERE offer_id = '" . $vari['offer_id'] . "' LIMIT 1");
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_vars_h'], $offer['offer_name']), $core->url('i', 'offer-vars', $offer['offer_id']));
            $core->mainline->add($vari['var_name']);
            $core->header();
            $title = $core->lang['offer_var_edit_h'];
            $action = $core->url('a', 'offer-var-edit', $id);
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_var_edit_t'])), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'value' => $vari['var_name']), array('type' => 'text', 'length' => 100, 'name' => 'short', 'head' => $core->lang['offer_short'], 'descr' => $core->lang['offer_short_d'], 'value' => $vari['var_short']), array('type' => 'text', 'length' => 10, 'name' => 'price', 'head' => $core->lang['price'], 'value' => $vari['var_price']));
            $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
            $core->form('offeredit', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'offer-sites':
            switch ($message) {
                case 'edit-ok':
                    $core->info('info', 'done_offer_site_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_offer_site_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_offer_site_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_offer_site_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_offer_site_del');
                    break;
            }
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $offer = $core->wmsale->get('offer', $id);
            $comp = $core->wmsale->get('comps');
            $sites = $core->db->data("SELECT * FROM " . DB_SITE . " WHERE offer_id = '{$id}' ORDER BY site_type, site_url ASC");
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_sites_h'], $offer['offer_name']));
            $core->header();
            $core->tpl->load('body', 'list');
            $core->tpl->vars('body', array('title' => sprintf($core->lang['offer_sites_h'], $offer['offer_name']), 'text' => $core->text->lines(sprintf($core->lang['offer_sites_t'], $core->url('a', 'offer-site-list', $id), $core->url('a', 'offer-site-renew', $id))), 'name' => $core->lang['name'], 'info' => $core->lang['company'], 'action' => $core->lang['action'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirm']));
            foreach ($sites as &$i) {
                $act = $i['site_default'] ? '<span class="icon sm rf isok"></span>' : '';
                $core->tpl->block('body', 'item', array('id' => $i['site_id'], 'name' => $i['site_url'], 'more' => $act . sprintf('<small>(<a target="_blank" href="http://%s/">%s</a>)</small>', $i['site_url'], $core->lang['site_types'][$i['site_type']]), 'info' => $comp[$i['comp_id']], 'url' => $core->url('i', 'offer-site', $i['site_id']), 'edit' => $core->url('i', 'offer-site', $i['site_id']), 'del' => $core->url('a', 'offer-site-del', $i['site_id'])));
            }
            unset($d);
            $core->tpl->output('body');
            $title = $core->lang['offer_site_add_h'];
            $action = $core->url('a', 'offer-site-add', $id);
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_site_add_t'])), array('type' => 'text', 'length' => 100, 'name' => 'url', 'head' => $core->lang['offer_url'], 'descr' => $core->lang['offer_url_d']));
            $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
            $core->form('offersiteadd', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'offer-site':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_offer_site_add');
                    break;
                case 'add-e':
                    $core->info('error', 'error_offer_site_add');
                    break;
            }
            if (!$id) {
                $core->go($core->url('m', 'offer'));
            }
            $site = $core->wmsale->get('site', $id);
            $offer = $core->wmsale->get('offer', $site['offer_id']);
            $comps = $core->wmsale->get('comps');
            $core->mainline->add($core->lang['offers_h'], $core->url('m', 'offer'));
            $core->mainline->add(sprintf($core->lang['offer_sites_h'], $offer['offer_name']), $core->url('i', 'offer-sites', $offer['offer_id']));
            $core->mainline->add($site['site_url']);
            $core->header();
            $comp = array();
            foreach ($comps as $cv => $cn) {
                $comp[] = array('name' => $cn, 'value' => $cv, 'select' => $cv == $site['comp_id']);
            }
            $mobs = array();
            foreach ($core->lang['site_mobiles'] as $mi => $mv) {
                $mobs[] = array('name' => $mv, 'value' => $mi, 'select' => $mi == $site['site_mobile']);
            }
            $title = $core->lang['offer_site_edit_h'];
            $action = $core->url('a', 'offer-site-edit', $id);
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['offer_site_edit_t'])), array('type' => 'text', 'length' => 100, 'name' => 'url', 'head' => $core->lang['offer_url'], 'descr' => $core->lang['offer_url_d'], 'value' => $site['site_url']), array('type' => 'text', 'length' => 100, 'name' => 'key', 'head' => $core->lang['offer_key'], 'descr' => $core->lang['offer_key_d'], 'value' => $site['site_key']), array('type' => 'select', 'name' => 'comp', 'head' => $core->lang['company'], 'value' => $comp), array('type' => 'select', 'name' => 'mobile', 'head' => $core->lang['site_mobile'], 'descr' => $core->lang['site_mobile_d'], 'value' => $mobs), array('type' => 'checkbox', 'name' => 'type', 'head' => $core->lang['site_type'], 'descr' => $core->lang['site_type_d'], 'checked' => $site['site_type']), array('type' => 'checkbox', 'name' => 'default', 'head' => $core->lang['site_default'], 'descr' => $core->lang['site_default_d'], 'checked' => $site['site_default']), array('type' => 'checkbox', 'name' => 'comph', 'head' => $core->lang['site_comp'], 'descr' => $core->lang['site_comp_d'], 'checked' => $site['site_comp']));
            $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
            $core->form('offeredit', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'integration':
            if ($id) {
                $comp = $core->wmsale->get('comp', $id);
                $flds = unserialize($comp['int_add_field']);
                $fld = '';
                if ($flds) {
                    foreach ($flds as $k => $v) {
                        $fld .= "{$k} {$v}\n";
                    }
                }
                $fld = trim($fld);
                $flds2 = unserialize($comp['int_chk_field']);
                $fld2 = '';
                if ($flds2) {
                    foreach ($flds2 as $k => $v) {
                        $fld2 .= "{$k} {$v}\n";
                    }
                }
                $fld2 = trim($fld2);
                $format = array();
                foreach ($core->lang['comp_int_formats'] as $v => $n) {
                    $format[] = array('name' => $n, 'value' => $v, 'select' => $v == $comp['int_chk_format']);
                }
                $core->mainline->add($core->lang['admin_comp_h'], $core->url('m', 'comps'));
                $core->mainline->add($comp['comp_name']);
                $core->header();
                $title = $core->lang['comp_int_h'];
                $action = $core->url('a', 'comps-int', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['comp_int_t'])), array('type' => 'checkbox', 'name' => 'add', 'head' => $core->lang['comp_int_add'], 'descr' => $core->lang['comp_int_add_d'], 'checked' => $comp['int_add']), array('type' => 'text', 'length' => 200, 'name' => 'add_url', 'head' => $core->lang['comp_int_add_url'], 'descr' => $core->lang['comp_int_add_url_d'], 'value' => htmlspecialchars($comp['int_add_url'])), array('type' => 'code', 'name' => 'add_pre', 'head' => $core->lang['comp_int_pre'], 'value' => $comp['int_add_pre']), array('type' => 'textarea', 'rows' => 5, 'name' => 'add_field', 'head' => $core->lang['comp_int_add_field'], 'descr' => $core->lang['comp_int_add_field_d'], 'value' => $fld), array('type' => 'code', 'lang' => 'javascript', 'name' => 'add_code', 'head' => $core->lang['comp_int_add_code'], 'descr' => $core->lang['comp_int_add_code_d'], 'value' => $comp['int_add_code']), array('type' => 'checkbox', 'name' => 'chk', 'head' => $core->lang['comp_int_chk'], 'descr' => $core->lang['comp_int_chk_d'], 'checked' => $comp['int_chk']), array('type' => 'text', 'length' => 200, 'name' => 'chk_url', 'head' => $core->lang['comp_int_chk_url'], 'descr' => $core->lang['comp_int_chk_url_d'], 'value' => htmlspecialchars($comp['int_chk_url'])), array('type' => 'code', 'name' => 'chk_pre', 'head' => $core->lang['comp_int_pre'], 'value' => $comp['int_chk_pre']), array('type' => 'textarea', 'rows' => 5, 'name' => 'chk_field', 'head' => $core->lang['comp_int_chk_field'], 'descr' => $core->lang['comp_int_chk_field_d'], 'value' => $fld2), array('type' => 'text', 'length' => 5, 'name' => 'chk_count', 'head' => $core->lang['comp_int_chk_count'], 'descr' => $core->lang['comp_int_chk_count_d'], 'value' => $comp['int_chk_count']), array('type' => 'select', 'name' => 'chk_format', 'head' => $core->lang['comp_int_chk_format'], 'value' => $format), array('type' => 'code', 'lang' => 'javascript', 'name' => 'chk_code', 'head' => $core->lang['comp_int_chk_code'], 'descr' => $core->lang['comp_int_chk_code_d'], 'value' => $comp['int_chk_code']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('integrate', $action, $method, $title, $field, $button);
                $core->footer();
                $core->_die();
            }
        case 'comps':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_comps_add');
                    break;
                case 'edit-ok':
                    $core->info('info', 'done_comps_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_comps_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_comps_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_comps_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_comps_del');
                    break;
                case 'del-a':
                    $core->info('error', 'error_comps_root');
                    break;
            }
            if ($id) {
                $comp = $core->db->row("SELECT * FROM " . DB_COMP . " WHERE comp_id = '{$id}' LIMIT 1");
                $user = array(array('name' => '&mdash; ' . $core->lang['comp_free'] . ' &mdash;', 'value' => 0));
                $users = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_comp = '{$id}' AND user_compad = 1 ORDER BY user_name ASC");
                foreach ($users as $u => $n) {
                    $user[] = array('name' => $n, 'value' => $u, 'select' => $u == $comp['user_id']);
                }
                $core->mainline->add($core->lang['admin_comp_h'], $core->url('m', 'comps'));
                $core->mainline->add($comp['comp_name']);
                $core->header();
                $title = $core->lang['comp_edit'];
                $action = $core->url('a', 'comps-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['comp_info_t'])), array('type' => 'select', 'name' => 'user', 'head' => $core->lang['comp_user'], 'descr' => $core->lang['comp_user_d'], 'value' => $user), array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'value' => $comp['comp_name']), array('type' => 'text', 'length' => 100, 'name' => 'fio', 'head' => $core->lang['comp_name'], 'descr' => $core->lang['comp_name_d'], 'value' => $comp['comp_fio']), array('type' => 'text', 'length' => 100, 'name' => 'phone', 'head' => $core->lang['phone'], 'value' => $comp['comp_phone']), array('type' => 'text', 'length' => 100, 'name' => 'addr', 'head' => $core->lang['address'], 'descr' => $core->lang['comp_addr_d'], 'value' => $comp['comp_addr']), array('type' => 'text', 'length' => 8, 'name' => 'index', 'head' => $core->lang['index'], 'descr' => $core->lang['comp_index_d'], 'value' => $comp['comp_index']), array('type' => 'head', 'value' => $core->lang['comp_banking']), array('type' => 'text', 'length' => 100, 'name' => 'bank', 'head' => $core->lang['comp_bank'], 'descr' => $core->lang['comp_bank_d'], 'value' => $comp['comp_bank']), array('type' => 'text', 'length' => 15, 'name' => 'bik', 'head' => $core->lang['comp_bik'], 'value' => $comp['comp_bik']), array('type' => 'text', 'length' => 30, 'name' => 'acc', 'head' => $core->lang['comp_acc'], 'value' => $comp['comp_acc']), array('type' => 'text', 'length' => 30, 'name' => 'ks', 'head' => $core->lang['comp_ks'], 'value' => $comp['comp_ks']), array('type' => 'text', 'length' => 15, 'name' => 'inn', 'head' => $core->lang['comp_inn'], 'descr' => $core->lang['comp_inn_d'], 'value' => $comp['comp_inn']), array('type' => 'head', 'value' => $core->lang['comp_delivery']), array('type' => 'text', 'length' => 30, 'name' => 'spsr', 'head' => $core->lang['comp_spsr'], 'descr' => $core->lang['comp_spsr_d'], 'value' => $comp['comp_spsr']), array('type' => 'text', 'length' => 50, 'name' => 'spsr_login', 'head' => $core->lang['login'], 'value' => $comp['comp_spsr_login']), array('type' => 'text', 'length' => 50, 'name' => 'spsr_pass', 'head' => $core->lang['pass'], 'value' => $comp['comp_spsr_pass']), array('type' => 'text', 'length' => 50, 'name' => 'spsr_from', 'head' => $core->lang['city'], 'value' => $comp['comp_spsr_from']), array('type' => 'head', 'value' => $core->lang['comp_sms']), array('type' => 'checkbox', 'name' => 'sms_accept', 'head' => $core->lang['comp_sms_accept'], 'descr' => $core->lang['comp_sms_accept_d'], 'checked' => $comp['sms_accept']), array('type' => 'checkbox', 'name' => 'sms_post', 'head' => $core->lang['comp_sms_post'], 'descr' => $core->lang['comp_sms_post_d'], 'checked' => $comp['sms_post']), array('type' => 'checkbox', 'name' => 'sms_spsr', 'head' => $core->lang['comp_sms_spsr'], 'descr' => $core->lang['comp_sms_spsr_d'], 'checked' => $comp['sms_spsr']), array('type' => 'checkbox', 'name' => 'sms_rupo', 'head' => $core->lang['comp_sms_rupo'], 'descr' => $core->lang['comp_sms_rupo_d'], 'checked' => $comp['sms_rupo']), array('type' => 'checkbox', 'name' => 'autoaccept', 'head' => $core->lang['comp_autoaccept'], 'descr' => $core->lang['comp_autoaccept_d'], 'checked' => $comp['autoaccept']), array('type' => 'text', 'name' => 'callscheme', 'head' => $core->lang['comp_callscheme'], 'descr' => $core->lang['comp_callscheme_d'], 'value' => $comp['callscheme']), array('type' => 'head', 'value' => $core->lang['comp_pays']), array('type' => 'mces', 'name' => 'pay_info', 'head' => $core->lang['comp_pay'], 'descr' => $core->lang['comp_pay_d'], 'value' => $comp['pay_info']), array('type' => 'text', 'length' => 13, 'name' => 'pay_wmr', 'head' => $core->lang['comp_wmr'], 'value' => $comp['pay_wmr']), array('type' => 'text', 'length' => 64, 'name' => 'pay_wmk', 'head' => $core->lang['comp_wmk'], 'value' => $comp['pay_wmk']), array('type' => 'text', 'length' => 64, 'name' => 'pay_ymr', 'head' => $core->lang['comp_ymr'], 'value' => $comp['pay_ymr']), array('type' => 'text', 'length' => 64, 'name' => 'pay_ymk', 'head' => $core->lang['comp_ymk'], 'value' => $comp['pay_ymk']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('comp', $action, $method, $title, $field, $button);
                $core->footer();
            } else {
                $comps = $core->db->data("SELECT comp_id, comp_name, comp_vip, user_id FROM " . DB_COMP . " ORDER BY comp_name ASC");
                $core->mainline->add($core->lang['admin_comp_h'], $core->url('m', 'comps'));
                $core->header();
                $core->tpl->load('body', 'safelist');
                $core->tpl->vars('body', array('title' => $core->lang['admin_comp_h'], 'text' => $core->text->lines($core->lang['admin_comp_t']), 'name' => $core->lang['name'], 'info' => $core->lang['cash'], 'action' => $core->lang['action'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirms']));
                foreach ($comps as &$i) {
                    $cash = $i['user_id'] ? rur($core->user->get($i['user_id'], 'user_cash')) : $core->lang['comp_free'];
                    $core->tpl->block('body', 'item', array('id' => $i['comp_id'], 'name' => $i['comp_name'], 'more' => ($i['comp_vip'] ? $core->lang['iamvip'] : '') . ' <small>(<a href="' . $core->url('i', 'integration', $i['comp_id']) . '">' . $core->lang['comp_int'] . '</a>)</small>', 'info' => $cash, 'url' => $core->url('i', 'comps', $i['comp_id']), 'edit' => $core->url('i', 'comps', $i['comp_id']), 'del' => $core->url('a', 'comps-del', $i['comp_id'])));
                }
                unset($d);
                $core->tpl->output('body');
                $title = $core->lang['comp_add'];
                $action = $core->url('a', 'comps-add', '');
                $method = 'post';
                $field = array(array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'descr' => $core->lang['comp_add_d']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
                $core->form('compadd', $action, $method, $title, $field, $button);
                $core->footer('admin');
            }
            $core->_die();
        case 'ext':
            switch ($message) {
                case 'add-ok':
                    $core->info('info', 'done_add');
                    break;
                case 'edit-ok':
                    $core->info('info', 'done_edit');
                    break;
                case 'del-ok':
                    $core->info('info', 'done_del');
                    break;
                case 'add-e':
                    $core->info('error', 'error_add');
                    break;
                case 'edit-e':
                    $core->info('error', 'error_edit');
                    break;
                case 'del-e':
                    $core->info('error', 'error_del');
                    break;
            }
            if ($id) {
                $ext = $core->db->row("SELECT * FROM " . DB_EXT . " WHERE ext_id = '{$id}' LIMIT 1");
                $user = array(array('name' => '&mdash; ' . $core->lang['comp_free'] . ' &mdash;', 'value' => 0));
                $users = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_ext = '{$id}' ORDER BY user_name ASC");
                foreach ($users as $u => $n) {
                    $user[] = array('name' => $n, 'value' => $u, 'select' => $u == $ext['user_id']);
                }
                $core->mainline->add($core->lang['admin_ext_h'], $core->url('m', 'ext'));
                $core->mainline->add($ext['ext_name']);
                $core->header();
                $title = $core->lang['ext_edit'];
                $action = $core->url('a', 'ext-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'value' => $ext['ext_name']), array('type' => 'text', 'length' => 100, 'name' => 'key', 'head' => $core->lang['ext_key'], 'value' => $ext['ext_key']), array('type' => 'select', 'name' => 'user', 'head' => $core->lang['ext_user'], 'descr' => $core->lang['ext_user_d'], 'value' => $user), array('type' => 'head', 'value' => $core->lang['ext_url']), array('type' => 'line', 'value' => $core->lang['ext_url_d']), array('type' => 'text', 'length' => 200, 'name' => 'url_new', 'head' => $core->lang['ext_new'], 'value' => $ext['url_new']), array('type' => 'text', 'length' => 200, 'name' => 'url_nc', 'head' => $core->lang['ext_nc'], 'value' => $ext['url_nc']), array('type' => 'text', 'length' => 200, 'name' => 'url_rc', 'head' => $core->lang['ext_rc'], 'value' => $ext['url_rc']), array('type' => 'text', 'length' => 200, 'name' => 'url_acc', 'head' => $core->lang['ext_acc'], 'value' => $ext['url_acc']), array('type' => 'text', 'length' => 200, 'name' => 'url_dec', 'head' => $core->lang['ext_dec'], 'value' => $ext['url_dec']), array('type' => 'text', 'length' => 200, 'name' => 'url_pay', 'head' => $core->lang['ext_pay'], 'value' => $ext['url_pay']), array('type' => 'text', 'length' => 200, 'name' => 'url_ret', 'head' => $core->lang['ext_ret'], 'value' => $ext['url_ret']), array('type' => 'text', 'length' => 200, 'name' => 'url_del', 'head' => $core->lang['ext_del'], 'value' => $ext['url_del']), array('type' => 'head', 'value' => $core->lang['ext_code']), array('type' => 'code', 'lang' => 'php', 'name' => 'code_offer', 'head' => $core->lang['ext_code_offer'], 'value' => $ext['code_offer']), array('type' => 'code', 'lang' => 'php', 'name' => 'code_accept', 'head' => $core->lang['ext_code_accept'], 'value' => $ext['code_accept']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('ext', $action, $method, $title, $field, $button);
                $core->footer();
            } else {
                $exts = $core->db->data("SELECT ext_id, ext_name, user_id FROM " . DB_EXT . " ORDER BY ext_name ASC");
                $core->mainline->add($core->lang['admin_ext_h'], $core->url('m', 'ext'));
                $core->header();
                $core->tpl->load('body', 'safelist');
                $core->tpl->vars('body', array('title' => $core->lang['admin_ext_h'], 'text' => $core->text->lines($core->lang['admin_ext_t']), 'name' => $core->lang['name'], 'info' => $core->lang['cash'], 'action' => $core->lang['action'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirms']));
                foreach ($exts as &$i) {
                    $cash = $i['user_id'] ? rur($core->user->get($i['user_id'], 'user_cash')) : $core->lang['ext_free'];
                    $core->tpl->block('body', 'item', array('id' => $i['ext_id'], 'name' => $i['ext_name'], 'info' => $cash, 'url' => $core->url('i', 'ext', $i['ext_id']), 'edit' => $core->url('i', 'ext', $i['ext_id']), 'del' => $core->url('a', 'ext-del', $i['ext_id'])));
                }
                unset($d);
                $core->tpl->output('body');
                $title = $core->lang['ext_add'];
                $action = $core->url('a', 'ext-add', '');
                $method = 'post';
                $field = array(array('type' => 'text', 'length' => 100, 'name' => 'name', 'head' => $core->lang['name'], 'descr' => $core->lang['ext_add_d']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
                $core->form('extadd', $action, $method, $title, $field, $button);
                $core->footer();
            }
            $core->_die();
            // Money-Out Operations
        // Money-Out Operations
        case 'outs':
            switch ($message) {
                case 'acc-ok':
                    $core->info('info', 'done_out_acc');
                    break;
                case 'dec-ok':
                    $core->info('info', 'done_out_dec');
                    break;
                case 'acc-e':
                    $core->info('error', 'error_out_acc');
                    break;
                case 'dec-e':
                    $core->info('error', 'error_out_dec');
                    break;
            }
            $trs = $core->db->data("SELECT * FROM " . DB_CASH . "  WHERE cash_type = 4 ORDER BY user_id ASC, cash_time DESC");
            if (count($trs)) {
                $ui = $s = array();
                foreach ($trs as &$t) {
                    $ui[] = $t['user_id'];
                    $s[$t['user_id']] += $t['cash_value'];
                }
                unset($t);
                $ui = implode(',', array_unique($ui));
                $u = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_id IN ( {$ui} )");
                $bo = $core->db->icol("SELECT wm_id, COUNT(*) FROM " . DB_ORDER . " WHERE wm_id IN ( {$ui} ) AND order_check = 1 GROUP BY wm_id");
            } else {
                $u = $bo = $s = array();
            }
            $core->mainline->add($core->lang['menu_outs'], $core->url('m', 'outs'));
            $core->header();
            $core->tpl->load('body', 'outs');
            $core->tpl->vars('body', array('user' => $core->lang['user'], 'accept' => $core->lang['do'], 'decline' => $core->lang['decline'], 'cash' => $core->lang['cash'], 'pay' => $core->lang['pay'], 'time' => $core->lang['date'], 'action' => $core->lang['action'], 'cancel' => $core->lang['cancel'], 'confirma' => $core->lang['oconfirma'], 'confirmd' => $core->lang['oconfirmd'], 'nofins' => $core->lang['noout'], 'u_bulk' => $core->url('a', 'out-bulk', 0)));
            if (count($trs)) {
                $ou = 0;
                foreach ($trs as &$c) {
                    if ($ou != $c['user_id']) {
                        $ou = $c['user_id'];
                        $core->tpl->block('body', 'user', array('id' => $ou, 'user' => $u[$ou], 'orders' => $bo[$ou], 'uu' => $core->url('i', 'users', $ou), 'value' => sprintf("%0.2f", abs($s[$ou]))));
                        if ($bo[$ou]) {
                            $core->tpl->block('body', 'user.bad');
                        }
                    }
                    $core->tpl->block('body', 'user.fin', array('id' => $c['cash_id'], 'wmr' => $c['cash_descr'], 'value' => sprintf("%0.2f", abs($c['cash_value'])), 'accept' => $core->url('a', 'out-accept', $c['cash_id']), 'decline' => $core->url('a', 'out-decline', $c['cash_id']), 'time' => smartdate($c['cash_time'])));
                }
                unset($t, $trs);
            } else {
                $core->tpl->block('body', 'nofin', array());
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
            //
            // News
            //
        //
        // News
        //
        case 'news-add':
            $core->mainline->add($core->lang['news'], $core->url('m', 'news'));
            $core->mainline->add($core->lang['news_add_h']);
            $core->header();
            $groups = array();
            foreach ($core->lang['news_groups'] as $v => $nm) {
                $groups[] = array('name' => $nm, 'value' => $v);
            }
            $title = $core->lang['news_add_h'];
            $action = $core->url('a', 'news-add', '');
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['news_t'])), array('type' => 'text', 'length' => 100, 'name' => 'title', 'head' => $core->lang['title']), array('type' => 'mcea', 'name' => 'text', 'head' => $core->lang['text']), array('type' => 'select', 'name' => 'group', 'head' => $core->lang['news_group'], 'value' => $groups), array('type' => 'checkbox', 'name' => 'vip', 'head' => $core->lang['news_vip'], 'descr' => $core->lang['news_vip_d']), array('type' => 'checkbox', 'name' => 'send', 'head' => $core->lang['news_send'], 'descr' => $core->lang['news_send_d']));
            $button = array(array('type' => 'submit', 'value' => $core->lang['create']));
            $core->form('news', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'news':
            if ($id) {
                $n = $core->db->row("SELECT * FROM " . DB_NEWS . " WHERE news_id = '{$id}' LIMIT 1");
                $core->mainline->add($core->lang['news'], $core->url('m', 'news'));
                $core->mainline->add($core->lang['news_edit_h']);
                $core->header();
                $groups = array();
                foreach ($core->lang['news_groups'] as $v => $nm) {
                    $groups[] = array('name' => $nm, 'value' => $v, 'select' => $v == $n['news_group']);
                }
                $title = $core->lang['news_edit_h'];
                $action = $core->url('a', 'news-edit', $id);
                $method = 'post';
                $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['news_t'])), array('type' => 'text', 'length' => 100, 'name' => 'title', 'head' => $core->lang['title'], 'value' => $n['news_title']), array('type' => 'mcea', 'name' => 'text', 'head' => $core->lang['text'], 'value' => $n['news_text']), array('type' => 'select', 'name' => 'group', 'head' => $core->lang['news_group'], 'value' => $groups), array('type' => 'checkbox', 'name' => 'vip', 'head' => $core->lang['news_vip'], 'descr' => $core->lang['news_vip_d'], 'checked' => $n['news_vip']), array('type' => 'checkbox', 'name' => 'send', 'head' => $core->lang['news_send'], 'descr' => $core->lang['news_send_d']));
                $button = array(array('type' => 'submit', 'value' => $core->lang['save']));
                $core->form('news', $action, $method, $title, $field, $button);
                $core->footer();
                $core->_die();
            }
            break;
        case 'support':
            if ($id) {
                require_once PATH_LIB . 'support.php';
                $user = $core->user->get($id);
                $core->mainline->add($core->lang['support'], $core->url('m', 'support'));
                $core->mainline->add($user['user_name']);
                $core->header();
                $core->tpl->load('body', 'message');
                $core->tpl->vars('body', array('title' => $core->lang['support'], 'add' => $core->lang['send'], 'nomessage1' => $core->lang['support_nm1'], 'nomessage2' => $core->lang['support_nm2'], 'showmore' => $core->lang['support_more'], 'placeholder' => $core->lang['support_ph_admin'], 'u_load' => $core->url('a', 'supp-show', $id), 'u_add' => $core->url('a', 'supp-add', $id), 'mc' => 0));
                $core->tpl->block('body', 'face');
                $mn = $mx = 0;
                $messages = support_show($core, $id, 1, 0);
                if ($mc = count($messages)) {
                    foreach ($messages as &$m) {
                        $core->tpl->block('body', 'msg', $m);
                        if ($m['uid'] == $id) {
                            $core->tpl->block('body', 'msg.admin', array('u' => $user['user_mail']));
                        }
                        $mx = max($mx, $m['id']);
                        $mn = $mn ? min($mn, $m['id']) : $m['id'];
                    }
                    unset($m);
                    $core->tpl->block('body', 'more');
                } else {
                    $core->tpl->block('body', 'face.nomsg');
                }
                $core->tpl->vars('body', array('mn' => $mn, 'mx' => $mx));
                $core->tpl->output('body');
                $core->footer();
            } else {
                $core->mainline->add($core->lang['support_h'], $core->url('m', 'support'));
                $core->header();
                $show = 30;
                $start = ($page - 1) * $show;
                $supp = $core->db->data("SELECT * FROM " . DB_USER . " WHERE supp_last != 0 ORDER BY supp_last DESC LIMIT {$start}, {$show}");
                $sc = $core->db->field("SELECT COUNT(*) FROM " . DB_USER . " WHERE supp_last != 0");
                $core->tpl->load('body', 'support');
                $core->tpl->vars('body', array('title' => $core->lang['support_h'], 'text' => $core->text->lines($core->lang['support_t']), 'name' => $core->lang['name'], 'url' => $core->lang['url'], 'action' => $core->lang['action'], 'status' => $core->lang['status'], 'time' => $core->lang['time'], 'user' => $core->lang['user'], 'view' => $core->lang['view']));
                foreach ($supp as &$s) {
                    $core->tpl->block('body', 'supp', array('link' => $core->url('i', 'support', $s['user_id']), 'id' => $s['user_id'], 'time' => smartdate($s['supp_last']), 'name' => $s['user_name'], 'user' => $s['supp_name'], 'status' => $s['supp_admin'] ? sprintf($core->lang['support_new'], $s['supp_admin']) : ($s['supp_type'] ? $s['supp_new'] ? $core->lang['support_ur'] : $core->lang['support_ok'] : $core->lang['support_ua']), 'uclass' => $s['supp_type'] ? 'user-alt' : 'user-blue', 'sclass' => $s['supp_admin'] ? 'new' : ($s['supp_type'] ? $s['supp_new'] ? 'ur' : 'ok' : 'ua'), 'vclass' => $s['supp_admin'] ? 'new' : 'no'));
                }
                unset($supp, $s);
                $core->tpl->output('body');
                $core->footer();
            }
            $core->_die();
        case 'business':
            if (!$id) {
                $id = date('Ym');
            }
            if ($id < 10000) {
                $id *= 100;
            }
            $year = round($id / 100);
            $month = $id % 100;
            if ($month) {
                $f = strtotime("{$year}-{$month}-01");
                $e = strtotime("+ 1 month", $f);
            } else {
                $f = strtotime("{$year}-01-01");
                $e = strtotime("+ 1 year", $f);
            }
            $balance = array();
            $money = $core->db->icol("SELECT cash_type, SUM(cash_value) FROM " . DB_CASH . " WHERE cash_time BETWEEN '{$f}' AND '{$e}' GROUP BY cash_type");
            foreach ($core->lang['cash_type'] as $i => &$v) {
                $balance[$i] = $money[$i] * $core->lang['cash_balance'][$i];
            }
            $debt = $core->db->icol("SELECT user_name, user_cash FROM " . DB_USER . " WHERE user_work = 1 AND user_cash < 0 ORDER BY user_cash DESC");
            $cred = $core->db->icol("SELECT user_name, user_cash FROM " . DB_USER . " WHERE user_work IN ( 0, 2 )AND user_cash > 0 ORDER BY user_cash ASC");
            $exts = $core->db->icol("SELECT user_name, user_cash FROM " . DB_USER . " WHERE user_work = -1 AND user_cash > 0 ORDER BY user_cash ASC");
            $core->mainline->add($core->lang['menu_business']);
            $core->header();
            $core->tpl->load('body', 'business');
            $core->tpl->vars('body', array('u_trans' => $core->url('m', 'trans'), 'trans' => $core->lang['menu_trans'], 'years' => $core->lang['year'], 'months' => $core->lang['month'], 'cat' => $core->lang['business_cat'], 'total' => $core->lang['business_total'], 'summ' => $core->lang['cash'], 'balance' => $core->lang['business_balance'], 'm_balance' => rur(array_sum($balance)), 'user' => $core->lang['user'], 'debt' => $core->lang['debt_list'], 'cred' => $core->lang['cred_list'], 'nodebts' => $core->lang['debt_no'], 'nocreds' => $core->lang['cred_no'], 'cred_balance' => $core->lang['cred_balance'], 'cred_wait' => $core->lang['cred_wait'], 'd_balance' => rur(abs($dt = array_sum($debt))), 'c_balance' => rur($ct = array_sum($cred)), 'c_ext' => rur($et = array_sum($exts)), 'c_wait' => rur(abs($money[4])), 'c_total' => rur($ct + $et + abs($money[4]))));
            if ($dt) {
                $core->tpl->block('body', 'dt');
            }
            if ($ct) {
                $core->tpl->block('body', 'ct');
            }
            if ($et) {
                $core->tpl->block('body', 'et');
            }
            if ($money[4]) {
                $core->tpl->block('body', 'morecred');
            }
            for ($y = 2014; $y <= date('Y'); $y++) {
                $core->tpl->block('body', 'year', array('class' => $y == $year ? 'current' : '', 'mclass' => $y == $year ? 'primary' : 'info', 'url' => $core->url('i', 'business', $y), 'text' => $y));
            }
            for ($m = 1; $m < 13; $m++) {
                $core->tpl->block('body', 'month', array('class' => $m == $month ? 'current' : '', 'mclass' => $m == $month ? 'primary' : 'info', 'url' => $core->url('i', 'business', sprintf("%04d%02d", $year, $m)), 'text' => $core->lang['months'][$m]));
            }
            foreach ($core->lang['cash_type'] as $i => &$v) {
                $core->tpl->block('body', 'cash', array('id' => $i, 'name' => $v, 'summ' => rur($money[$i]), 'balance' => rur($balance[$i])));
            }
            unset($v);
            if (count($debt)) {
                foreach ($debt as $n => $s) {
                    $core->tpl->block('body', 'debt', array('name' => $n, 'summ' => rur(abs($s))));
                }
            } else {
                $core->tpl->block('body', 'nodebt');
            }
            if (count($cred)) {
                foreach ($cred as $n => $s) {
                    $core->tpl->block('body', 'cred', array('name' => $n, 'summ' => rur(abs($s))));
                }
            } elseif (!$money[4]) {
                $core->tpl->block('body', 'nocred');
            }
            if (count($exts)) {
                foreach ($exts as $n => $s) {
                    $core->tpl->block('body', 'ext', array('name' => $n, 'summ' => rur(abs($s))));
                }
            } elseif (!$money[4]) {
                $core->tpl->block('body', 'noext');
            }
            $core->tpl->output('body');
            $title = $core->lang['exit_h'];
            $action = $core->url('a', 'saw', 0);
            $method = 'post';
            $field = array(array('type' => 'line', 'value' => $core->text->lines($core->lang['exit_t'])), array('type' => 'text', 'length' => 6, 'name' => 'sum', 'head' => $core->lang['exit_sum'], 'descr' => sprintf($core->lang['exit_sum_d'], rur(array_sum($balance))), 'value' => $catname));
            $users = $core->db->data("SELECT user_id, user_name, user_mail FROM " . DB_USER . " WHERE user_level = 1 ORDER BY user_name ASC");
            foreach ($users as $u) {
                $field[] = array('type' => 'checkbox', 'name' => 'user[]', 'value' => $u['user_id'], 'head' => $u['user_name'], 'descr' => $u['user_mail'], 'checked' => 1);
            }
            $button = array(array('type' => 'submit', 'value' => $core->lang['exit_process']));
            $core->form('chainsaw', $action, $method, $title, $field, $button);
            $core->footer();
            $core->_die();
        case 'trans':
            switch ($message) {
                case 'del':
                    $core->info('info', 'trans_del');
                    break;
            }
            $where = array();
            // Search
            if (isset($core->get['s']) && $core->get['s']) {
                require_once PATH_CORE . 'search.php';
                $search = new SearchWords($core->get['s']);
                if ($s = $search->get()) {
                    $where[] = $search->field(array('cash_descr'));
                } else {
                    $s = false;
                }
            } else {
                $s = false;
            }
            // Date filtering
            if ($d = $core->get['d']) {
                $dd = explode('-', $d);
                $ds = mktime(0, 0, 0, $dd[1], $dd[2], $dd[0]);
                $de = mktime(23, 59, 59, $dd[1], $dd[2], $dd[0]);
                $where[] = "( cash_time BETWEEN '{$ds}' AND '{$de}' )";
            } else {
                $d = false;
            }
            // User filtering
            if (isset($core->get['f']) && $core->get['f'] != '') {
                $f = (int) $core->get['f'];
                $where[] = "user_id = '{$f}'";
            } else {
                $f = false;
            }
            // Type filtering
            if (isset($core->get['t']) && $core->get['t'] != '') {
                $t = (int) $core->get['t'];
                $where[] = "cash_type = '{$t}'";
            } else {
                $t = false;
            }
            $where = count($where) ? implode(' AND ', $where) : '1';
            $sh = 50;
            $st = $sh * ($page - 1);
            $trc = $core->db->field("SELECT COUNT(*) FROM " . DB_CASH . " WHERE {$where}");
            $trs = $trc ? $core->db->data("SELECT * FROM " . DB_CASH . " WHERE {$where} ORDER BY cash_time DESC LIMIT {$st}, {$sh}") : array();
            if ($trc) {
                $ui = array();
                foreach ($trs as &$tq) {
                    $ui[] = $tq['user_id'];
                }
                unset($tq);
                $ui = implode(',', array_unique($ui));
                $u = $core->db->icol("SELECT user_id, user_name FROM " . DB_USER . " WHERE user_id IN ( {$ui} )");
            } else {
                $u = array();
            }
            $core->mainline->add($core->lang['menu_trans'], $core->url('m', 'trans'));
            $core->header();
            $core->tpl->load('body', 'trans');
            $core->tpl->vars('body', array('user' => $core->lang['user'], 'type' => $core->lang['type'], 'cash' => $core->lang['cash'], 'status' => $core->lang['status'], 'time' => $core->lang['time'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirm'], 'd' => $d, 'f' => $f, 's' => $search ? $search->get() : $s, 'pages' => pages($core->url('m', 'trans?') . ($f ? 'f=' . $f . '&' : '') . ($d ? 'd=' . $d . '&' : '') . ($t ? 't=' . $t . '&' : '') . ($s ? 's=' . $s . '&' : ''), $trc, $sh, $page), 'shown' => sprintf($core->lang['shown'], $st + 1, min($st + $sh, $trc), $trc), 'filter' => $core->lang['filter'], 'date' => $core->lang['date'], 'search' => $core->lang['search'], 'find' => $core->lang['find']));
            if ($f) {
                $core->tpl->block('body', 'user');
                $core->tpl->vars('body', array('user' => $core->lang['user'], 'u' => $u[$f], 'reset' => $core->url('m', 'trans?') . ($d ? 'd=' . $d . '&' : '') . ($s ? 's=' . $s . '&' : '')));
            }
            foreach ($core->lang['cash_type'] as $i => $st) {
                $core->tpl->block('body', 'type', array('name' => $st, 'value' => $i, 'select' => $t == $i ? 'selected="selected"' : ''));
            }
            if (count($trs)) {
                foreach ($trs as &$c) {
                    $core->tpl->block('body', 'fin', array('user' => $u[$c['user_id']], 'uu' => $core->url('m', 'trans') . '?f=' . $c['user_id'], 'type' => $core->lang['cash_type'][$c['cash_type']], 'tid' => $c['cash_type'], 'descr' => $c['cash_descr'] ? '(' . ($search ? $search->highlight($c['cash_descr']) : $c['cash_descr']) . ')' : '', 'value' => rur($c['cash_value']), 'del' => $core->url('a', 'trans-del', $c['cash_id']), 'time' => smartdate($c['cash_time'])));
                }
                unset($t, $trs);
            } else {
                $core->tpl->block('body', 'nofin', array());
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'analytics':
            $today = date('Ymd');
            $yest = date('Ymd', strtotime('-1 day'));
            $day7 = date('Ymd', strtotime('-7 days'));
            $day30 = date('Ymd', strtotime('-30 days'));
            if (isset($core->get['to']) && $core->get['to']) {
                $to = form2date($core->get['to']);
                if ($to > $today) {
                    $to = $today;
                }
            } else {
                $to = $today;
            }
            if (isset($core->get['from']) && $core->get['from']) {
                $from = form2date($core->get['from']);
                if ($from > $to) {
                    $from = $to;
                }
            } else {
                $from = $today;
            }
            $ff = strtotime(date2form($from) . ' 00:00:00');
            $tt = strtotime(date2form($to) . ' 23:59:59');
            $where = array("( order_time BETWEEN '{$ff}' AND '{$tt}' )");
            if (isset($core->get['o']) && $core->get['o']) {
                $o = (int) $core->get['o'];
                $where[] = "offer_id = '{$o}'";
            } else {
                $o = false;
            }
            if (isset($core->get['c']) && $core->get['c']) {
                $c = (int) $core->get['c'];
                $where[] = "comp_id = '{$c}'";
            } else {
                $c = false;
            }
            if (isset($core->get['a']) && $core->get['a']) {
                $a = true;
            } else {
                $a = false;
            }
            $where = implode(' AND ', $where);
            $offers = $core->wmsale->get('offers');
            $comps = $core->wmsale->get('comps');
            $comp = $user = $site = $flow = $ext = $offer = $man = $uf = $os = $cm = array();
            $total = $em = array('st0' => 0, 'st1' => 0, 'st2' => 0, 'st3' => 0, 'st4' => 0, 'st5' => 0, 'st6' => 0, 'st91' => 0, 'st92' => 0, 'st101' => 0, 'st102' => 0, 'st111' => 0, 'st112' => 0, 'st12' => 0, 'dc1' => 0, 'dc2' => 0, 'dc3' => 0, 'dc4' => 0, 'dc5' => 0, 'dc6' => 0, 'dc7' => 0, 'dc8' => 0, 'mi' => 0, 'mo' => 0, 'mt' => 0);
            $oq = $core->db->start("SELECT offer_id, comp_id, wm_id, ext_id, ext_src, site_id, user_id, flow_id, order_status, order_reason, order_shave, order_delivery, order_count FROM " . DB_ORDER . " WHERE {$where}");
            while ($q = $core->db->one($oq)) {
                // Processing stats
                $process = array(&$total);
                if ($q['flow_id']) {
                    $userid = $q['wm_id'];
                    if (!isset($flow[$q['flow_id']])) {
                        $flow[$q['flow_id']] = $em;
                    }
                    $process[] =& $flow[$q['flow_id']];
                    $uf[$userid][] = $q['flow_id'];
                    $uf[$userid] = array_unique($uf[$userid]);
                } elseif ($q['ext_id']) {
                    $userid = $q['wm_id'] ? $q['wm_id'] : (int) $core->wmsale->get('ext', $q['ext_id'], 'user_id');
                    if ($userid && $q['ext_src']) {
                        if (!isset($ext[$userid])) {
                            $ext[$userid] = array();
                        }
                        if (!isset($ext[$userid][$q['ext_src']])) {
                            $ext[$userid][$q['ext_src']] = $em;
                        }
                        $process[] =& $ext[$userid][$q['ext_src']];
                    }
                } else {
                    $userid = 0;
                }
                if (!$userid) {
                    $userid = $q['wm_id'];
                }
                if (!isset($user[$userid])) {
                    $user[$userid] = $em;
                }
                $process[] =& $user[$userid];
                if (!isset($comp[$q['comp_id']])) {
                    $comp[$q['comp_id']] = $em;
                }
                $process[] =& $comp[$q['comp_id']];
                if (!isset($offer[$q['offer_id']])) {
                    $offer[$q['offer_id']] = $em;
                }
                $process[] =& $offer[$q['offer_id']];
                if (($a || $o) && $q['site_id']) {
                    $os[$q['offer_id']][] = $q['site_id'];
                    $os[$q['offer_id']] = array_unique($os[$q['offer_id']]);
                    if (!isset($site[$q['site_id']])) {
                        $site[$q['site_id']] = $em;
                    }
                    $process[] =& $site[$q['site_id']];
                }
                if ($c && $q['user_id']) {
                    $cs[$q['comp_id']][] = $q['user_id'];
                    $cs[$q['comp_id']] = array_unique($cs[$q['comp_id']]);
                    if (!isset($man[$q['user_id']])) {
                        $man[$q['user_id']] = $em;
                    }
                    $process[] =& $man[$q['user_id']];
                }
                // Increments for stats
                $incs = array();
                if ($q['order_status'] == 12) {
                    $incs['st12'] = 1;
                } elseif ($q['order_status'] > 5) {
                    $incs['st6'] = 1;
                    if ($q['order_status'] == 8) {
                        $incs['st9' . $q['order_delivery']] = 1;
                    }
                    if ($q['order_status'] == 9) {
                        $incs['st9' . $q['order_delivery']] = 1;
                    }
                    if ($q['order_status'] == 10) {
                        $incs['st10' . $q['order_delivery']] = 1;
                    }
                    if ($q['order_status'] == 11) {
                        $incs['st11' . $q['order_delivery']] = 1;
                    }
                    $cu = $core->wmsale->get('comp', $q['comp_id'], 'user_id');
                    $of = $core->wmsale->get('offer', $q['offer_id']);
                    $mn = $core->wmsale->price($q['offer_id'], array($userid, $cu));
                    $incs['mo'] = $userid ? $mn['wmp'] : 0;
                    $incs['mi'] = $cu ? $mn['pay'] : 0;
                    if ($q['order_count'] > 1) {
                        if ($userid && $mn['wmu']) {
                            $incs['mo'] += $mn['wmu'] * ($q['order_count'] - 1);
                        }
                        if ($cu && $mn['pyu']) {
                            $incs['mi'] += $mn['pyu'] * ($q['order_count'] - 1);
                        }
                    }
                    if ($q['order_shave']) {
                        $incs['mo'] = 0;
                        if ($q['order_shave'] == 1) {
                            $incs['mi'] = 0;
                        }
                    }
                    $incs['mt'] = $incs['mi'] - $incs['mo'];
                } elseif ($q['order_status'] == 5) {
                    $incs['st5'] = 1;
                    $incs['dc' . $q['order_reason']] = 1;
                } else {
                    $incs['st0'] = 1;
                    $incs['st' . $q['order_status']] = 1;
                }
                // Increment all
                foreach ($process as &$p) {
                    foreach ($incs as $i => $v) {
                        $p[$i] += $v;
                    }
                }
            }
            $core->db->stop($oq);
            ksort($user);
            ksort($comp);
            ksort($offer);
            ksort($man);
            ksort($site);
            ksort($flow);
            $core->mainline->add($core->lang['menu_analytics'], $core->url('m', 'analytics'));
            $core->header();
            $core->tpl->load('body', 'analytics');
            $core->tpl->vars('body', array('name' => $core->lang['name'], 'user' => $core->lang['user'], 'comp' => $core->lang['company'], 'offer' => $core->lang['offer'], 'show' => $core->lang['show'], 'wait' => $core->lang['stat_wait'], 'accept' => $core->lang['stat_accept'], 'cancel' => $core->lang['stat_cancel'], 'from' => date2form($from), 'to' => date2form($to), 'today' => $core->lang['anal_today'], 'yest' => $core->lang['anal_yest'], 'day7' => $core->lang['anal_day7'], 'day30' => $core->lang['anal_day30'], 'all' => $a ? $core->lang['anal_short'] : $core->lang['anal_full'], 'u_all' => $core->url('m', 'analytics?from=') . date2form($from) . '&to=' . date2form($to) . ($o ? '&o=' . $o : '') . ($c ? '&c=' . $c : '') . ($a ? '' : '&a=1'), 'u_today' => $core->url('m', 'analytics?from=') . date2form($today) . '&to=' . date2form($today) . ($o ? '&o=' . $o : '') . ($c ? '&c=' . $c : '') . ($a ? '&a=1' : ''), 'u_yest' => $core->url('m', 'analytics?from=') . date2form($yest) . '&to=' . date2form($yest) . ($o ? '&o=' . $o : '') . ($c ? '&c=' . $c : '') . ($a ? '&a=1' : ''), 'u_day7' => $core->url('m', 'analytics?from=') . date2form($day7) . '&to=' . date2form($today) . ($o ? '&o=' . $o : '') . ($c ? '&c=' . $c : '') . ($a ? '&a=1' : ''), 'u_day30' => $core->url('m', 'analytics?from=') . date2form($day30) . '&to=' . date2form($today) . ($o ? '&o=' . $o : '') . ($c ? '&c=' . $c : '') . ($a ? '&a=1' : ''), 'count' => $core->lang['anal_count'], 'income' => $core->lang['anal_income'], 'outcome' => $core->lang['anal_outcome'], 'total' => $core->lang['anal_total']));
            foreach ($core->lang['statuso'] as $i => $v) {
                $core->tpl->vars('body', array('st' . $i => $v));
            }
            foreach ($core->lang['reasono'] as $i => $v) {
                $core->tpl->vars('body', array('rs' . $i => $v));
            }
            foreach ($core->lang['reasonm'] as $i => $v) {
                $core->tpl->vars('body', array('rm' . $i => $v));
            }
            foreach ($offers as $of => $n) {
                $core->tpl->block('body', 'offer', array('name' => $n, 'value' => $of, 'select' => $of == $o ? 'selected="selected"' : ''));
            }
            foreach ($comps as $cm => $n) {
                $core->tpl->block('body', 'comp', array('name' => $n, 'value' => $cm, 'select' => $cm == $c ? 'selected="selected"' : ''));
            }
            foreach ($comp as $i => &$z) {
                $z['name'] = $comps[$i];
                $z['vip'] = $core->wmsale->get('comp', $i, 'comp_vip') ? $core->lang['iamvip'] : '';
                if ($c) {
                    foreach ($cs[$i] as $f) {
                        $man[$f]['name'] = '&mdash; ' . $core->user->get($f, 'user_name');
                    }
                }
            }
            unset($z);
            function nameusort($aaaa, $bbbb)
            {
                return strcmp($aaaa['name'], $bbbb['name']);
            }
            foreach ($user as $i => &$z) {
                $z['name'] = $i ? $core->user->get($i, 'user_name') : $core->lang['anal_search'];
                $z['vip'] = $i ? $core->user->get($i, 'user_vip') ? $core->lang['iamvip'] : '' : '';
                $z['ext'] = $i ? $core->user->get($i, 'user_ext') ? $core->lang['iamext'] : '' : '';
                if ($ext[$i]) {
                    foreach ($ext[$i] as $n => &$ff) {
                        $ff['name'] = '&mdash; ' . $n;
                    }
                    ksort($ext[$i]);
                } elseif ($a && $uf[$i]) {
                    foreach ($uf[$i] as $f) {
                        $flow[$f]['name'] = '&mdash; ' . $core->wmsale->get('flow', $f, 'flow_name');
                    }
                }
            }
            unset($z);
            $sites = $core->wmsale->get('lands');
            foreach ($offer as $i => &$z) {
                $z['name'] = $offers[$i];
                if (($a || $o) && $os[$i]) {
                    foreach ($os[$i] as $f) {
                        $site[$f]['name'] = '&mdash; ' . $sites[$f];
                    }
                }
            }
            unset($z);
            uasort($comp, 'nameusort');
            uasort($user, 'nameusort');
            uasort($offer, 'nameusort');
            $core->tpl->block('body', 'bl');
            $total['name'] = $core->lang['total'];
            $core->tpl->block('body', 'bl.row', analytics_line($total));
            $core->tpl->block('body', 'bl');
            $core->tpl->block('body', 'bl.t', array('name' => $core->lang['anal_comps']));
            foreach ($comp as $i => $z) {
                $core->tpl->block('body', 'bl.row', analytics_line($z));
                if ($c) {
                    foreach ($cs[$i] as $f) {
                        $core->tpl->block('body', 'bl.row', analytics_line($man[$f]));
                    }
                }
            }
            $core->tpl->block('body', 'bl');
            $core->tpl->block('body', 'bl.t', array('name' => $core->lang['anal_users']));
            foreach ($user as $i => $z) {
                $core->tpl->block('body', 'bl.row', analytics_line($z));
                if ($a && $uf[$i]) {
                    foreach ($uf[$i] as $f) {
                        $core->tpl->block('body', 'bl.row', analytics_line($flow[$f]));
                    }
                }
                if ($a && $ext[$i]) {
                    foreach ($ext[$i] as $f) {
                        $core->tpl->block('body', 'bl.row', analytics_line($f));
                    }
                }
            }
            $core->tpl->block('body', 'bl');
            $core->tpl->block('body', 'bl.t', array('name' => $core->lang['anal_offer']));
            foreach ($offer as $i => $z) {
                $core->tpl->block('body', 'bl.row', analytics_line($z));
                if ($a || $o) {
                    foreach ($os[$i] as $f) {
                        $core->tpl->block('body', 'bl.row', analytics_line($site[$f]));
                    }
                }
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
        case 'dynamics':
            $today = date('Ymd');
            $day7 = date('Ymd', strtotime('-7 days'));
            $day30 = date('Ymd', strtotime('-30 days'));
            $day90 = date('Ymd', strtotime('-90 days'));
            if (isset($core->get['to']) && $core->get['to']) {
                $to = form2date($core->get['to']);
                if ($to > $today) {
                    $to = $today;
                }
            } else {
                $to = $today;
            }
            if (isset($core->get['from']) && $core->get['from']) {
                $from = form2date($core->get['from']);
                if ($from > $to) {
                    $from = $to;
                }
            } else {
                $from = $day30;
            }
            $ff = strtotime(date2form($from) . ' 00:00:00');
            $tt = strtotime(date2form($to) . ' 23:59:59');
            $stats = array();
            $oq = $core->db->start("SELECT cash_time, cash_value FROM " . DB_CASH . " WHERE cash_type IN ( 2, 3, 6 ) AND cash_time BETWEEN '{$ff}' AND '{$tt}'");
            while ($q = $core->db->one($oq)) {
                if (!$q['cash_value']) {
                    continue;
                }
                $d = date('Ymd', $q['cash_time']);
                $v = -$q['cash_value'];
                if (!$stats[$d]) {
                    $stats[$d] = array('i' => 0, 'o' => 0);
                }
                $stats[$d][$v > 0 ? 'i' : 'o'] += $v;
            }
            $core->db->stop($oq);
            krsort($stats);
            foreach ($stats as &$s) {
                $s['t'] = $s['i'] + $s['o'];
            }
            unset($s);
            reset($stats);
            list($d, $s) = each($stats);
            while (1) {
                $d1 = $d;
                $s1 = $s;
                list($d, $s) = each($stats);
                if (!$d) {
                    break;
                }
                $stats[$d1]['d'] = $s1['t'] - $s['t'];
            }
            reset($stats);
            $core->mainline->add($core->lang['dynamics'], $core->url('m', 'dynamics'));
            $core->header();
            $core->tpl->load('body', 'dynamics');
            $core->tpl->vars('body', array('date' => $core->lang['date'], 'income' => $core->lang['anal_income'], 'outcome' => $core->lang['anal_outcome'], 'total' => $core->lang['anal_total'], 'from' => date2form($from), 'to' => date2form($to), 'show' => $core->lang['show'], 'u_analytics' => $core->url('m', 'analytics'), 'analytics' => $core->lang['menu_analytics'], 'day7' => $core->lang['anal_day7'], 'day30' => $core->lang['anal_day30'], 'day90' => $core->lang['anal_day90'], 'u_day7' => $core->url('m', 'dynamics?from=') . date2form($day7) . '&to=' . date2form($today), 'u_day30' => $core->url('m', 'dynamics?from=') . date2form($day30) . '&to=' . date2form($today), 'u_day90' => $core->url('m', 'dynamics?from=') . date2form($day90) . '&to=' . date2form($today)));
            foreach ($stats as $d => $s) {
                $core->tpl->block('body', 'date', array('day' => date2form($d), 'wd' => $core->lang['weekday'][date('w', strtotime(date2form($d)))], 'in' => rur($s['i']), 'out' => rur($s['o']), 'total' => rur($s['t']), 'delta' => rur($s['d'])));
            }
            ksort($stats);
            foreach ($stats as $d => $s) {
                $core->tpl->block('body', 'gr', array('smd' => substr($d, 6, 2) . '.' . substr($d, 4, 2), 'smt' => abs($s['t'])));
            }
            $core->tpl->output('body');
            $core->footer();
            $core->_die();
    }
    return false;
}
Exemplo n.º 15
0
/**
 * Get list of client IP addresses from REMOTE_ADDR and HTTP_X_FORWARDED_FOR,
 * in this order. '' is used when no IP could be found.
 *
 * @param boolean True, to get only the first IP (probably REMOTE_ADDR)
 * @param boolean True, to convert IPv6 to IPv4 format
 * @return array|string Depends on first param.
 */
function get_ip_list($firstOnly = false, $convert_to_ipv4 = false)
{
    $r = array();
    if (!empty($_SERVER['REMOTE_ADDR'])) {
        foreach (explode(',', $_SERVER['REMOTE_ADDR']) as $l_ip) {
            $l_ip = trim($l_ip);
            if (!empty($l_ip)) {
                if ($convert_to_ipv4) {
                    // Convert IP address to IPv4 format(if it is in IPv6 format)
                    $l_ip = int2ip(ip2int($l_ip));
                }
                $r[] = $l_ip;
            }
        }
    }
    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        // IP(s) behind Proxy - this can be easily forged!
        foreach (explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']) as $l_ip) {
            $l_ip = trim($l_ip);
            if (!empty($l_ip) && $l_ip != 'unknown') {
                if ($convert_to_ipv4) {
                    // Convert IP address to IPv4 format(if it is in IPv6 format)
                    $l_ip = int2ip(ip2int($l_ip));
                }
                $r[] = $l_ip;
            }
        }
    }
    if (!isset($r[0])) {
        // No IP found.
        $r[] = '';
    }
    // Remove the duplicates
    $r = array_unique($r);
    return $firstOnly ? $r[0] : $r;
}
Exemplo n.º 16
0
/**
 * Returns user profile search results
 * 
 * @global object $ubillingConfig
 * @param string $query
 * @param string $searchtype
 * @return string
 */
function zb_UserSearchFields($query, $searchtype)
{
    global $ubillingConfig;
    $query = mysql_real_escape_string(trim($query));
    $searchtype = vf($searchtype);
    $altercfg = $ubillingConfig->getAlter();
    //check strict mode for our searchtype
    $strictsearch = array();
    if (isset($altercfg['SEARCH_STRICT'])) {
        if (!empty($altercfg['SEARCH_STRICT'])) {
            $strictsearch = explode(',', $altercfg['SEARCH_STRICT']);
            $strictsearch = array_flip($strictsearch);
        }
    }
    //construct query
    if ($searchtype == 'realname') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `realname` WHERE `realname` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'login') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `users` WHERE `login` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'phone') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `phones` WHERE `phone` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'mobile') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `phones` WHERE `mobile` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'email') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `emails` WHERE `email` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'note') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `notes` WHERE `note` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'contract') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `contracts` WHERE `contract` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'ip') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `users` WHERE `IP` LIKE '" . $mask . $query . $mask . "'";
    }
    if ($searchtype == 'seal') {
        $mask = isset($strictsearch[$searchtype]) ? '' : '%';
        $query = "SELECT `login` from `condet` WHERE `seal` LIKE '" . $mask . $query . $mask . "'";
    }
    //mac-address search
    if ($searchtype == 'mac') {
        $allfoundlogins = array();
        $allMacs = zb_UserGetAllMACs();
        $searchMacPart = strtolower($query);
        if (!empty($allMacs)) {
            $allMacs = array_flip($allMacs);
            foreach ($allMacs as $eachMac => $macLogin) {
                if (ispos($eachMac, $searchMacPart)) {
                    $allfoundlogins[] = $macLogin;
                }
            }
        }
    }
    if ($searchtype == 'apt') {
        $query = "SELECT `login` from `address` WHERE `aptid` = '" . $query . "'";
    }
    if ($searchtype == 'payid') {
        if ($altercfg['OPENPAYZ_REALID']) {
            $query = "SELECT `realid` AS `login` from `op_customers` WHERE `virtualid`='" . $query . "'";
        } else {
            $query = "SELECT `login` from `users` WHERE `IP` = '" . int2ip($query) . "'";
        }
    }
    // пытаемся изобразить результат
    if ($searchtype != 'mac') {
        $allresults = simple_queryall($query);
        $allfoundlogins = array();
        if (!empty($allresults)) {
            foreach ($allresults as $io => $eachresult) {
                $allfoundlogins[] = $eachresult['login'];
            }
            //если таки по четкому адресу искали - давайте уж в профиль со старта
            if ($searchtype == 'apt') {
                rcms_redirect("?module=userprofile&username=" . $eachresult['login']);
            }
        }
    }
    $result = web_UserArrayShower($allfoundlogins);
    return $result;
}
Exemplo n.º 17
0
 /**
  * Renders IP ISP/Geo data in human readable view
  * 
  * @return string
  */
 public function renderData()
 {
     $result = '';
     $rows = '';
     $miniMap = '';
     if (!empty($this->ispData)) {
         $siteLink = !empty($this->ispData->site) ? wf_Link($this->ispData->site, $this->ispData->site) : '';
         $asLink = !empty($this->ispData->as) ? wf_Link(self::URL_ASINFO . $this->ispData->as, $this->ispData->as) : '';
         $cells = wf_TableCell(__('IP'), '', 'row2');
         $cells .= wf_TableCell($this->ispData->ip);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('RIPE name'), '', 'row2');
         $cells .= wf_TableCell(@$this->ispData->name_ripe);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('ISP name'), '', 'row2');
         $cells .= wf_TableCell(@$this->ispData->name_rus);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('ISP site'), '', 'row2');
         $cells .= wf_TableCell($siteLink);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('AS'), '', 'row2');
         $cells .= wf_TableCell($asLink);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('Prefix'), '', 'row2');
         $prefix = !empty($this->ispData->route) ? $this->ispData->route . '/' . $this->ispData->mask : '';
         $cells .= wf_TableCell($prefix);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('IP range'), '', 'row2');
         if (!empty($this->ispData->ip_range_start) and !empty($this->ispData->ip_range_end)) {
             $ipRange = int2ip($this->ispData->ip_range_start) . ' - ' . int2ip($this->ispData->ip_range_end);
         } else {
             $ipRange = '';
         }
         $cells .= wf_TableCell($ipRange);
         $rows .= wf_TableRow($cells, 'row3');
     }
     if (!empty($this->geoData)) {
         $cells = wf_TableCell(__('Country'), '', 'row2');
         $cells .= wf_TableCell($this->geoData->country);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('Region'), '', 'row2');
         $cells .= wf_TableCell($this->geoData->region);
         $rows .= wf_TableRow($cells, 'row3');
         $cells = wf_TableCell(__('City'), '', 'row2');
         $cells .= wf_TableCell($this->geoData->city);
         $rows .= wf_TableRow($cells, 'row3');
         $miniMap = $this->renderMinimap();
     }
     if (!empty($rows)) {
         $result = wf_TableBody($rows, '100%', 0, '');
         $result .= $miniMap;
     }
     return $result;
 }
Exemplo n.º 18
0
function multinet_expand_network($first_ip, $last_ip)
{
    $first = ip2int($first_ip);
    $last = ip2int($last_ip);
    for ($i = $first; $i <= $last; $i++) {
        $totalnet[] = int2ip($i);
    }
    if (!empty($totalnet)) {
        foreach ($totalnet as $eachip) {
            if (preg_match("#\\.(0|1|255)\$#", $eachip)) {
                //preg_match("#(0|1|255)$#", $eachip)
                unset($eachip);
            }
            if (isset($eachip)) {
                $filterednet[] = $eachip;
            }
        }
    }
    return $filterednet;
}
Exemplo n.º 19
0
    /**
     * Insert object into DB based on previously recorded changes
     *
     * Triggers the plugin event AfterUserInsert.
     *
     * @param boolean TRUE to automatically create new blog if group has permission
     * @return boolean true on success
     */
    function dbinsert($create_auto_blog = true)
    {
        global $Plugins, $DB;
        $DB->begin();
        if ($result = parent::dbinsert()) {
            // We could insert the user object..
            // Add new fields:
            if (!empty($this->new_fields)) {
                $sql = 'INSERT INTO T_users__fields( uf_user_ID, uf_ufdf_ID, uf_varchar )
								VALUES (' . $this->ID . ', ' . implode('), (' . $this->ID . ', ', $this->new_fields) . ' )';
                $DB->query($sql, 'Insert new fields');
                // Reset new fields in object:
                $this->new_fields = array();
            }
            // Notify plugins:
            // A user could be created also in another DB (to synchronize it with b2evo)
            $Plugins->trigger_event('AfterUserInsert', $params = array('User' => &$this));
            $Group =& $this->get_Group();
            if ($create_auto_blog && $Group->check_perm('perm_getblog', 'allowed')) {
                // automatically create new blog for this user
                // TODO: sam2kb> Create a blog only when this user is validated!
                $new_Blog = new Blog(NULL);
                $shortname = $this->get('login');
                $new_Blog->set('owner_user_ID', $this->ID);
                $new_Blog->set('shortname', $shortname);
                $new_Blog->set('name', $shortname . '\'s blog');
                $new_Blog->set('locale', $this->get('locale'));
                $new_Blog->set('urlname', urltitle_validate($shortname, $shortname, $new_Blog->ID, false, 'blog_urlname', 'blog_ID', 'T_blogs', $this->get('locale')));
                // Defines blog settings by its kind.
                $Plugins->trigger_event('InitCollectionKinds', array('Blog' => &$new_Blog, 'kind' => 'std'));
                $new_Blog->create();
            }
            /* Save IP Range -- start */
            $ip = int2ip(ip2int($_SERVER['REMOTE_ADDR']));
            // Convert IPv6 to IPv4
            if (preg_match('#^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$#i', $ip)) {
                // Check IP for correct format
                $ip_24bit_start = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.0', $ip));
                $ip_24bit_end = ip2int(preg_replace('#\\.\\d{1,3}$#i', '.255', $ip));
                if ($iprange = get_ip_range($ip_24bit_start, $ip_24bit_end)) {
                    // Update ip range
                    $DB->query('UPDATE T_antispam__iprange
									SET aipr_user_count = ' . $DB->quote($iprange->aipr_user_count + 1) . '
									WHERE aipr_ID = ' . $DB->quote($iprange->aipr_ID));
                } else {
                    // Insert new ip range
                    $DB->query('INSERT INTO T_antispam__iprange ( aipr_IPv4start, aipr_IPv4end, aipr_user_count )
									VALUES ( ' . $DB->quote($ip_24bit_start) . ', ' . $DB->quote($ip_24bit_end) . ', ' . $DB->quote('1') . ' ) ');
                }
            }
            /* Save IP Range -- end */
        }
        $DB->commit();
        return $result;
    }
 * @copyright (c)2003-2015 by Francois Planque - {@link http://fplanque.com/}.
 * Parts of this file are copyright (c)2005 by Daniel HAHLER - {@link http://thequod.de/contact}.
 *
 * @package admin
 */
if (!defined('EVO_MAIN_INIT')) {
    die('Please, do not access this page directly.');
}
/**
 * @var Slug
 */
global $edited_IPRange;
// Determine if we are creating or updating...
global $action;
$creating = $action == 'iprange_new';
$Form = new Form(NULL, 'iprange_checkchanges', 'post', 'compact');
$Form->global_icon(T_('Cancel editing!'), 'close', regenerate_url('action,iprange_ID'));
$Form->begin_form('fform', ($creating ? T_('New IP Range') : T_('IP Range')) . get_manual_link('ip-range-editing'));
$Form->add_crumb('iprange');
$Form->hidden('action', $creating ? 'iprange_create' : 'iprange_update');
$Form->hidden_ctrl();
$Form->hidden('tab', get_param('tab'));
$Form->hidden('tab3', get_param('tab3'));
$Form->hidden('iprange_ID', param('iprange_ID', 'integer', 0));
$Form->select_input_array('aipr_status', $edited_IPRange->get('status'), aipr_status_titles(), T_('Status'), '', array('force_keys_as_values' => true, 'background_color' => aipr_status_colors(), 'required' => true));
$Form->text_input('aipr_IPv4start', int2ip($edited_IPRange->get('IPv4start')), 50, T_('IP Range Start'), '', array('maxlength' => 15, 'required' => true));
$Form->text_input('aipr_IPv4end', int2ip($edited_IPRange->get('IPv4end')), 50, T_('IP Range End'), '', array('maxlength' => 15, 'required' => true));
$Form->date_input('aipr_IP_timestamp', date2mysql($edited_IPRange->IP_timestamp), T_('Date'), array('required' => true));
$Form->info(T_('User count'), (int) $edited_IPRange->get('user_count'));
$Form->info(T_('Block count'), (int) $edited_IPRange->get('block_count'));
$Form->end_form(array(array('submit', 'submit', $creating ? T_('Record') : T_('Save Changes!'), 'SaveButton')));
Exemplo n.º 21
0
function order_module($core)
{
    $module = $core->get['m'] ? $core->get['m'] : null;
    $id = $core->post['id'] ? (int) $core->post['id'] : ($core->get['id'] ? (int) $core->get['id'] : 0);
    $page = $core->get['page'] > 0 ? (int) $core->get['page'] : 1;
    $message = $core->get['message'] ? $core->get['message'] : null;
    if ($module == 'courier') {
        return order_courier($core);
    }
    if ($module == 'delivery') {
        return order_delivery($core);
    }
    if ($module == 'security') {
        return order_security($core);
    }
    if ($module && $module != 'order') {
        return false;
    }
    switch ($message) {
        case 'save':
            $core->info('info', 'done_order_save');
            break;
        case 'send':
            $core->info('info', 'done_order_send');
            break;
        case 'pack':
            $core->info('info', 'done_order_pack');
            break;
        case 'done':
            $core->info('info', 'done_order_done');
            break;
        case 'arrive':
            $core->info('info', 'done_order_arrive');
            break;
        case 'del':
            $core->info('info', 'done_order_del');
            break;
        case 'pickup':
            $core->info('error', 'error_order_pickup');
            break;
        case 'nocode':
            $core->info('error', 'error_order_nocode');
            break;
        case 'error':
            $core->info('error', 'error_order_smth');
            break;
        case 'access':
            $core->info('error', 'access_denied');
            break;
    }
    // Edit order
    if ($id) {
        // Order, offer and variants
        $order = $core->db->row("SELECT * FROM " . DB_ORDER . " WHERE order_id = '{$id}' LIMIT 1");
        if ($order['user_id'] != $core->user->id && $order['comp_id'] != $core->user->comp && $core->user->level < 1 && !$core->user->call) {
            $core->go($core->url('mm', '', 'access'));
        }
        $offer = $core->wmsale->get('offer', $order['offer_id']);
        $site = $order['site_id'] ? $core->wmsale->get('site', $order['site_id'], 'site_url') : false;
        $space = ($core->user->level || $core->user->call) && $order['space_id'] ? $core->wmsale->get('site', $order['space_id'], 'site_url') : false;
        $vars = $offer['offer_vars'] ? $core->wmsale->get('vars', $offer['offer_id']) : false;
        $oips = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_ip = '" . $order['order_ip'] . "'" . ($core->user->level || $core->user->call ? '' : " AND comp_id = '" . $order['comp_id'] . "'"));
        $ophs = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_phone = '" . $order['order_phone'] . "'" . ($core->user->level || $core->user->call ? '' : " AND comp_id = '" . $order['comp_id'] . "'"));
        $order['items'] = $order['order_items'] ? unserialize($order['order_items']) : array();
        $user = $core->user->get($order['wm_id']);
        $callscheme = ($callscheme = $core->wmsale->get('comp', $core->user->comp, 'callscheme')) ? $callscheme : 'tel:+%s';
        $ophone = $core->db->row("SELECT * FROM " . DB_PDB . " WHERE `phone` = '" . substr($order['order_phone'], 1, 6) . "' LIMIT 1");
        if ($ophone) {
            $ophone['type'] = $ophone['operator'];
            $ophone['place'] = $ophone['region'];
            if ($ophone['city']) {
                $ophone['place'] .= ', ' . $ophone['city'];
            }
        }
        $addr = $order['order_addr'];
        if ($order['order_street']) {
            $addr = $order['order_street'] . ', ' . $addr;
        }
        if ($order['order_city']) {
            $addr = $order['order_city'] . ', ' . $addr;
        }
        if ($order['order_area']) {
            $addr = $order['order_area'] . ', ' . $addr;
        }
        // Store
        if ($vars) {
            $store = array();
            $stores = $core->db->data("SELECT var_id, store_count FROM " . DB_STORE . " WHERE offer_id = '" . $order['offer_id'] . "' AND comp_id = '" . $order['comp_id'] . "'");
            foreach ($stores as $s) {
                $store[$s['var_id']] = $s['store_count'];
            }
        } else {
            $store = (int) $core->db->field("SELECT store_count FROM " . DB_STORE . " WHERE offer_id = '" . $order['offer_id'] . "' AND comp_id = '" . $order['comp_id'] . "' LIMIT 1");
        }
        // Parameters
        if ($offer['offer_paramurl'] && $order['order_meta']) {
            $cache = sprintf(PATH_CACHE, md5($order['order_meta']));
            if (!file_exists($cache)) {
                $post = unserialize($order['order_meta']);
                $form = curl($offer['offer_paramurl'], $post);
                file_put_contents($cache, $form);
            } else {
                $form = file_get_contents($cache);
            }
        } else {
            $form = null;
        }
        // Page Header
        $core->mainline->add($core->lang['orders_h'], $core->url('m', 'order'));
        $core->mainline->add($offer['offer_name']);
        $core->mainline->add($order['order_name']);
        $core->header();
        $core->tpl->load('body', 'order');
        $core->tpl->vars('body', $offer);
        $core->tpl->vars('body', $order);
        $core->tpl->vars('body', array('order' => $core->lang['order'], 'save' => $core->lang['order_save'], 'next' => $core->lang['order_save_next'], 'u_edit' => $core->url('a', 'order-edit', $id), 'action' => $core->lang['order_work_action'], 'mark' => $core->lang['order_marks'], 'source' => $core->lang['source'], 'site' => $core->lang['site'], 'space' => $core->lang['stat_spaces'], 'store' => $core->lang['store'], 'count' => $core->lang['count'], 'price' => $core->lang['price'], 'more_price' => $core->lang['order_more'], 'total' => $core->lang['total'], 'name' => $core->lang['name'], 'fio' => $core->lang['username'], 'address' => $core->lang['address'], 'address_d' => $core->lang['order_addr_d'], 'street' => $core->lang['street'], 'city' => $core->lang['city'], 'area' => $core->lang['area'], 'phone' => $core->lang['phone'], 'index' => $core->lang['index'], 'present' => $core->lang['present'], 'present_d' => $core->lang['present_d'], 'call' => $core->lang['call'], 'track' => $core->lang['track'], 'checkaddr' => $core->lang['order_checkaddr'], 'delivery' => $core->lang['deliver'], 'discount' => $core->lang['discount'], 'packdocs' => $core->lang['order_pack_docs'], 'country' => $order['order_country'] ? $order['order_country'] : ($order['geoip_country'] ? $order['geoip_country'] : 'zz'), 'callscheme' => $callscheme, 'phone_call' => sprintf($callscheme, $order['order_phone']), 'phone_ok_c' => $order['order_phone_ok'] ? 'phone-ok' : 'phone-bad', 'phone_ok_t' => $order['order_phone_ok'] ? 'ok' : '!!', 'form' => $form, 'status' => $core->lang['statuso'][$order['order_status']], 'date' => smartdate($order['order_time']), 'u_addr' => '/addr.php?addr=', 'u_spsr' => $core->url('a', 'order-spsr', 0), 'u_rupost' => $core->url('a', 'order-rupost', 0), 'fulladdr' => $addr, 'r' => $core->server['HTTP_REFERER'], 'site_url' => $site, 'space_url' => $space, 'paid_type' => $core->lang['order_paid'][$order['paid_ok']], 'paid_date' => smartdate($order['paid_time']), 'paid_info' => $core->text->lines($order['paid_from']), 'u_phone' => $core->url('a', 'order-phone', 0) . '?phone=', 'phone_info' => $ophone ? sprintf("%s (%s)", $ophone['type'], $ophone['place']) : '', 'order_ip' => int2ip($order['order_ip']), 'ipwarn' => $oips > 1 ? sprintf($core->lang['order_ipwarn'], $core->url('m', 'order?s=') . int2ip($order['order_ip']), $oips) : '', 'phwarn' => $ophs > 1 ? sprintf($core->lang['order_phwarn'], $core->url('m', 'order?s=') . $order['order_phone'], $ophs) : '', 'wm_name' => $order['wm_id'] ? $user['user_level'] ? '<b>' . $user['user_name'] . '</b>' : $user['user_name'] : $core->lang['order_src_sh'], 'wm_class' => $order['wm_id'] ? $order['ext_id'] ? 'ext' : ($user['user_ban'] ? 'warn' : ($user['user_warn'] ? 'ua' : ($user['user_vip'] ? 'vip' : 'user'))) : 'search', 'wm_src' => $order['flow_id'] ? sprintf($core->lang['order_src_f'], $order['flow_id']) : ($order['ext_src'] ? sprintf($core->lang['order_src_e'], $user['user_id'], $order['ext_src']) : '')));
        // Spacer landing
        if ($site) {
            $core->tpl->block('body', 'site');
        }
        if ($space) {
            $core->tpl->block('body', 'space');
        }
        if ($form) {
            $core->tpl->block('body', 'form');
        }
        if ($order['paid_ok']) {
            $core->tpl->block('body', 'paid');
        }
        if ($order['order_file']) {
            $core->tpl->block('body', 'file');
        }
        // WM info
        if ($order['wm_id'] && !$order['ext_id']) {
            $core->tpl->block('body', 'ofm', array('v' => $user['user_mail']));
            if ($user['user_wmr']) {
                $core->tpl->block('body', 'ofw', array('v' => $user['user_wmr']));
            }
        }
        // Edit ability
        $canedit = $order['order_status'] > 1 && $order['order_status'] < 5 || $order['order_status'] == 6 || $order['order_status'] == 7;
        if ($canedit) {
            $core->tpl->block('body', 'edit');
            if ($offer['offer_delivery']) {
                $core->tpl->block('body', 'edit.delivery');
            }
        } else {
            $core->tpl->block('body', 'view');
            if ($order['order_comment']) {
                $core->tpl->block('body', 'comment');
            }
        }
        // Package documents
        if ($order['order_status'] == 6 && $order['order_delivery'] == 1) {
            $core->tpl->block('body', 'docs', array('u' => $core->url('a', 'order-docs', $order['order_id'])));
        }
        // Tracking code
        if ($order['order_status'] == 7 || $order['order_status'] == 8) {
            $core->tpl->block('body', 'track');
        }
        if ($order['order_status'] > 7 && $order['order_status'] < 10 || $order['order_status'] == 11) {
            $core->tpl->block('body', 'delpro', array('cls' => $order['track_status'] ? $order['order_status'] == 9 ? 'green' : 'blue' : 'red', 'check' => sprintf($core->lang['track_check'], smartdate($order['track_check'])), 'info' => $order['track_status'] ? sprintf("%s: %s", $order['track_date'], $order['track_status']) : $core->lang['track_wait'], 'url' => sprintf($core->lang['deliveru'][$order['order_delivery']], $order['track_code'])));
        }
        // Variants of offer
        if ($vars) {
            $ndprice = 0;
            foreach ($vars as $v) {
                $core->tpl->block('body', 'item', array('id' => $v['var_id'], 'name' => $v['var_name'], 'price' => $v['var_price'], 'count' => (int) $order['items'][$v['var_id']], 'total' => $v['var_price'] * (int) $order['items'][$v['var_id']], 'store' => (int) $store[$v['var_id']]));
                if ($canedit) {
                    $core->tpl->block('body', 'item.edit');
                } else {
                    $core->tpl->block('body', 'item.view');
                }
                $ndprice += $v['var_price'] * (int) $order['items'][$v['var_id']];
            }
        } else {
            $core->tpl->block('body', 'item', array('id' => $offer['offer_id'], 'name' => $offer['offer_name'], 'price' => $offer['offer_price'], 'count' => (int) $order['order_count'], 'total' => $offer['offer_price'] * (int) $order['order_count'], 'store' => (int) $store));
            if ($canedit) {
                $core->tpl->block('body', 'item.edit');
            } else {
                $core->tpl->block('body', 'item.view');
            }
            $ndprice = $offer['offer_price'] * (int) $order['order_count'];
        }
        // Discounts
        if ($canedit) {
            foreach ($core->lang['discounts'] as $i => $n) {
                $core->tpl->block('body', 'dcedit', array('id' => $i, 'name' => $n, 'total' => ceil($ndprice * ((100 - $i) / 100)), 'check' => $i == $order['order_discount'] ? 'checked="checked"' : ''));
            }
        } else {
            $core->tpl->block('body', 'dcview', array('name' => $core->lang['discounts'][$order['order_discount']], 'price' => $order['order_discount'], 'total' => $ndprice * ((100 - $order['order_discount']) / 100)));
        }
        // Delivery
        if ($offer['offer_delivery']) {
            $core->tpl->block('body', 'delivery');
            if ($canedit) {
                $core->tpl->block('body', 'delivery.moreedit');
                foreach ($core->lang['delivery'] as $i => $n) {
                    $core->tpl->block('body', 'delivery.edit', array('id' => $i, 'name' => $n, 'price' => $core->lang['deliverp'][$i], 'total' => $core->lang['deliverp'][$i], 'check' => $i == $order['order_delivery'] ? 'checked="checked"' : ''));
                }
            } else {
                if ($order['order_more']) {
                    $core->tpl->block('body', 'delivery.moreview');
                }
                $core->tpl->block('body', 'delivery.view', array('name' => $core->lang['delivery'][$order['order_delivery']], 'price' => $core->lang['deliverp'][$order['order_delivery']], 'total' => $core->lang['deliverp'][$order['order_delivery']]));
            }
        }
        // Actions
        if ($order['order_status'] > 1 && $order['order_status'] < 5) {
            $actions = array('order_call_basic' => array('ok' => $core->lang['order_call_ok']), 'order_call_re' => array(), 'order_call_no' => array(), 'cancel' => array());
            if ($core->user->level || $core->user->shave) {
                $actions['order_call_basic']['shave'] = $core->lang['order_call_shave'];
            }
            foreach ($core->lang['recallo'] as $k => $v) {
                $actions['order_call_re']['re' . $k] = $v;
            }
            foreach ($core->lang['nocallo'] as $k => $v) {
                $actions['order_call_no']['no' . $k] = $v;
            }
            foreach ($core->lang['reasono'] as $k => $v) {
                $actions['cancel']['cancel' . $k] = $v;
            }
        } elseif ($order['order_status'] == 6) {
            $actions = array('order_pack_o' => $core->lang['packingo']);
        } elseif ($order['order_status'] == 7) {
            $actions = array('order_send_o' => $core->lang['sendingo']);
        } elseif ($order['order_status'] == 8) {
            $actions = array('order_deliver_o' => $core->lang['delivero']);
        } elseif ($order['order_status'] == 9) {
            $actions = array('order_pay_o' => $core->lang['payo']);
        } else {
            $actions = false;
        }
        // Actions block
        if ($actions) {
            $core->tpl->block('body', 'actions');
            foreach ($actions as $b => $a) {
                $core->tpl->block('body', 'actions.block', array('name' => $core->lang[$b]));
                foreach ($a as $v => $n) {
                    $core->tpl->block('body', 'actions.block.a', array('n' => $n, 'v' => $v));
                }
            }
        }
        // Marks
        if ($order['order_status'] > 1 && $order['order_status'] < 5) {
            $marks = array('banip' => sprintf($core->lang['order_ban_ip'], int2ip($order['order_ip'])), 'banphone' => sprintf($core->lang['order_ban_phone'], $order['order_phone']));
            if ($oips > 1) {
                $ooips = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_id != '{$id}' AND order_ip = '" . $order['order_ip'] . "' AND order_status < 5 AND comp_id = '" . $order['comp_id'] . "'");
                if ($ooips) {
                    $marks['delip'] = sprintf($core->lang['order_del_ip'], $ooips);
                }
            }
            if ($ophs > 1) {
                $oophs = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE order_id != '{$id}' AND order_phone = '" . $order['order_phone'] . "' AND order_status < 5 AND comp_id = '" . $order['comp_id'] . "'");
                if ($oophs) {
                    $marks['delphone'] = sprintf($core->lang['order_del_phone'], $oophs);
                }
            }
        } else {
            $marks = array();
        }
        // Checking marks
        if ($order['order_status'] > 1 && $order['order_status'] < 10 && $order['order_status'] != 5) {
            if ($order['order_check']) {
                $marks['uncheck'] = $core->lang['order_uncheck'];
            } else {
                $marks['check'] = $core->lang['order_tocheck'];
            }
        }
        // Marks block
        if ($marks) {
            $core->tpl->block('body', 'marks');
            foreach ($marks as $v => $n) {
                $core->tpl->block('body', 'marks.mk', array('n' => $n, 'v' => $v));
            }
        }
        // Button blocks
        if ($order['order_status'] == 1) {
            $core->tpl->block('body', 'pickup', array('u' => $core->url('a', 'order-pickup', $id), 't' => $core->lang['order_pick_up'], 'c' => $core->lang['order_pick_confirm']));
        }
        if ($order['order_status'] != 5 && $order['order_status'] > 1 && $order['order_status'] < 10) {
            $core->tpl->block('body', 'buttons');
        }
        if ($order['geoip_country']) {
            $geoip = $order['geoip_city'] ? $order['geoip_city'] : '';
            if ($order['geoip_region']) {
                $geoip .= ', ' . $order['geoip_region'];
            }
            if ($order['geoip_district']) {
                $geoip .= ', ' . $order['geoip_district'];
            }
            $geoip = trim($geoip, ', ');
            if (!$geoip) {
                $geoip = $order['geoip_country'];
            }
            if ($order['geoip_lat'] && $order['geoip_lng']) {
                $geoip = '<a target="_blank" href="http://maps.yandex.ru/?ll=' . $order['geoip_lng'] . '%2C' . $order['geoip_lat'] . '">' . $geoip . '</a>';
            }
            $core->tpl->vars('body', array('order_country' => $geoip));
        }
        $core->tpl->output('body');
        $core->footer();
    } else {
        $where = array();
        // User filter
        if ($core->user->level || $core->user->call) {
            if (isset($core->get['c']) && $core->get['c']) {
                $c = (int) $core->get['c'];
                $where[] = "comp_id = '{$c}'";
            } else {
                $c = false;
            }
        } else {
            if (isset($core->get['a']) && ($a = (int) $core->get['a'])) {
                $where[] = "user_id = '" . $core->user->id . "'";
            } else {
                $where[] = "comp_id = '" . $core->user->comp . "'";
            }
            $manager = $core->wmsale->get('mans', $core->user->comp);
            $manager[0] = '———';
        }
        // WebMaster and Source Filters
        if (isset($core->get['wm']) && $core->get['wm']) {
            $wm = (int) $core->get['wm'];
            $where[] = "wm_id = '{$wm}'";
        } else {
            $wm = false;
        }
        if (isset($core->get['src']) && $core->get['src']) {
            $src = $core->text->link($core->get['src']);
            $where[] = "ext_src = '{$src}'";
        } else {
            $src = false;
        }
        // Search
        if (isset($core->get['s']) && $core->get['s']) {
            $s = $core->text->line($core->get['s']);
            if (preg_match('#^([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)$#i', $s) && ($ips = ip2int($s))) {
                $where[] = " order_ip = '{$ips}' ";
            } elseif (preg_match('#^[0-9]{11}$#i', $s)) {
                $where[] = " order_phone = '{$s}' ";
            } else {
                require_once PATH_CORE . 'search.php';
                $search = new SearchWords($core->get['s']);
                if ($s = $search->get()) {
                    $where[] = $search->field(array('order_name', 'order_addr', 'order_street', 'order_city', 'order_area'));
                } else {
                    $s = false;
                }
            }
        } else {
            $s = false;
        }
        // Status filtering
        if (isset($core->get['f']) && $core->get['f'] != '') {
            $f = (int) $core->get['f'];
            if ($f < 0) {
                switch ($f) {
                    case -1:
                        $where[] = "order_status NOT IN ( 5, 12 )";
                        break;
                    case -2:
                        $where[] = "order_status < 5";
                        break;
                    case -3:
                        $where[] = "order_status > 5 AND order_status < 12";
                        break;
                    default:
                        $f = '';
                }
            } else {
                $where[] = "order_status = '{$f}'";
            }
        } else {
            $f = '';
        }
        // Offer filtering
        if (isset($core->get['o']) && $core->get['o']) {
            $o = (int) $core->get['o'];
            $where[] = "offer_id = '{$o}'";
        } else {
            $o = false;
        }
        // Date filtering
        if ($d = $core->get['d']) {
            $dd = explode('-', $d);
            $ds = mktime(0, 0, 0, $dd[1], $dd[2], $dd[0]);
            $de = mktime(23, 59, 59, $dd[1], $dd[2], $dd[0]);
            $where[] = "( order_time BETWEEN '{$ds}' AND '{$de}' )";
        } else {
            $d = false;
        }
        $where = count($where) ? implode(' AND ', $where) : '1';
        $csv = $core->get['mode'] == 'csv' ? 1 : 0;
        $ipsl = $phsl = array();
        if (!$csv) {
            $sh = 20;
            $st = $sh * ($page - 1);
            $orders = $core->db->field("SELECT COUNT(*) FROM " . DB_ORDER . " WHERE {$where}");
            $order = $orders ? $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE {$where} ORDER BY order_status ASC, order_time DESC LIMIT {$st}, {$sh}") : false;
            foreach ($order as &$ooo) {
                $ipsl[] = $ooo['order_ip'];
                $phls[] = $ooo['order_phone'];
            }
            unset($ooo);
        } else {
            $order = $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE {$where} ORDER BY order_status ASC, order_time DESC");
        }
        $company = $core->user->comp ? $core->wmsale->get('comp', $core->user->comp) : false;
        $offer = $core->wmsale->get('offers');
        $vars = array();
        // Check for the bans
        if ($ipls || $phls) {
            require_once PATH . 'lib/ban.php';
            $banip = check_ip_bans($core, $ipls);
            $banph = check_phone_bans($core, $phls);
        } else {
            $banip = $banph = array();
        }
        $core->mainline->add($core->lang['orders_h'], $core->url('m', 'order'));
        if (!$csv) {
            $core->header();
        }
        $core->tpl->load('body', $csv ? 'csv-index' : 'index');
        $core->tpl->vars('body', array('title' => $core->lang['orders_h'], 'text' => $core->text->lines($core->lang['orders_t']), 'offer' => $core->lang['offer'], 'phone' => $core->lang['phone'], 'name' => $core->lang['username'], 'address' => $core->lang['address'], 'time' => $core->lang['time'], 'price' => $core->lang['price'], 'status' => $core->lang['status'], 'action' => $core->lang['action'], 'pay' => $core->lang['pay'], 'edit' => $core->lang['edit'], 'del' => $core->lang['del'], 'confirm' => $core->lang['confirma'], 'call_confirm' => $core->lang['order_call_confirm'], 'call_default' => $core->lang['order_call_action'], 'call_ok' => $core->lang['order_call_ok'], 'call_re' => $core->lang['order_call_re'], 'call_no' => $core->lang['order_call_no'], 'pickup' => $core->lang['order_pick_up'], 'pick_confirm' => $core->lang['order_pick_confirm'], 'packed' => $core->lang['order_packed'], 'packdocs' => $core->lang['order_pack_docs'], 'pack_confirm' => $core->lang['order_pack_confirm'], 'track_code' => $core->lang['track_code'], 'track_send' => $core->lang['track_send'], 'track_confirm' => $core->lang['track_confirm'], 'info' => $core->lang['inf'], 'work' => $core->lang['order_work'], 'pack' => $core->lang['order_pack'], 'cancel' => $core->lang['order_cancel'], 'later' => $core->lang['order_later'], 'showall' => $core->lang['order_showall'], 'company' => $core->lang['company'], 'd' => $d, 's' => $search ? $search->get() : $s, 'wm' => $wm, 'src' => $src, 'pages' => pages($core->url('m', '?') . ($f ? 'f=' . $f . '&' : '') . ($d ? 'd=' . $d . '&' : '') . ($s ? 's=' . $s . '&' : '') . ($a ? 'a=' . $a . '&' : '') . ($c ? 'c=' . $c . '&' : '') . ($o ? 'o=' . $o . '&' : '') . ($wm ? 'wm=' . $wm . '&' : '') . ($src ? 'src=' . $src . '&' : ''), $orders, $sh, $page), 'shown' => sprintf($core->lang['shown'], $st + 1, min($st + $sh, $orders), $orders), 'filter' => $core->lang['filter'], 'date' => $core->lang['date'], 'search' => $core->lang['search'], 'find' => $core->lang['find'], 'u_pickup' => $core->url('a', 'order-pickup', ''), 'o_pickup' => $core->lang['order_pick_up_smth'], 'u_courier' => $core->url('m', 'courier'), 'courier' => $core->lang['order_courier'], 'u_csv' => $core->url('m', '?mode=csv&') . ($f ? 'f=' . $f . '&' : '') . ($d ? 'd=' . $d . '&' : '') . ($s ? 's=' . $s . '&' : '') . ($a ? 'a=' . $a . '&' : '') . ($c ? 'c=' . $c . '&' : '') . ($o ? 'o=' . $o . '&' : '') . ($wm ? 'wm=' . $wm . '&' : '') . ($src ? 'src=' . $src . '&' : ''), 'esend' => $core->lang['order_esend'], 'es_confirm' => $core->lang['order_es_confirm'], 'o_1' => $f == -1 ? 'selected="selected"' : '', 'o_2' => $f == -2 ? 'selected="selected"' : '', 'o_3' => $f == -3 ? 'selected="selected"' : ''));
        if ($company['comp_spsr']) {
            $core->tpl->block('body', 'couriers');
        }
        if ($core->user->work < 2) {
            $core->tpl->block('body', 'pickitup');
        }
        foreach ($core->lang['statuso'] as $i => $st) {
            $core->tpl->block('body', 'status', array('name' => $st, 'value' => $i, 'select' => $f != '' && $f == $i ? 'selected="selected"' : ''));
        }
        $comp = $core->wmsale->get('comps');
        if ($core->user->level || $core->user->call) {
            $core->tpl->block('body', 'comps');
            foreach ($comp as $ci => $cn) {
                $core->tpl->block('body', 'comps.c', array('name' => $cn, 'value' => $ci, 'select' => $c == $ci ? 'selected="selected"' : ''));
            }
        } else {
            $core->tpl->block('body', 'all', array('a' => $a ? 'checked="checked"' : ''));
        }
        foreach ($offer as $i => $of) {
            $core->tpl->block('body', 'offer', array('name' => $of, 'value' => $i, 'select' => $o == $i ? 'selected="selected"' : ''));
        }
        $callscheme = ($callscheme = $core->wmsale->get('comp', $core->user->comp, 'callscheme')) ? $callscheme : 'tel:+%s';
        if ($order) {
            foreach ($order as &$r) {
                $addr = $r['order_addr'];
                if ($r['order_street']) {
                    $addr = $r['order_street'] . ', ' . $addr;
                }
                if ($r['order_city']) {
                    $addr = $r['order_city'] . ', ' . $addr;
                }
                if ($r['order_area']) {
                    $addr = $r['order_area'] . ', ' . $addr;
                }
                $addr = trim($addr, ', ');
                $uid = $r['wm_id'];
                $user = $uid ? $core->user->get($uid) : array();
                $core->tpl->block('body', 'ord', array('oid' => $r['offer_id'], 'offer' => $offer[$r['offer_id']], 'id' => $r['order_id'], 'ip' => int2ip($r['order_ip']), 'ip_class' => $banip[$r['order_ip']] ? $banip[$r['order_ip']] < 10 ? 'yellow' : 'red' : 'green', 'country' => $r['order_country'] ? $r['order_country'] : ($r['geoip_country'] ? $r['geoip_country'] : 'zz'), 'name' => $search ? $search->highlight($r['order_name']) : $r['order_name'], 'addr' => $search ? $search->highlight($addr) : $addr, 'index' => $r['order_index'], 'comment' => $r['order_comment'], 'phone' => $search ? $search->highlight($r['order_phone']) : $r['order_phone'], 'phone_call' => sprintf($callscheme, $r['order_phone']), 'phone_ok' => $r['order_phone_ok'] ? 'ok' : 'bad', 'phone_class' => $banph[$r['order_phone']] ? $banph[$r['order_phone']] < 10 ? 'yellow' : 'red' : 'green', 'count' => $r['order_count'], 'price' => rur($r['order_price']), 'price_csv' => (int) $r['order_price'], 'time' => smartdate($r['order_time']), 'stid' => $r['order_status'], 'status' => $core->lang['statuso'][$r['order_status']], 'edit' => $core->url('i', 'order', $r['order_id']), 'actcls' => $r['order_status'] < 5 || $r['order_status'] == 7 ? 'cb' : '', 'manager' => $manager[$r['user_id']], 'paid' => $r['paid_ok'], 'paidinfo' => $core->lang['order_paid'][$r['paid_ok']] . ($r['paid_time'] ? ' - ' . smartdate($r['paid_time']) : ''), 'calls' => $r['order_calls'] ? sprintf(' <small title="%s" class="red">(%s)</small>', $core->lang['order_calls'], $r['order_calls']) : '', 'delivery' => $r['order_delivery'], 'delivern' => $core->lang['delivers'][$r['order_delivery']], 'uid' => $uid, 'uname' => $uid ? $user['user_level'] ? '<b>' . $user['user_name'] . '</b>' : $user['user_name'] : $core->lang['order_src_sh'], 'uclass' => $r['order_check'] ? 'warn' : ($uid ? $r['ext_id'] ? 'ext' : ($user['user_vip'] ? 'vip' : 'user') : 'search')));
                if ($r['order_status'] == 1) {
                    $core->tpl->block('body', 'ord.pickup', array('u' => $core->url('a', 'order-pickup', $r['order_id'])));
                    if ($core->user->level || $core->user->call) {
                        $core->tpl->block('body', 'ord.pickup.move', array('u' => $core->url('a', 'order-move', $r['order_id'])));
                        foreach ($comp as $v => $n) {
                            $core->tpl->block('body', 'ord.pickup.move.comp', array('val' => $v, 'name' => $n));
                        }
                    }
                }
                if ($r['order_status'] > 1 && $r['order_status'] < 5) {
                    $core->tpl->block('body', 'ord.call', array('action' => $core->url('a', 'order-call', $r['order_id'])));
                    foreach ($core->lang['recallo'] as $v => $n) {
                        $core->tpl->block('body', 'ord.call.re', array('val' => $v, 'name' => $n));
                    }
                    foreach ($core->lang['nocallo'] as $v => $n) {
                        $core->tpl->block('body', 'ord.call.no', array('val' => $v, 'name' => $n));
                    }
                    foreach ($core->lang['reasono'] as $v => $n) {
                        $core->tpl->block('body', 'ord.call.cancel', array('val' => $v, 'name' => $n));
                    }
                }
                if ($r['order_status'] == 5) {
                    $core->tpl->block('body', 'ord.cancel', array('reason' => $r['order_reason'] ? $core->lang['reasono'][$r['order_reason']] : ($r['order_comment'] ? sprintf($core->lang['noreason_comment'], $r['order_comment']) : $core->lang['noreason'])));
                }
                if ($r['order_status'] == 6) {
                    $items = $r['order_items'] ? unserialize($r['order_items']) : false;
                    $iline = '';
                    if ($items) {
                        if (!count($vars[$r['offer_id']])) {
                            $vrs = $core->wmsale->get('vars', $r['offer_id']);
                            $vars[$r['offer_id']] = array();
                            foreach ($vrs as $w) {
                                $vars[$r['offer_id']][$w['var_id']] = $w['var_short'];
                            }
                        }
                        foreach ($items as $k => $x) {
                            $iline .= ' ' . $vars[$r['offer_id']][$k] . ': ' . $x . ' ';
                        }
                    }
                    $core->tpl->block('body', 'ord.pack', array('docs' => $core->url('a', 'order-docs', $r['order_id']), 'done' => $core->url('a', 'order-packed', $r['order_id']), 'items' => $iline));
                    if ($r['order_delivery'] == 1) {
                        $core->tpl->block('body', 'ord.pack.doc');
                    }
                }
                if ($r['order_status'] == 7) {
                    $core->tpl->block('body', 'ord.send', array('u' => $core->url('a', 'order-send', $r['order_id'])));
                    if ($r['order_delivery'] > 1) {
                        $core->tpl->block('body', 'ord.esend', array('u' => $core->url('a', 'order-esend', $r['order_id']), 'nc' => $r['order_courier'] ? 'new' : 'deliver', 'nu' => $core->url('a', $r['order_courier'] ? 'order-snew' : 'order-sold', $r['order_id']), 'nt' => $r['order_courier'] ? $core->lang['order_spsr_new'] : $core->lang['order_spsr_old']));
                    }
                }
                if ($r['order_status'] == 8 || $r['order_status'] == 9 || $r['order_status'] == 11) {
                    $core->tpl->block('body', 'ord.track', array('cls' => $r['track_status'] ? $r['order_status'] == 9 ? 'green' : 'blue' : 'red', 'check' => sprintf($core->lang['track_check'], smartdate($r['track_check'])), 'info' => $r['track_status'] ? sprintf("%s: %s", $r['track_date'], $r['track_status']) : $core->lang['track_wait'], 'url' => sprintf($core->lang['deliveru'][$r['order_delivery']], $r['track_code'])));
                    if ($r['order_status'] == 8) {
                        $core->tpl->block('body', 'ord.track.confirm', array('c' => $core->lang['order_arrive_conf'], 't' => $core->lang['order_arrived'], 'u' => $core->url('a', 'order-arrive', $r['order_id'])));
                    }
                    if ($r['order_status'] == 9) {
                        $core->tpl->block('body', 'ord.track.confirm', array('c' => $core->lang['order_payd_conf'], 't' => $core->lang['order_payd'], 'u' => $core->url('a', 'order-done', $r['order_id'])));
                    }
                }
                if ($core->user->level || $core->user->call) {
                    $core->tpl->block('body', 'ord.comp', array('id' => $r['comp_id'], 'name' => $comp[$r['comp_id']]));
                } else {
                    $core->tpl->block('body', 'ord.ip');
                }
            }
        }
        unset($r, $order);
        if ($core->user->work < 2 && $page < 2 && !($s || $f || $d || $a || $wm || $src)) {
            $recall = $core->user->call ? $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE order_status IN ( 3, 4 ) AND order_recall < '" . time() . "'") : $core->db->data("SELECT * FROM " . DB_ORDER . " WHERE order_status IN ( 3, 4 ) AND order_recall < '" . time() . "' AND ( comp_id = '" . $core->user->comp . "' OR user_id = '" . $core->user->id . "' )");
            if ($recall) {
                $callscheme = ($callscheme = $core->wmsale->get('comp', $core->user->comp, 'callscheme')) ? $callscheme : 'tel:+%s';
                $core->tpl->block('body', 'recall', array('text' => $core->text->lines($core->lang['recall_t'])));
                foreach ($recall as &$r) {
                    $core->tpl->block('body', 'recall.ord', array('offer' => $offer[$r['offer_id']], 'id' => $r['order_id'], 'name' => $search ? $search->highlight($r['order_name']) : $r['order_name'], 'addr' => $search ? $search->highlight($r['order_addr']) : $r['order_addr'], 'index' => $r['order_index'], 'phone' => $search ? $search->highlight($r['order_phone']) : $r['order_phone'], 'phone_call' => sprintf($callscheme, $r['order_phone']), 'phone_ok' => $r['order_phone_ok'] ? 'ok' : 'bad', 'count' => $r['order_count'], 'price' => rur($r['order_price']), 'time' => smartdate($r['order_time']), 'stid' => $r['order_status'], 'status' => $core->lang['statuso'][$r['order_status']], 'calls' => $r['order_calls'] ? sprintf(' <small title="%s" class="red">(%s)</small>', $core->lang['order_calls'], $r['order_calls']) : '', 'action' => $core->url('a', 'order-call', $r['order_id']), 'edit' => $core->url('i', 'order', $r['order_id'])));
                    foreach ($core->lang['recallo'] as $v => $n) {
                        $core->tpl->block('body', 'recall.ord.re', array('val' => $v, 'name' => $n));
                    }
                    foreach ($core->lang['nocallo'] as $v => $n) {
                        $core->tpl->block('body', 'recall.ord.no', array('val' => $v, 'name' => $n));
                    }
                    foreach ($core->lang['reasono'] as $v => $n) {
                        $core->tpl->block('body', 'recall.ord.cancel', array('val' => $v, 'name' => $n));
                    }
                }
                unset($r, $recall);
            }
        }
        if ($csv) {
            header('Content-type: text/csv; charset=windows-1251');
            header('Content-disposition: attachment; filename=orders.csv');
            $core->tpl->output('body', 'windows-1251//IGNORE');
        } else {
            $core->tpl->output('body');
            $core->footer();
        }
    }
    $core->_die();
}