Перейти к содержанию
Conwell

Активация пользовательского e-mail в ocStore 0.2.2

Рекомендуемые сообщения

В этой теме Активация покупателя по e-mail без участия админа в Курилке затронута активация e-mail покупателя по ссылке.

В одном из проектов меня попросили сделать такое, в итоге получается такая вещь, администратор при общем просмотре покупателей сразу видит у кого из покупателей подтвержден e-mail и кого имеет смысл активировать, а кого нет. Покупатель зарегистрировавшись получает сообщение о том, что ему необходимо пройти по ссылке для активации своей почты. До активации почты в не зависимости от того что стоит в настройках магазина (автоматическая активация или администратором) войти в свой кабинет он не сможет.

Уточнение от majdan: старым пользователям надо будет активировать e-mail самостоятельно через phpmyadmin внеся изменения в поле email_approved прописав там "1".

Есть 2 варианта встраивания этих изменений в движок магазина:

  • перезапись системных файлов магазина подготовленным мной - файлом, добавление модуля активации и картинок activation_full.zip
  • внедрение дополнительного кода самостоятельно в системные файлы, добавление только модуля активации и картинок - activation_only.zip
Для обоих вариантов необходимо сделать изменения в базе данных, надо же за что-то зацепиться чтобы понять активирован e-mail или нет. Делаем изменения в таблице `customer` между `status` и `approved` добавляем поле `email_approved` int(1) NOT NULL DEFAULT '0' (где именно вставить доп поле решать вам, мне логичнее было тут)

ALTER TABLE `PREFIX_customer` ADD `email_approved` INT( 1 ) NOT NULL DEFAULT '0' AFTER `status`
где PREFIX_ - префикс названия таблицы, обычно "oc_"

Решение первого варианта:

копируем с заменой файлы из activation_full.zip в корень сайта.

После этого модификация готова к работе. Все старые покупатели будут отображаться с крестиками в админке до тех пор пока Вы не внесете изменения в базу по каждому пользователю ( Уточнение от majdan )

Решение второго варианта:

При использовании второго варианта изменения будем вносить самостоятельно.

Первым делом копируем файлы из activation_only.zip в корень сайта.

Далее под нож попадает файл admin\controller\sale\customer.php

перед

$this->data['customers'][] = array(
приблизительно 323 строка необходимо добавить:

if ($result['email_approved']==1){
		$email_approved = 'check';
	}else {$email_approved = 'cross';}
в дальнейшем даст возможность выводить картинки с разным отображением.

добавляем вывод данных в админку после вывода ~330 строка

'email'          => $result['email'],
добавляем

'email_approved' => $email_approved,

Далее будем кромсать темплейт admin\view\template\sale\customer_list.php

Заменяем строку

<td class="left"><?php echo $customer['email']; ?></td>
на
<td class="left"><?php echo $customer['email']." <img src=\"view/image/".$customer['email_approved'].".png\" />"; ?></td>
это позволит вывести нам флажки в виде картинок check.png и cross.png соответственно.

на этом закончилось отображение статуса подтверждения почты. Файлики необходимо положить в admin\view\image\

Добавляем проверку на подтвержденный e-mail в файле www\system\library\customer.php

в функции public function login($email, $password) делаем дополнительную проверку для выборки из базы:

было:

if (!$this->config->get('config_customer_approval')) {
			$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND password = '" . $this->db->escape(md5($password)) . "' AND status = '1'");
		} else {
			$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND password = '" . $this->db->escape(md5($password)) . "' AND status = '1' AND approved = '1'");
		}
стало

if (!$this->config->get('config_customer_approval')) {
			$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND password = '" . $this->db->escape(md5($password)) . "' AND status = '1' AND email_approved = '1'");
		} else {
			$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND password = '" . $this->db->escape(md5($password)) . "' AND status = '1' AND approved = '1' AND email_approved = '1'");
		}
в обоих запросах при проверке на подтверждение пользователя и без него.

Если вы дошли до этого места, поздравляю! Нам осталась почти половина :)

Добавляем изменения в файлик www\catalog\controller\account\create.php

