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 _savePage($pageID, $parentID, $page, $fields, $options, $trail) { // Check if demo mode is enabled if (input::demo()) { return false; } // Extra rules $rules = array(); foreach ($options as $option) { if (isset($option['rules'])) { $rules[$option['keyword']] = array('label' => $option['name'], 'rules' => $option['rules']); } } $rules['keyword'] = array('label' => __('keyword', 'system'), 'rules' => array('trim', 'required', 'max_length' => 128, 'callback__is_valid_keyword' => array($parentID, $pageID))); // Validate form values if (!$this->fields_model->validateValues($fields, $rules)) { return false; } // Did keyword change? if ($pageID && $page['system'] && strcmp($page['keyword'], input::post('keyword'))) { validate::setFieldError('keyword', __('page_system_rename', 'pages')); return false; } // Extras $extra = array(); $extra['parent_id'] = $parentID; $extra['location'] = ($trail ? implode('/', $trail) . '/' : '') . input::post('keyword'); $extra['keyword'] = input::post('keyword'); $extra['file_name'] = input::post('file_name'); $extra['comments'] = config::item('page_comments', 'pages') ? (int) input::post('comments') : 1; $extra['likes'] = config::item('page_rating', 'pages') == 'likes' ? (int) input::post('likes') : 1; $extra['votes'] = config::item('page_rating', 'pages') == 'stars' ? (int) input::post('votes') : 1; $extra['trail'] = (int) input::post('trail'); $extra['active'] = (int) input::post('active'); // Save page if (!($pageID = $this->pages_model->savePageData($pageID, $parentID, $page, $fields, $extra))) { if (!validate::getTotalErrors()) { view::setError(__('save_error', 'system')); } return false; } // Success view::setInfo(__('page_saved', 'pages')); router::redirect('cp/content/pages/edit/' . $parentID . '/' . $pageID); }
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'); }
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 _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 _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 _createUser() { // Verify email and username one more time if (!$this->_is_unique_email(session::item('account', 'signup', 'email'))) { view::setError(__('email_duplicate', 'users_signup')); router::redirect('users/signup'); } elseif (config::item('user_username', 'users') && !$this->_is_valid_username(session::item('account', 'signup', 'username'))) { view::setError(__('duplicate_username', 'users_signup')); router::redirect('users/signup'); } // Get user data $user = array('email' => session::item('account', 'signup', 'email'), 'password' => session::item('account', 'signup', 'password') ? session::item('account', 'signup', 'password') : '', 'username' => session::item('account', 'signup', 'username'), 'type_id' => count(config::item('usertypes', 'core', 'names')) > 1 ? session::item('account', 'signup', 'type_id') : config::item('type_default_id', 'users'), 'group_id' => config::item('group_default_id', 'users'), 'verified' => config::item('signup_email_verify', 'users') && !session::item('connection', 'remote_connect') ? 0 : 1, 'active' => config::item('signup_admin_verify', 'users') ? 0 : 1, 'picture_id' => session::item('picture', 'signup', 'file_id') ? session::item('picture', 'signup', 'file_id') : 0, 'picture_active' => session::item('picture', 'signup', 'file_id') ? config::item('signup_picture_verify', 'users') ? 9 : 1 : 0, 'picture_date' => date_helper::now()); // Set names $user['name1'] = session::item('profile', 'signup', 'data_' . config::item('usertypes', 'core', 'fields', $user['type_id'], 1)); $user['name2'] = session::item('profile', 'signup', 'data_' . config::item('usertypes', 'core', 'fields', $user['type_id'], 2)); $user['name1'] = $user['name1'] ? $user['name1'] : ''; $user['name2'] = $user['name2'] ? $user['name2'] : ''; // Get fields $fields = $this->fields_model->getFields('users', $user['type_id'], 'edit', 'in_signup'); // Save user $userID = $this->users_model->saveUser(0, $user); // Save profile if (session::item('profile', 'signup')) { $this->users_model->saveProfile($userID, $user['type_id'], session::item('profile', 'signup'), $fields, array(), true); } // Did user upload a picture? if (session::item('picture', 'signup', 'file_id')) { // Update file's user ID $this->storage_model->updateUserID(session::item('picture', 'signup', 'file_id'), $userID, 5); } // Are we signing up using a third party site? $remoteconn = false; if (session::item('connection', 'remote_connect')) { $remoteconn = true; loader::library('authentication/' . session::item('connection', 'remote_connect', 'name')); $this->{session::item('connection', 'remote_connect', 'name')}->saveToken($userID); // Remove temporary session values session::delete('', 'remote_connect'); } // Remove temporary session values session::delete('', 'signup'); // Do we need to verify email address? if (config::item('signup_email_verify', 'users') && !$remoteconn) { // Get user data if (!($user = $this->users_model->getUser($userID))) { validate::setFieldError('email', __('email_invalid', 'users_signup')); return false; } // Save signup request $hash = $this->requests_model->saveRequest('signup', $userID); $user['security_hash'] = $hash; $user['activation_link'] = config::siteURL('users/signup/confirm/' . $userID . '/' . $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'); } elseif (config::item('signup_admin_verify', 'users')) { // Success view::setInfo(__('confirm_user', 'users_signup')); router::redirect('users/login/index/approve'); } else { // Do we need to send welcome email? if (config::item('signup_email_welcome', 'users')) { // Get user data if (!($user = $this->users_model->getUser($userID))) { validate::setFieldError('email', __('email_invalid', 'users_signup')); return false; } // Send welcome email $this->email->sendTemplate('users_account_welcome', $user['email'], $user, $user['language_id']); } // Login user // $this->users_model->login($userID); // Success view::setInfo(__('user_registered', 'users_signup')); view::load('users/signup/registration_finish'); // router::redirect(session::item('slug')); } }