protected function _doLogin() { $rules = array('email' => array('label' => __('email', 'users'), 'rules' => array('trim', 'required', 'max_length' => 255, 'callback__is_valid_login')), 'password' => array('label' => __('password', 'users'), 'rules' => array('trim', 'required', 'min_length' => 4, 'max_length' => 128)), 'remember' => array('label' => __('remember_me', 'users'))); if (uri::segment(4) == 'license' && !input::demo(0, '', false)) { $rules['license'] = array('label' => __('license_new', 'system_license'), 'rules' => array('trim', 'required', 'callback__is_valid_license')); } validate::setRules($rules); if (!validate::run()) { return false; } if (!($user = $this->users_model->getUser(input::post('email'), false, false))) { validate::setFieldError('email', __((strpos(input::post('email'), '@') === false ? 'username' : 'email') . '_invalid', 'users_signup')); return false; } if (!$this->users_model->verifyPassword(input::post('password'), $user['password'], $user['user_id'])) { validate::setFieldError('password', __('password_invalid', 'users_signup')); return false; } if (uri::segment(4) == 'license' && !input::demo(0, '', false)) { $access = $this->users_model->getPermissions($user['group_id'], 'system', 'license_manage'); if ($access) { loader::model('system/license'); $this->license_model->changeLicense(input::post('license')); } } $this->users_model->login($user['user_id'], input::post('remember'), $user); if (uri::segment(4) == 'license') { router::redirect('cp/help/license'); } else { router::redirect('cp'); } }
protected function _sendFeedback() { // Check if demo mode is enabled if (input::demo()) { return false; } // Extra rules $rules = array('name' => array('rules' => array('required', 'is_string', 'trim', 'min_length' => 2, 'max_length' => 255)), 'email' => array('rules' => array('required', 'is_string', 'trim', 'valid_email', 'min_length' => 4, 'max_length' => 255)), 'subject' => array('rules' => array('required', 'is_string', 'trim', 'min_length' => 5, 'max_length' => 255)), 'message' => array('rules' => array('required', 'is_string', 'trim', 'min_length' => 10, 'max_length' => 10000))); if (config::item('feedback_captcha', 'feedback') == 1 || config::item('feedback_captcha', 'feedback') == 2 && !users_helper::isLoggedin()) { $rules['captcha'] = array('rules' => array('is_captcha')); } validate::setRules($rules); // Validate form values if (!validate::run($rules)) { return false; } // Get values $email = input::post('email'); $subject = input::post('subject'); $message = input::post('message') . "\n\n--\n" . input::post('name') . ' <' . input::post('email') . '>' . "\n" . input::ipaddress(); // Send feedback if (!$this->feedback_model->sendFeedback($email, $subject, $message)) { if (!validate::getTotalErrors()) { view::setError(__('send_error', 'system')); } return false; } // Success view::setInfo(__('message_sent', 'feedback')); router::redirect('feedback'); }
protected function _saveGroup($groupID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('name' => array('label' => __('name', 'system'), 'rules' => array('trim', 'required', 'max_length' => 255)), 'keyword' => array('label' => __('keyword', 'system'), 'rules' => array('trim', 'required', 'max_length' => 128, 'alpha_dash', 'strtolower', 'callback__is_unique_keyword' => $groupID))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get post data $groupData = input::post(array('name', 'keyword')); // Save banner group if (!($groupID = $this->banners_groups_model->saveGroup($groupID, $groupData))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('group_saved', 'banners')); router::redirect('cp/content/banners/groups/edit/' . $groupID); }
protected function _saveNewsletter($newsletterID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('category_id' => array('label' => __('gift_category', 'gifts'), 'rules' => array('intval'))); // Get newsletter data $newsletterData = $input = array(); $rules['subject'] = array('label' => __('newsletter_subject', 'newsletters'), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['message_html'] = array('label' => __('newsletter_message_html', 'newsletters'), 'rules' => array('trim', 'required')); $rules['message_text'] = array('label' => __('newsletter_message_text', 'newsletters'), 'rules' => array('trim', 'required')); $input = array('subject', 'message_html', 'message_text'); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get newsletter data $newsletter = input::post($input); // Save newsletter if (!($newsletterID = $this->newsletters_model->saveNewsletter($newsletterID, $newsletter))) { view::setError(__('save_error', 'system')); return false; } router::redirect('cp/content/newsletters/' . (uri::segment(6) == 'review' ? 'review' : 'recipients') . '/' . $newsletterID); }
protected function _savePackage($packageID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('credits' => array('label' => __('credits', 'billing_credits'), 'rules' => array('trim', 'required', 'is_natural_no_zero')), 'price' => array('label' => __('price', 'billing'), 'rules' => array('trim', 'required', 'numeric')), 'active' => array('label' => __('active', 'system'), 'rules' => array('trim', 'required', 'intval'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get post data $package = input::post(array('credits', 'price', 'active')); // Save banner group if (!($packageID = $this->credits_model->savePackage($packageID, $package))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('package_saved', 'billing_credits')); router::redirect('cp/billing/credits/edit/' . $packageID); }
protected function _saveTemplate($templateID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('category_id' => array('label' => __('gift_category', 'gifts'), 'rules' => array('intval'))); // Get template data $rules['name'] = array('label' => __('name', 'system'), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['subject'] = array('label' => __('newsletter_subject', 'newsletters'), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['message_html'] = array('label' => __('newsletter_message_html', 'newsletters'), 'rules' => array('trim', 'required')); $rules['message_text'] = array('label' => __('newsletter_message_text', 'newsletters'), 'rules' => array('trim', 'required')); $input = array('name', 'subject', 'message_html', 'message_text'); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get template data $template = input::post($input); // Save template if (!($templateID = $this->newsletters_templates_model->saveTemplate($templateID, $template))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('template_saved', 'newsletters_templates')); router::redirect('cp/content/newsletters/templates/edit/' . $templateID); }
protected function _submitReport($resource, $resourceID, $userID, $itemID, $subjects) { // Extra rules $rules = array('subject' => array('rules' => $subjects ? array('required', 'callback__is_valid_subject' => array($subjects)) : array('callback__is_valid_subject' => array($subjects))), 'message' => array('rules' => array('is_string', 'trim', 'max_length' => 255))); validate::setRules($rules); // Validate form values if (!validate::run($rules)) { return false; } // Get values $subject = $subjects ? (int) input::post('subject') : 0; $message = input::post('message'); // Send feedback if (!$this->reports_model->saveReport($resourceID, $userID, $itemID, $subject, $message)) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Success router::redirect('report/sent' . (input::get('modal') ? '?modal=1' : '')); }
protected function _saveComment($resource, $itemID) { // Is user logged in? if (!users_helper::isLoggedin()) { return false; } // Create rules $rules = array('comment' => array('label' => __('comment_body', 'comments'), 'rules' => array('trim', 'required', 'min_length' => config::item('min_length', 'comments'), 'max_length' => config::item('max_length', 'comments'), 'callback__is_comments_delay'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get comment $comment = array('comment' => input::post('comment')); // Get table and column names $table = config::item('resources', 'core', $resource, 'table'); $column = config::item('resources', 'core', $resource, 'column'); $user = config::item('resources', 'core', $resource, 'user'); // Get resource item $item = $this->db->query("SELECT `" . $column . "` " . ($user ? ', `' . $user . '` AS `user_id`' : '') . "\n\t\t\tFROM `:prefix:" . $table . "`\n\t\t\tWHERE `" . $column . "`=? LIMIT 1", array($itemID))->row(); // Does resource exist? if (!$item) { return false; } // Save comment if (!$this->comments_model->saveComment(0, $comment, $resource, isset($item['user_id']) ? $item['user_id'] : 0, $itemID)) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Reset post values $_POST['comment'] = ''; validate::resetRules(); return true; }
protected function _saveMetaTags($plugin, $tags) { // Check if demo mode is enabled if (input::demo()) { return false; } $rules = array(); foreach ($tags as $keyword => $group) { foreach (config::item('languages', 'core', 'keywords') as $language) { $rules[$keyword . '_title_' . $language] = $rules[$keyword . '_description_' . $language] = $rules[$keyword . '_keywords_' . $language] = array('label' => '', 'rules' => array('is_string', 'trim', 'max_length' => 255)); } } validate::setRules($rules); if (!validate::run()) { return false; } foreach ($tags as $keyword => $group) { $data = array(); foreach (config::item('languages', 'core', 'keywords') as $language) { $data['meta_title_' . $language] = input::post($keyword . '_title_' . $language); $data['meta_description_' . $language] = input::post($keyword . '_description_' . $language); $data['meta_keywords_' . $language] = input::post($keyword . '_keywords_' . $language); } $this->metatags_model->saveMetaTags($plugin, $keyword, $data); } view::setInfo(__('meta_tags_saved', 'system_metatags')); router::redirect('cp/system/metatags/edit/' . $plugin); }
protected function _saveField($plugin, $table, $categoryID, $fieldID, $fieldOld, $configs, $hidden) { // Check if demo mode is enabled if (input::demo()) { return false; } // Rules array $rules = array(); // Data array $inputData = array('keyword', 'type', 'style', 'class', 'required', 'system', 'multilang'); // Name foreach (config::item('languages', 'core', 'keywords') as $languageID => $lang) { $rules['name_' . $lang] = array('label' => __('name', 'system_fields') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['vname_' . $lang] = array('label' => __('name_view', 'system_fields') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'max_length' => 255)); $rules['sname_' . $lang] = array('label' => __('name_search', 'system_fields') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'max_length' => 255)); $rules['validate_error_' . $lang] = array('label' => __('validate_error', 'system_fields') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'max_length' => 255)); $inputData[] = 'name_' . $lang; $inputData[] = 'vname_' . $lang; $inputData[] = 'sname_' . $lang; $inputData[] = 'validate_error_' . $lang; } // Keyword $rules['keyword'] = array('label' => __('keyword', 'system'), 'rules' => array('trim', 'required', 'alpha_dash', 'max_length' => 128, 'callback__is_unique_keyword' => array($plugin, $categoryID, $fieldID), 'callback__is_system_field' => array($fieldID ? $fieldOld['keyword'] : '', $fieldID ? $fieldOld['system'] : ''))); // Type $rules['type'] = array('label' => __('field_type', 'system_fields'), 'rules' => array('required', 'callback__is_system_field' => array($fieldID ? $fieldOld['type'] : '', $fieldID ? $fieldOld['system'] : ''))); // Style value $rules['style'] = array('label' => __('style', 'system_fields'), 'rules' => array('trim')); // Class value $rules['class'] = array('label' => __('class', 'system_fields'), 'rules' => array('trim')); // Required $rules['required'] = array('label' => __('required', 'system_fields'), 'rules' => array('intval')); // Regular expression $rules['validate'] = array('label' => __('validate', 'system_fields'), 'rules' => array('trim')); $inputData[] = 'validate'; // Configuration array $inputConfig = array(); foreach (array('custom', input::post('type')) as $conf) { if (isset($configs[$conf])) { foreach ($configs[$conf] as $option) { $rules['config_' . $conf . '_' . $option['keyword']] = array('label' => utf8::strtolower($option['label']), 'rules' => isset($option['rules']) ? $option['rules'] : array()); $inputConfig[$option['keyword']] = 'config_' . $conf . '_' . $option['keyword']; } } } // Add items rules $items = array(); $oldItems = $fieldID ? $fieldOld['items'] : array(); if ($this->fields_model->isMultiValue(input::post('type'))) { $itemsPost = input::post('items'); $sitemsPost = input::post('sitems'); foreach (config::item('languages', 'core', 'keywords') as $languageID => $lang) { $orderID = 1; if (isset($itemsPost[$lang]) && is_array($itemsPost[$lang])) { foreach ($itemsPost[$lang] as $itemID => $itemName) { // Trim name $itemName = utf8::trim($itemName); // Assign item data $items[$itemID]['order_id'] = $orderID; $items[$itemID]['name_' . $lang] = $itemName; $items[$itemID]['sname_' . $lang] = $sitemsPost[$lang][$itemID]; $orderID++; // Add rule $rules['items[' . $lang . '][' . $itemID . ']'] = array(); if ($itemName == '') { validate::setRule('items', '', ''); validate::setFieldError('items', __('empty_item', 'system_fields') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : '')); } } } } if (!$items) { validate::setRule('items', '', ''); validate::setFieldError('items', __('no_items', 'system_fields')); } view::assign(array('field' => array('items' => $items))); } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get post data $fieldData = input::post($inputData); // Default data $fieldData['system'] = isset($hidden['system']) ? $hidden['system'] : 0; $fieldData['multilang'] = isset($hidden['multilang']) ? $hidden['multilang'] : 0; // Get config data $fieldData['config'] = array(); foreach ($inputConfig as $key => $val) { $fieldData['config'][$key] = input::post($val); } // Set additional config data $fieldData['config']['html'] = input::post('html') ? 1 : 0; $fieldData['config']['in_search'] = input::post('in_search') ? 1 : 0; $fieldData['config']['in_search_advanced'] = input::post('in_search_advanced') ? 1 : 0; if ($fieldData['config']['in_search'] || $fieldData['config']['in_search_advanced']) { $fieldData['config']['search_options'] = input::post('search_options') ? input::post('search_options') : ''; } if (input::post('type') == 'checkbox' || input::post('search_options') == 'multiple') { $fieldData['config']['columns_number'] = input::post('columns_number') && input::post('columns_number') >= 1 && input::post('columns_number') <= 4 ? input::post('columns_number') : 1; } // Save field if (!($newFieldID = $this->fieldsdb_model->saveField($plugin, $table, $categoryID, $fieldID, $fieldData, $items))) { view::setError(__('db_no_alter', 'system_fields')); return false; } // Check if order of items have changed if ($fieldID && $this->fields_model->isMultiValue(input::post('type')) && $this->fields_model->isValueColumn(input::post('type'))) { // Get old and new item IDs $itemsOldIDs = $itemsNewIDs = array(); foreach ($oldItems as $itemID => $item) { $itemsOldIDs[$itemID] = $item['order_id']; } foreach ($items as $itemID => $item) { $itemsNewIDs[$itemID] = $item['order_id']; } // Do we have any differences? if (array_diff_assoc($itemsOldIDs, $itemsNewIDs)) { // Update items IDs $this->fieldsdb_model->updateItemsIDs($table, $fieldData['keyword'], $itemsOldIDs, $itemsNewIDs); } } // Adjust table column $this->fieldsdb_model->adjustColumn($table, $fieldData['keyword'], $newFieldID, $fieldData); // Success view::setInfo(__('field_saved', 'system_fields')); router::redirect('cp/system/fields/' . $plugin . '/edit/' . $categoryID . '/' . $newFieldID); }
protected function _saveType($typeID, $type, $fields) { // Check if demo mode is enabled if (input::demo()) { return false; } // Rules array $rules = array(); // Input data array $input = array('keyword', 'field_name_1', 'field_name_2'); // Name field foreach (config::item('languages', 'core', 'keywords') as $languageID => $language) { $rules['name_' . $language] = array('label' => __('name', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 128)); $input[] = 'name_' . $language; } // Keyword field $rules['keyword'] = array('label' => __('keyword', 'system'), 'rules' => array('required', 'max_length' => 32, 'alpha_dash', 'strtolower', 'callback__is_unique_keyword' => $typeID)); // Is this an existing type? if ($typeID) { $rules['field_name_1'] = array('label' => __('type_fields_name', 'users_types'), 'rules' => array('max_length' => 128, 'callback__is_valid_field_name' => array('field_name_1', $fields))); $rules['field_name_2'] = array('label' => __('type_fields_name', 'users_types'), 'rules' => array('max_length' => 128, 'callback__is_valid_field_name' => array('field_name_2', $fields))); } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get post data $data = input::post($input); // Save user type if (!($newTypeID = $this->users_types_model->saveType($typeID, $data))) { if ($typeID) { view::setError(__('db_no_rename', 'system_fields')); } else { view::setError(__('db_no_create', 'system_fields')); } return false; } // Is this an existing type? if ($typeID) { $fields = config::item('usertypes', 'core', 'fields', $typeID); if (($data['field_name_1'] || $data['field_name_2']) && ($fields[1] != $data['field_name_1'] || $fields[2] != $data['field_name_2'])) { $this->users_types_model->updateNames($typeID, $data['field_name_1'], $data['field_name_2']); } } // Success view::setInfo(__('type_saved', 'users_types')); router::redirect('cp/users/types/edit/' . $newTypeID); }
protected function _savePermissions($ids, $plugin, $permissions) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array(); foreach ($permissions as $groupID => $group) { foreach (array('cp', 'ca') as $section) { if (isset($permissions[$groupID][$section])) { foreach ($permissions[$groupID][$section] as $permission) { $rules[$permission['keyword'] . '_' . $groupID] = array('label' => $permission['name'], 'rules' => ''); } } } } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Create permissions array $data = $orderID = array(); foreach ($permissions as $groupID => $group) { foreach (array('cp', 'ca') as $section) { if (isset($permissions[$groupID][$section])) { foreach ($permissions[$groupID][$section] as $permission) { $value = input::post($permission['keyword'] . '_' . $groupID); if ($permission['type'] == 'checkbox') { $value = $value ? implode(',', $value) : ''; } elseif ($permission['type'] == 'boolean' || $permission['type'] == 'number') { $value = $value ? (int) $value : 0; } $data[$permission['keyword']] = $value; if (config::item('devmode', 'system') == 2) { $orderID[$permission['keyword']] = (int) input::post($permission['keyword'] . '___order'); } } } } // Save user group permissions if (!$this->users_groups_model->savePermissions($groupID, $plugin, $data, $orderID)) { view::setError(__('save_error', 'system')); return false; } } // Successs view::setInfo(__('permissions_saved', 'users_permissions')); router::redirect('cp/users/groups/permissions/' . $plugin . '/' . $ids); }
protected function _saveSubject($subjectID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = $input = array(); // Get subject data $subjectData = array(); foreach (config::item('languages', 'core', 'keywords') as $languageID => $language) { $rules['name_' . $language] = array('label' => __('name', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255)); $input[] = 'name_' . $language; } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get subject data $subject = input::post($input); $subject['active'] = input::post('active') ? 1 : 0; // Save subject if (!($subjectID = $this->reports_subjects_model->saveSubject($subjectID, $subject))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('subject_saved', 'reports_subjects')); router::redirect('cp/content/reports/subjects/edit/' . $subjectID); }
protected function _uploadPicture() { // Create rules $rules = array('file' => array('label' => __('file_select', 'system_files'), 'rules' => array('required_file' => 'file'))); // Assign rules validate::setRules($rules); // Validate form values if (!validate::run()) { return false; } // Thumbnails config $thumbs = array(array('suffix' => 'x'), array('dimensions' => config::item('picture_dimensions', 'users'), 'method' => 'preserve', 'suffix' => ''), array('dimensions' => config::item('picture_dimensions_p', 'users'), 'method' => 'crop', 'suffix' => 'p'), array('dimensions' => config::item('picture_dimensions_l', 'users'), 'method' => 'crop', 'suffix' => 'l'), array('dimensions' => config::item('picture_dimensions_t', 'users'), 'method' => 'crop', 'suffix' => 't')); // Upload picture if (!($fileID = $this->storage_model->upload('user', session::item('user_id'), 'file', 'jpg|jpeg|gif|png', config::item('picture_max_size', 'users'), config::item('picture_dimensions_max', 'users'), $thumbs))) { if (input::isAjaxRequest()) { view::ajaxError(config::item('devmode', 'system') ? $this->storage_model->getError() : __('file_upload_error', 'system_files')); } else { validate::setFieldError('file', config::item('devmode', 'system') ? $this->storage_model->getError() : __('file_upload_error', 'system_files')); } return false; } // Delete old picture if it exists if (session::item('picture_id')) { // Delete picture $this->users_model->deletePicture(session::item('user_id'), session::item('picture_id'), false); } // Save new picture ID if (!$this->users_model->savePicture(session::item('user_id'), $fileID)) { if (input::isAjaxRequest()) { view::ajaxError(__('save_error', 'system')); } else { validate::setFieldError('file', __('save_error', 'system')); return false; } } // Was this an ajax request? if (input::isAjaxRequest()) { view::ajaxResponse(array('redirect' => html_helper::siteURL(session::item('slug')))); } // Success view::setInfo(__('picture_uploaded', 'users_picture')); router::redirect(session::item('slug')); }
protected function _saveEmail() { // Creat rules $rules = array('email' => array('label' => __('email_new', 'users'), 'rules' => array('trim', 'required', 'max_length' => 255, 'valid_email', 'callback__is_unique_email')), 'password' => array('label' => __('password_current', 'users'), 'rules' => array('trim', 'required', 'min_length' => 4, 'max_length' => 128, 'callback__is_valid_password'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Do we need to verify email address? if (config::item('signup_email_verify', 'users')) { // Load requests model loader::model('system/requests'); // Is this a recent request? if (config::item('signup_delay', 'users') != -1 && $this->requests_model->isRecentRequest('newemail', session::item('user_id'), 0, config::item('signup_delay', 'users'))) { // Success view::setError(__('email_change_recent', 'users')); return false; } // Load email library loader::library('email'); // Save signup request $hash = $this->requests_model->saveRequest('newemail', session::item('user_id'), 0, input::post('email')); $tags = session::section('session'); $tags['security_hash'] = $hash; $tags['activation_link'] = config::siteURL('users/settings/newemail/' . $hash); // Send activation email $this->email->sendTemplate('users_account_confirm', input::post('email'), $tags, session::item('language_id')); // Success view::setInfo(__('email_confirm', 'users')); } else { // Save user if (!$this->users_model->saveEmail(session::item('user_id'), input::post('email'))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('email_saved', 'users')); } router::redirect('users/settings'); }
protected function _saveMessage($messageID, $message) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('message' => array('label' => __('message', 'messages'), 'rules' => array('trim', 'required'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get input data $body = input::post('message'); // Save message if (!($messageID = $this->messages_model->saveMessage($messageID, $message['conversation_id'], $body))) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Success view::setInfo(__('message_saved', 'messages')); router::redirect('cp/plugins/messages/edit/' . $messageID); }
protected function _resendHash() { // Create rules $rules = array('email' => array('label' => 'email', 'rules' => array('trim', 'required', 'max_length' => 255, 'valid_email'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Does user exist? if (!($user = $this->users_model->getUser(input::post('email')))) { validate::setFieldError('email', __('email_invalid', 'users_signup')); return false; } // Is user's email already verified? if ($user['verified']) { view::setError(__('user_already_verified', 'users_signup')); return false; } // Loader loader::library('email'); loader::model('system/requests'); // Is this a recent request? if ($this->requests_model->isRecentRequest('signup', $user['user_id'], 0, 5)) { // Success view::setError(__('request_recent_sendhash', 'users_signup')); return false; } // Save resend hash request $hash = $this->requests_model->saveRequest('signup', $user['user_id']); $user['security_hash'] = $hash; $user['activation_link'] = config::siteURL('users/signup/confirm/' . $user['user_id'] . '/' . $hash); // Send activation email $this->email->sendTemplate('users_account_confirm', $user['email'], $user, $user['language_id']); // Success view::setInfo(__('confirm_email', 'users_signup')); router::redirect('users/login/index/verify'); }
public function validateValues($fields, $rules = array()) { // Loop through fields foreach ($fields as $field) { // Is this a data field? if (isset($field['system'])) { // Is this a multi language field? if ($field['multilang']) { $languages = array(); foreach (config::item('languages', 'core', 'keywords') as $languageID => $languageKey) { $languages[] = array('keyword' => '_' . $languageKey, 'language' => config::item('languages', 'core', 'names', $languageID)); } } else { $languages = array(array('keyword' => '', 'language' => '')); } // Loop through fields foreach ($languages as $param) { // Is this a section divider? if ($field['type'] != 'section') { $keyword = 'data_' . $field['keyword'] . $param['keyword']; // Create basic rule $rules[$keyword] = array('label' => text_helper::entities($field['name']) . ($param['language'] ? count($languages) > 1 ? ' [' . $param['language'] . ']' : '' : ''), 'rules' => array()); // Required if ($field['required']) { if ($field['type'] == 'birthday') { foreach (array('day', 'month', 'year') as $index) { $rules['data_' . $field['keyword'] . $param['keyword'] . '[' . $index . ']']['label'] = $field['name']; $rules['data_' . $field['keyword'] . $param['keyword'] . '[' . $index . ']']['rules'][] = 'required'; } $value = input::post($keyword); } elseif ($field['type'] == 'location') { foreach (array('country', 'state', 'city') as $index) { $rules['data_' . $field['keyword'] . $param['keyword'] . '[' . $index . ']']['label'] = $field['name']; $rules['data_' . $field['keyword'] . $param['keyword'] . '[' . $index . ']']['rules'][] = 'required'; } $value = input::post($keyword); } else { $rules[$keyword]['rules'][] = 'required'; } } // Field types if ($this->getValueFormat($field['type']) == 'text') { $rules[$keyword]['rules'][] = 'is_string'; } elseif ($this->getValueFormat($field['type']) == 'number') { $rules[$keyword]['rules'][] = 'intval'; $rules[$keyword]['rules'][] = 'is_numeric'; } elseif ($this->getValueFormat($field['type']) == 'double') { $rules[$keyword]['rules'][] = 'is_numeric'; } if ($field['type'] == 'website') { $rules[$keyword]['rules']['valid_url'] = array(array('http://', 'https://')); } // Min/max rules foreach (array('min_length', 'max_length', 'min_value', 'max_value') as $rule) { if (isset($field['config'][$rule]) && $field['config'][$rule]) { $rules[$keyword]['rules'][$rule] = array($field['config'][$rule]); } } // Validation if (isset($field['validate']) && $field['validate']) { $rules[$keyword]['rules']['regex'] = array($field['validate']); validate::setError('data_' . $field['keyword'] . '_regex', $field['validate_error'], $field['keyword'] . $param['keyword']); } } } } } // Set rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } return true; }
protected function _saveMessage($conversationID, $conversation) { // Are we allowed to reply? if ($conversation['user_id'] == session::item('user_id') && !session::permission('messages_reply', 'messages') || !in_array($conversation['users'][$conversation['user_id']]['group_id'], session::permission('messages_reply', 'messages'))) { view::setError(__('no_action', 'system')); return false; } elseif (config::item('credits_active', 'billing') && session::permission('messages_credits', 'messages') && session::permission('messages_credits', 'messages') > session::item('total_credits')) { view::setError(__('no_credits', 'system', array(), array('%' => html_helper::anchor('billing/credits', '\\1')))); return false; } // Create rules $rules = array('message' => array('label' => __('message', 'messages'), 'rules' => array('trim', 'required', 'callback__is_messages_delay'))); // Do we have character limit? if (session::permission('messages_characters_limit', 'messages')) { $rules['message']['rules']['max_length'] = session::permission('messages_characters_limit', 'messages'); } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get input data $message = input::post('message'); // Save message if (!($messageID = $this->messages_model->saveMessage(0, $conversationID, $message, $conversation['recipients']))) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Create email replacement tags $tags = array(); foreach (session::section('session') as $key => $value) { $tags['from.' . $key] = $value; } $tags['conversation_link'] = config::siteURL('messages/view/' . $conversationID); // Send new private message email loader::library('email'); foreach ($conversation['users'] as $user) { if ($user['user_id'] != session::item('user_id') && (!isset($user['config']['notify_messages']) || $user['config']['notify_messages'])) { $this->email->sendTemplate('messages_new', $user['email'], array_merge($tags, $user), $user['language_id']); } } // Success view::setInfo(__('message_sent', 'messages')); router::redirect('messages/view/' . $conversationID); }
protected function _saveMessage($userID) { // Is user logged in? if (!users_helper::isLoggedin()) { return false; } if ($userID) { // Get user if (!($user = $this->users_model->getUser($userID)) || !$user['active'] || !$user['verified']) { return false; } // Does user have permission to view this user group/type? if (!in_array($user['group_id'], session::permission('users_groups_browse', 'users')) || !in_array($user['type_id'], session::permission('users_types_browse', 'users'))) { return false; } elseif (!$this->users_model->getPrivacyAccess($user['user_id'], isset($user['config']['privacy_profile']) ? $user['config']['privacy_profile'] : 1)) { return false; } elseif (!session::permission('messages_post', 'timeline') || !$this->users_model->getPrivacyAccess($user['user_id'], isset($user['config']['privacy_timeline_messages']) ? $user['config']['privacy_timeline_messages'] : 1, false)) { return false; } } else { $userID = session::item('user_id'); } // Load messages model loader::model('timeline/messages', array(), 'timeline_messages_model'); // Create rules $rules = array('message' => array('label' => __('message', 'timeline'), 'rules' => array('trim', 'required', 'min_length' => config::item('message_min_length', 'timeline'), 'max_length' => config::item('message_max_length', 'timeline'), 'callback__is_messages_delay'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { $output = view::load('timeline/post', array('user' => $user), true); view::ajaxError($output); } // Get message $message = input::post('message'); // Save message if (!($messageID = $this->timeline_messages_model->saveMessage(0, $message, $userID))) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } $actions = $this->timeline_model->getActions($userID, 0, 0, 1); $output = view::load('timeline/actions', array('actions' => $actions), true); view::ajaxResponse($output); }
protected function _saveSettings($plugin, $settings, $param) { // Check if demo mode is enabled if (input::demo()) { return false; } $rules = array(); foreach ($settings as $group => $configs) { foreach ($configs as $setting) { $options = array(); if ($setting['required']) { $options[] = 'required'; } if ($setting['type'] == 'email') { $options[] = 'valid_email'; } elseif ($setting['type'] == 'number') { if ($setting['required']) { $options[] = 'is_numeric_no_zero'; $options['min_value'] = '1'; } else { $options[] = 'is_numeric'; } } $rules[$setting['keyword']] = array('label' => $setting['name'], 'rules' => $options); } } validate::setRules($rules); if (!validate::run()) { return false; } foreach ($settings as $group => $configs) { foreach ($configs as $setting) { if ($setting['type'] != 'static') { $value = input::post($setting['keyword']); if (method_exists($this, '_savePluginSettings')) { $this->_savePluginSettings($setting['keyword'], $value); } if ($setting['type'] == 'checkbox') { if (!is_array($value)) { $value = array(); } $value = json_encode(array_flip($value)); } elseif ($setting['type'] == 'number') { $value = $value == '' ? 0 : $value; } $orderID = false; if (config::item('devmode', 'system') == 2) { $orderID = (int) input::post($setting['keyword'] . '___order'); } $this->config_model->saveSetting($plugin, $setting['keyword'], $value, $orderID); } } } view::setInfo(__('config_saved', 'system_config')); router::redirect(($param ? 'cp/system/plugins/settings/' : 'cp/system/config/') . $plugin); }
public function _saveSettings($keyword, $manifest, $service) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array(); // Loop through available settings foreach ($manifest['settings'] as $setting) { // Rule options $options = array(); if (isset($setting['required']) && $setting['required']) { $options[] = 'required'; } $rules[$setting['keyword']] = array('label' => $setting['name'], 'rules' => $options); } // Assign rules validate::setRules($rules); // Run rules if (!validate::run()) { return false; } $settings = array(); foreach ($manifest['settings'] as $setting) { $value = input::post($setting['keyword']); if ($setting['type'] == 'checkbox') { $value = array_flip($value); } $settings[$setting['keyword']] = $value; } // Load storage service library $class = loader::library('storages/' . $keyword, array(), null); // Does custom validation method exist? if (method_exists($class, 'validateSettings')) { // Run custom validation method if (($settings = $class->validateSettings($settings)) === false) { return false; } } $this->storage_model->saveSettings($service['service_id'], $settings, $service); view::setInfo(__('settings_saved', 'system')); router::redirect('cp/system/storage/settings/' . $keyword); }
protected function _savePlan($planID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Rules array $rules = array(); // Data array $input = array('duration', 'cycle', 'price', 'group_id', 'signup', 'active'); // Name foreach (config::item('languages', 'core', 'keywords') as $languageID => $languageKey) { $rules['name_' . $languageKey] = array('label' => __('name', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255)); $input[] = 'name_' . $languageKey; $rules['description_' . $languageKey] = array('label' => __('description', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required')); $input[] = 'description_' . $languageKey; } // Additional rules $rules['duration'] = array('label' => __('plan_cycle', 'billing_plans'), 'rules' => array('trim', 'required', 'is_natural_no_zero')); $rules['cycle'] = array('label' => __('plan_cycle', 'billing_plans'), 'rules' => array('trim', 'required', 'intval')); $rules['price'] = array('label' => __('price', 'billing'), 'rules' => array('trim', 'required', 'numeric')); $rules['group_id'] = array('label' => __('user_group', 'users'), 'rules' => array('trim', 'required', 'intval')); $rules['signup'] = array('label' => __('plan_show_signup', 'billing_plans'), 'rules' => array('trim', 'required', 'intval')); $rules['active'] = array('label' => __('active', 'system'), 'rules' => array('trim', 'required', 'intval')); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get post data $plan = input::post($input); // Save banner group if (!($planID = $this->plans_model->savePlan($planID, $plan))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('plan_saved', 'billing_plans')); router::redirect('cp/billing/plans/edit/' . $planID); }
protected function _saveTemplate($templateID, $keyword) { // Check if demo mode is enabled if (input::demo()) { return false; } // Rules and input arrays $rules = $input = array(); // Build rules foreach (config::item('languages', 'core', 'keywords') as $languageID => $language) { // Make sure this is not a header/footer template if (!in_array($keyword, array('header', 'footer'))) { $rules['subject_' . $language] = array('label' => __('template_subject', 'system_email_templates') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required')); $input[] = 'subject_' . $language; } $rules['message_html_' . $language] = array('label' => __('template_message_html', 'system_email_templates') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required')); $rules['message_text_' . $language] = array('label' => __('template_message_text', 'system_email_templates') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required')); $rules['active'] = array('label' => __('active', 'system'), 'rules' => array('required', 'intval')); $input[] = 'message_html_' . $language; $input[] = 'message_text_' . $language; $input[] = 'active'; } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get template data $template = input::post($input); // Save template data $this->emailtemplates_model->saveTemplate($templateID, $template); // Success view::setInfo(__('template_saved', 'system_email_templates')); router::redirect('cp/system/emailtemplates/edit/' . $templateID); }
protected function _saveLanguageData($plugin, $language, $default) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array(); foreach ($default as $section => $groups) { foreach ($groups as $group => $types) { foreach ($types as $type => $lang) { foreach ($lang as $keyword => $name) { $rules[$group . '_' . $keyword] = array('label' => '', 'rules' => array('trim', 'required')); } } } } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get language data $languageData = array(); foreach ($default as $section => $groups) { foreach ($groups as $group => $types) { foreach ($types as $type => $lang) { foreach ($lang as $keyword => $name) { $cp = $type == 'cp' ? 1 : 0; // Set language data $data = array('value_' . $language => input::post($group . '_' . $keyword)); // Save language string $this->languages_model->saveLanguageData($plugin, $section, $group, $keyword, $data); } } } } // Recompile language pack $this->languages_model->compile($language); // Success view::setInfo(__('language_saved', 'system_languages')); router::redirect('cp/system/languages/translate/' . $plugin . '/' . $language); }
protected function _uploadPicture($adID, $ad) { // Create rules $rules = array('file' => array('label' => __('file_select', 'system_files'), 'rules' => array('required_file' => 'file'))); // Assign rules validate::setRules($rules); // Validate form values if (!validate::run()) { return false; } // Thumbnails config $thumbs = array(array('suffix' => 'x'), array('dimensions' => config::item('picture_dimensions', 'classifieds'), 'method' => 'preserve', 'suffix' => ''), array('dimensions' => config::item('picture_dimensions_t', 'classifieds'), 'method' => 'crop', 'suffix' => 't')); // Upload picture if (!($fileID = $this->storage_model->upload('classified_picture', session::item('user_id'), 'file', 'jpg|jpeg|gif|png', config::item('picture_max_size', 'classifieds'), config::item('picture_dimensions_max', 'classifieds'), $thumbs))) { if (input::isAjaxRequest()) { view::ajaxError(config::item('devmode', 'system') ? $this->storage_model->getError() : __('file_upload_error', 'system_files')); } else { validate::setFieldError('file', config::item('devmode', 'system') ? $this->storage_model->getError() : __('file_upload_error', 'system_files')); return false; } } // Extras $extra = array(); // Save picture file if (!($pictureID = $this->classifieds_pictures_model->savePictureFile($fileID, $adID, $ad, $extra))) { if (input::isAjaxRequest()) { view::ajaxError(__('save_error', 'system')); } else { validate::setFieldError('file', __('save_error', 'system')); return false; } } // Update current album counters $ad[session::permission('pictures_approve', 'classifieds') ? 'total_pictures' : 'total_pictures_i']++; // Update album's modification date $this->classifieds_model->updateModifyDate($adID); // Was this an ajax request? if (input::isAjaxRequest()) { //view::ajaxResponse(__('picture_uploaded', 'pictures')); view::ajaxResponse(array('redirect' => html_helper::siteURL('classifieds/pictures/index/' . $adID))); } // Success view::setInfo(__('picture_uploaded', 'classifieds')); router::redirect('classifieds/pictures/index/' . $adID); }
protected function _saveTemplate($templateID) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('category_id' => array('label' => __('gift_category', 'gifts'), 'rules' => array('intval')), 'active' => array('label' => __('active', 'system'), 'rules' => array('intval'))); // Get template data $templateData = $input = array(); foreach (config::item('languages', 'core', 'keywords') as $languageID => $language) { $rules['name_' . $language] = array('label' => __('name', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['subject_' . $language] = array('label' => __('template_subject', 'messages_templates') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255)); $rules['message_' . $language] = array('label' => __('template_message', 'messages_templates') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', $languageID) . ']' : ''), 'rules' => array('trim', 'required')); $input[] = 'name_' . $language; $input[] = 'subject_' . $language; $input[] = 'message_' . $language; } // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Get template data $template = input::post($input); $template['active'] = input::post('active') ? 1 : 0; // Save template if (!($templateID = $this->messages_templates_model->saveTemplate($templateID, $template))) { view::setError(__('save_error', 'system')); return false; } // Success view::setInfo(__('template_saved', 'messages_templates')); router::redirect('cp/plugins/messages/templates/edit/' . $templateID); }
public function _saveSettings($keyword, $manifest, $gateway, $settings) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('name' => array('label' => __('name', 'system'), 'rules' => array('required', 'max_length' => 128)), 'active' => array('label' => __('active', 'system'), 'rules' => array('intval'))); // Loop through available settings foreach ($settings as $setting) { // Rule options $options = array(); if (isset($setting['required']) && $setting['required']) { $options[] = 'required'; } $rules[$setting['keyword']] = array('label' => $setting['name'], 'rules' => $options); } $rules['active'] = array('label' => __('active', 'system'), 'rules' => array('required')); // Assign rules validate::setRules($rules); // Run rules if (!validate::run()) { return false; } $settings = array(); foreach ($manifest['settings'] as $setting) { if ($setting['type'] == 'system') { $value = $setting['value']; } else { $value = input::post($setting['keyword']); if ($setting['type'] == 'checkbox') { $value = array_flip($value); } } $settings[$setting['keyword']] = $value; } // Load gateway library $gateway = loader::library('payments/' . $keyword, array(), null); // Does validation method exist? if (method_exists($gateway, 'validateSettings')) { // Validate settings if (!$gateway->validateSettings($settings)) { return false; } } $this->gateways_model->saveSettings(input::post('name'), $keyword, $settings, input::post('active') ? 1 : 0); view::setInfo(__('settings_saved', 'system')); router::redirect('cp/billing/gateways/settings/' . $keyword); }
protected function _saveBanner($groupID, $bannerID, $bannerOld) { // Check if demo mode is enabled if (input::demo()) { return false; } // Create rules $rules = array('name' => array('label' => __('name', 'system'), 'rules' => array('trim', 'required', 'max_length' => 255)), 'keyword' => array('label' => __('keyword', 'system'), 'rules' => array('trim', 'required', 'max_length' => 128, 'alpha_dash', 'strtolower', 'callback__is_unique_keyword' => array($groupID, $bannerID))), 'code' => array('label' => __('banner_code', 'banners'), 'rules' => array('trim', 'required')), 'count_views' => array('label' => __('banner_count_views', 'banners'), 'rules' => array('trim', 'intval')), 'total_views' => array('label' => __('banner_views', 'banners'), 'rules' => array('trim', 'intval')), 'count_clicks' => array('label' => __('banner_count_clicks', 'banners'), 'rules' => array('trim', 'intval')), 'total_clicks' => array('label' => __('banner_clicks', 'banners'), 'rules' => array('trim', 'intval')), 'secure_mode' => array('label' => __('banner_secure_mode', 'banners'), 'rules' => array('trim', 'intval')), 'active' => array('label' => __('active', 'system'), 'rules' => array('trim', 'intval'))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } // Banner data $bannerData = input::post(array('name', 'keyword', 'code', 'count_views', 'total_views', 'count_clicks', 'total_clicks', 'secure_mode', 'active')); $bannerData['group_id'] = $groupID; // Save banner if (!($bannerID = $this->banners_model->saveBanner($groupID, $bannerID, $bannerData))) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Success view::setInfo(__('banner_saved', 'banners')); router::redirect('cp/content/banners/edit/' . $groupID . '/' . $bannerID); }
protected function _saveGeoData($countryID, $stateID, $cityID, $new = false) { // Check if demo mode is enabled if (input::demo()) { return false; } // Is this a new value? if ($new) { // Create rules $rules = array('name_' . config::item('languages', 'core', 'keywords', config::item('language_id', 'system')) => array('label' => __('name', 'system') . (count(config::item('languages', 'core', 'keywords')) > 1 ? ' [' . config::item('languages', 'core', 'names', config::item('language_id', 'system')) . ']' : ''), 'rules' => array('trim', 'required', 'max_length' => 255))); // Assign rules validate::setRules($rules); // Validate fields if (!validate::run()) { return false; } } $data = array(); foreach (config::item('languages', 'core', 'keywords') as $language) { $data['name_' . $language] = input::post('name_' . $language); } if ($cityID || $new && $stateID) { $this->geo_model->saveCity($countryID, $stateID, $cityID, $data); view::setInfo(__('city_saved', 'system_geo')); } elseif ($stateID || $new && $countryID) { $this->geo_model->saveState($countryID, $stateID, $data); view::setInfo(__('state_saved', 'system_geo')); } else { $this->geo_model->saveCountry($countryID, $data); view::setInfo(__('country_saved', 'system_geo')); } if ($new) { router::redirect('cp/system/geo/browse/' . $countryID . ($stateID ? '/' . $stateID : '')); } else { router::redirect('cp/system/geo/edit/' . $countryID . ($stateID ? '/' . $stateID : '') . ($cityID ? '/' . $cityID : '')); } }