Строка 17

меняем

$this->model_account_customer->addCustomer($this->request->post);
на

$new_customer_id = $this->model_account_customer->addCustomer($this->request->post);
Строка 38

$message .= $this->language->get('text_approval') . "\n";
меняем на

$message .= $this->language->get('text_approve_email') . "\n";
не забыв добавить переменную в www\catalog\language\russian\mail\account_create.php

$_['text_approve_email'] = 'Ваш аккаунт создан и Вам необходимо подтвердить свой E-mail пройдя по ссылке:';
после чего делаем изменения чуть дальше, заменяем строку 41 в www\catalog\controller\account\create.php

$message .= HTTPS_SERVER . 'index.php?route=account/login' . "\n\n";
на

$message .= HTTPS_SERVER . 'index.php?route=activation/email&activation='.md5($new_customer_id).'&email='.$this->request->post['email'].''. "\n\n";

Так же вносим изменения в www\catalog\model\account\customer.php

для функции public function addCustomer($data) необходимо добавить возвращение id нового пользователя после

if (!$this->config->get('config_customer_approval')) {
			$this->db->query("UPDATE " . DB_PREFIX . "customer SET approved = '1' WHERE customer_id = '" . (int)$customer_id . "'");
		}
добавляем

return $customer_id;

После этого модификация готова к работе. Все старые покупатели будут отображаться с крестиками в админке до тех пор пока Вы не внесете изменения в базу по каждому пользователю ( Уточнение от majdan

UPDATE: 30.11.2011.

Со слов majdan и viones c небольшими доработками full-версия (первый вариант) работает и на opencart 1.4.9.3.

необходимые доработки:

В файле admin\controller\sale\customer.php необходимо заменить на 329 строке:

'name' => $result['pname'],
на
'name' => $result['name'],

Возможные ToDo:

добавление функционала активации ранее зарегистрированных пользователей из админки (натолкнул на мысль majdan)

отсылание на почту администратору сообщения о подтверждении пользователем почты, для дальнейшей активации.

изменение метода создания ссылки активации, в данный момент используется "мало данных".

Замечания и предложения по изменениям имеет смысл публиковать в этой теме.

Изменено пользователем Conwell
  • +1 7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полезная штука. Отличный мануал.

Буду ставить...

Могу сказать только одно. СПАСИБО! ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот, дошли руки, до этой модификации.

К сожалению я не смог поверить её. Вот что пишет:

Изображение

P.S. Ставил на версию ocStore 0.1.9

Добавляем проверку на подтвержденный e-mail в файле www\system\library\login.php

в функции public function login($email, $password) делаем дополнительную проверку для выборки из базы:

login.php Здесь название файла правильное, или customer.php

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Самый первый пункт - модификация базы не сделан. Поэтому и ошибка происходит при обращении к базе с невозможностью добавить в поле которого нет.

login.php Здесь название файла правильное, или customer.php

да, спасибо за уточнение. Правильное название файла все же customer.php

Сделал изменения в основном посте. Видимо написание ночью все же дает свои минусы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге, мы внесли изменения и подготовили движок для подключения написанных мной дополнений, которые лежат в аттаче.

файл activation_full.zip содержит все файлы которые были изменены в данной модификации для получения работоспособного варианта необходимо будет только сделать изменения в базе, встает на ocStore v2.2. и сделано на его основе.

файл activation_only.zip содержит ТОЛЬКО написанные мной дополнения, все необходимые действия описаны выше.

Возможные ToDo:

отсылание на почту администратору сообщения о подтверждении пользователем почты, для дальнейшей активации.

изменение метода создания ссылки активации, в данный момент используется "мало данных".

Замечания и предложения по изменениям имеет смысл публиковать в этой теме.

Уважаемый Conwell, так дайте инструкцию, как додклать до конца!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый Conwell, так дайте инструкцию, как додклать до конца!

Не совсем понял, какую инструкцию, и что надо доделать до конца?

Инструкция по установке описана целиком в первом посте темы. Если возникли дополнительные вопросы, тогда имеет смысл их конкретизировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем понял, какую инструкцию, и что надо доделать до конца?

Инструкция по установке описана целиком в первом посте темы. Если возникли дополнительные вопросы, тогда имеет смысл их конкретизировать.

Ну так вот, сделал, ВСЁ, как описано, однако: на e-mail приходит ссылка, как будто всё зарегистрировано, зато в админке стоит значок - крестик, то есть пользователь неактивирован!!!

Движок 1.4.9.3

Что делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так вот, сделал, ВСЁ, как описано, однако: на e-mail приходит ссылка, как будто всё зарегистрировано, зато в админке стоит значок - крестик, то есть пользователь неактивирован!!!

Движок 1.4.9.3

Что делать?

наверное это моя ошибка, что я не указал в названии темы что это работает только на ocStore 0.2.2 на версии opencart 1.4.9.3 данный функционал не проверялся.

Хотя в теме написано - "встает на ocStore v2.2. и сделано на его основе".

Исправил сие упущение - поправил название темы с "Активация пользовательского e-mail" на "Активация пользовательского e-mail в ocStore 0.2.2"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверное это моя ошибка, что я не указал в названии темы что это работает только на ocStore 0.2.2 на версии opencart 1.4.9.3 данный функционал не проверялся.

Хотя в теме написано - "встает на ocStore v2.2. и сделано на его основе".

Исправил сие упущение - поправил название темы с "Активация пользовательского e-mail" на "Активация пользовательского e-mail в ocStore 0.2.2"

Спасибо тебе, дорогой Conwell, блин-н-ннн: столько времени убил ни за что!!! ОБИДНО!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо тебе, дорогой Conwell, блин-н-ннн: столько времени убил ни за что!!! ОБИДНО!!!

Уважаемый, но ведь не написано что это будет работать в opencart 1.4.9.3? так? так. Почему тогда не спросили перед тем как делать изменения? За спрос денег не берут :)

Да и время потрачено не зря, ибо опыт - его не пропьешь! На основе каких файлов делались изменения activation_full.zip или activation_only.zip ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый, но ведь не написано что это будет работать в opencart 1.4.9.3? так? так. Почему тогда не спросили перед тем как делать изменения? За спрос денег не берут :)

Да и время потрачено не зря, ибо опыт - его не пропьешь! На основе каких файлов делались изменения activation_full.zip или activation_only.zip ?

Да я ведь без обид!!!

И так пробовал, и так!

Мало того, еще и другие варианты пробовал, и смешивал их...

Главное, что я понял: все пашет, да вот только не гененрируется код для подтверждения мыла...

Хотя, не знаю, с чем связать: в ряде вчерашних опытов вдруг "проскочил" успешный вариант: генерировались коды активации в мылах!!! Правда, не знаю, как уж получилось, поскольку сыроват-с я еще в сией системе...

Кстати, почему я так болею этой проблемой!

Да потому, что ежедневно кучу дурацких подписчиков приходится 2выбрасывать" из магазина!!! Ладно, если бы только регистрировались по-дурному, так они же ведь и заказы делают на дикие суммы!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что генерируется? просто при регистрации пользователя все равно генерируется письмо с логином пользователю значит что-то все равно должно уходить, если нет ссылки только - то не сделан вот этот пункт:

после чего делаем изменения чуть дальше, заменяем строку 41 в www\catalog\controller\account\create.php

$message .= HTTPS_SERVER . 'index.php?route=account/login' . "\n\n";
на

$message .= HTTPS_SERVER . 'index.php?route=activation/email&activation='.md5($new_customer_id).
'&email='.$this->request->post['email'].'
'. "\n\n";
кроме этого возможно забыты изменения в модели создания пользователя добавить вывод $customer_id:

Так же вносим изменения в www\catalog\model\account\customer.php

для функции public function addCustomer($data) необходимо добавить возвращение id нового пользователя

где-то на 28-ой строке добавляем

return $customer_id;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что генерируется?...

Во-первых, видимо зря Вы изменили название темы: как я писал, одна из моих проб увенчалась успехом, то есть - на 1.4.9.3 однозначно работает!

Зато, и это особенно обидно, я не знаю, как уж это получилось.

Я все опыты делал на Денвере, чтообы не дай бог не напартачить сразу на сайте.

Так вот, письмо с той виртуалки, где получилось, выглядит так:

Изображение

И, естественно, активация происходит великолепно. (Кстати, пользователей, которые УЖЕ были зарегистрированы надо ручками в mysql активизировать, но это, впрочем и нетрудно!)

Я очень обрадовался, но поскольку получилось случайно, решил четко все сделать еще раз, чтобы смело ввести систему в на сайте.

УСЁ: сколько ни пытаюсь, как ни извращаюсь, получаю в письме вот так:

Изображение

и, конечно, войти в кабинет не представляется возможным.

Блин, вот пишу сейчас и вдруг подумал: а не ошибся ли я?

Я до сего момента считал, что файлы activation_full.zip - сие есть внесение автоматом описанных Вами 13-го в 22:39 изменений в файлах.

И делал опыты на основании этого.

Зато ТАМ, ГДЕ РАБОТАЕТ - я делал изменения вручную, как у Вас описано. Правда, ничего не получилось, поэтому я и написал просьбу о помощи.

Ну, так как не получилось, я "впендюрил" поверху и activation_full.zip, и дополнительно еще и мульку replyto.rar

И вот не знаю, на каком этапе, и как - но получилось!

Вот я сейчас и хочу спросить: Ваше описание ручного ввода изменений и файлы activation_full.zip - есть одно и то же, или нет?

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

majdan ух... похоже Вы единственный, кто решил в этом разобраться, за все это время. Пересмотрел сейчас файлик activation_full.zip получается я туда не доложил catalog\controller\account\create.php с изменениями. Поэтому оно и не работало.

То есть не хватало изменений:

не забыв добавить переменную в www\catalog\language\russian\mail\account_create.php

$_['text_approve_email'] = 'Ваш аккаунт создан и Вам необходимо подтвердить свой E-mail пройдя по ссылке:';
после чего делаем изменения чуть дальше, заменяем строку 41 в www\catalog\controller\account\create.php

$message .= HTTPS_SERVER . 'index.php?route=account/login' . "\n\n";
на

$message .= HTTPS_SERVER . 'index.php?route=activation/email&activation='.md5($new_customer_id).
'&email='.$this->request->post['email'].'
'. "\n\n";
Спасибо за помощь, буду сегодня править первый пост для правильного создания активации пользователей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

majdan ух... похоже Вы единственный, кто решил в этом разобраться, за все это время. Пересмотрел сейчас файлик activation_full.zip получается я туда не доложил catalog\controller\account\create.php с изменениями. Поэтому оно и не работало...

Нет, что-то не то, потому как теперь после нажатия кнопки регистрации получил белый экран с написью:

Notice: Undefined variable: new_customer_id in Z:\home\poligon\www\catalog\controller\account\create.php on line 41Warning: Cannot modify header information - headers already sent by (output started at Z:\home\poligon\www\index.php:92) in Z:\home\poligon\www\system\engine\controller.php on line 27

Правда, я сейчас ничего не переделывал после внедрения всех возможных дополнений: вручную + activation_full + activation_only + replyto.

Теперь у меня три вопроса:

1/всё-таки, ручной ввод изменений усть то же самое, что и activation_full?

2/что мне делать: пробовать по новой на чистую систему вручную вводить изменения, или подождать?

3/что это за мулька replyto.rar (не помню, откуда ее скачал), и почему все-таки, у меня один пробный сайт нормально работает с активацией email?

Заранее благодарю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правда, я сейчас ничего не переделывал после внедрения всех возможных дополнений: вручную + activation_full + activation_only + replyto.

Теперь у меня три вопроса:

1/всё-таки, ручной ввод изменений усть то же самое, что и activation_full?

2/что мне делать: пробовать по новой на чистую систему вручную вводить изменения, или подождать?

3/что это за мулька replyto.rar (не помню, откуда ее скачал), и почему все-таки, у меня один пробный сайт нормально работает с активацией email?

Заранее благодарю!

Шапка исправлена там теперь актуальная информация и актуальные вложенные файлы.

А теперь отвечаю по порядку:

1. ручной ввод изменений - теперь тоже самое что уже сделано мной в activation_full.zip.

2. можно попробовать новый первый вариант должно заработать, во всяком случае у меня это заработало.

3. Что за мулька не представляю совершенно, первый раз про нее слышу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CONWELL,ОГРОМНОЕ ВАМ СПАСИБО!!!

Я воспользовался методом activation_full - заработало.

Правда, у меня почему-то некоторые сообщения не того...

1. После введения данных и нажатия кнопки регистрации, сообщение на сайте имеет вид:

Изображение

Эту проблемку решил так: внес соответствующее изменение текстового сообщения $_['text_message'] в файле success.php (уж не знаю, правильно ли я сделал, или нет!)

Зато не знаю, как решить другую проблемку: в письме с активационной ссылкой содержится не совсем то, что надо:

Ваш аккаунт создан и Вы можете войти используя Ваш E-mail и пароль, посетив наш сайт по адресу:

(здесь работающая активационная ссылка)

После регистрации на сайте, Вы сможете воспользоваться дополнительными возможностями: просмотр истории заказов, печать счета, изменение информации Вашей учетной записи и др.

Спасибо,

Прошу помощи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. После введения данных и нажатия кнопки регистрации, сообщение на сайте имеет вид:

Эту проблемку решил так: внес соответствующее изменение текстового сообщения $_['text_message'] в файле success.php (уж не знаю, правильно ли я сделал, или нет!)

Зато не знаю, как решить другую проблемку: в письме с активационной ссылкой содержится не совсем то, что надо:

Прошу помощи!

1. правильно сделали. надо менять языковые файлы.

2. во первых, надо включить активацию пользователей в админке. тогда в письме сменится текст с $_['text_login'] на $_['text_approve_email'] в файле www\catalog\language\russian\mail\account_create.php , а во вторых, править дальше этот файл если какие-то формулировки не нравятся :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю!

OC Version 1.4.9.3 Полёт нормальный.

Notice: Undefined index: pname in

\admin\controller\sale\customer.php on line 329

'name' => $result['pname'], исправил на

'name' => $result['name'],

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

viones, это из-за разницы версий опенкарта 1.4.9.3 и ocStore 0.2.2, внесу, наверное, дополнения в шапку.

Правда об этом ранее еще упоминал majdan.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3/что это за мулька replyto.rar (не помню, откуда ее скачал), и почему все-таки, у меня один пробный сайт нормально работает с активацией email?

3. Что за мулька не представляю совершенно, первый раз про нее слышу.

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=1422&filter_search=replyto&sort=e.date_modified&order=DESC

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если позволите одно личиное пожелание/замечание!

1. После введения данных и нажатия кнопки регистрации, сообщение на сайте имеет вид(можно отредактировать.)

Изображение

Очень замечательно было бы кнопку Вперёд, убрать/переставить на страницы что открывается с майла(с той же функцией),вывод логина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

Я тоже решил попробовать поставить активацию на версии ocstore 1.5.1.3 :)

Честно скажу, измучился. И так и эдак, но никак. Код сильно отличается. В новой версии даже файлов некоторых нет.

create, например. Правда у меня архивы почему-то другие. Может быть в этом дело.

Я, конечно, еще попробую ее запустить, но уверенности нет, что получится. Слаб я в знаниях еще.

Одна надежда, что архив у меня был кривой и на основе нового, взятого здесь, у меня может получится.

PS. Дорогой и уважаемый автор данного плагина, если не лень, выложите вариант под последнюю версию!

Заранее большое спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А кто делал те же манипуляции с 1.5.4.1?

Пытаюсь настроить модуль, но пока уперся в то, не приходит E-mail  с подтверждением.

Если кто нибудь делал на последних версиях, поделитесь решением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день!

Подскажите, пожалуйста, были ли какие-то доработки? на OpenCart 2.1.0.1.5 есть шанс, что станет? или совсем другая структура?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.