gf 1.0.1 + AcyMailing Starter 5.5.0 + Joomla! 3.6.5
Сделал себе, может кому понадобится: заносим из формы ФИО и мыло (если такие данные конечно присутствуют в форме) в рассылочную базу подписчиков AcyMailing.
В файле components\com_quickform\quickform.php ищем самую последнюю строку и делаем 2 вставки, перед этой строкой и после неё:
$jAp->redirect($link, $msg, $msgtype);
1) перед этой строкой вставляем:
// AcyMailing
//echo $mailHtml;
$newmailHtml = $mailHtml;
$newmailHtmltd = "<td>";
$newmailHtml = str_replace ($newmailHtmltd,"|", str_replace ( "</td>","|", $newmailHtml));
// Массив возможных названий полей фамилий в анкете
$newusersurnamesearch = "Sur Name|Sur name|Surname|surname|Фамилия|Прізвище|ФИО|Ф.И.О|ФИО плательщика";
$newusersurnamearray = explode ( "|", $newusersurnamesearch);
foreach($newusersurnamearray as $usersn) {
$u = strpos ( $newmailHtml,$usersn);
$uu = strpos ( $newmailHtml,$usersn." ");
if (($u > 0) and ($uu == 0)) {
$newusersurname = substr($newmailHtml,$u);
$newusersurname = substr($newusersurname,strpos ($newusersurname, "|") + 1);
$newusersurname = substr($newusersurname,0,strpos($newusersurname, "|"));
echo "Фамилия: ". $newusersurname. "<br/>";
break;
}
}
// Массив возможных названий полей имен в анкете
$newusernamesearch = "First Name|First name|Имя|Имя, отчество|Ім'я|Ім'я (по батькові)|Ім'я, по батькові";
$newusernamearray = explode ( "|", $newusernamesearch);
foreach($newusernamearray as $useri) {
$u = strpos ( $newmailHtml,$useri);
$uu = strpos ( $newmailHtml,$useri." ");
if (($u > 0) and ($uu == 0)) {
$newusername = substr ($newmailHtml,$u);
$newusername = substr ($newusername,strpos ( $newusername, "|") + 1);
$newusername = substr($newusername,0,strpos ( $newusername, "|"));
echo "Имя: ". $newusername. "<br/>";
break;
}
}
// Массив возможных названий полей отчеств в анкете
$newuserpatronymicsearch = "Patronymic|Отчество|По батькові";
$newuserpatronymicarray = explode ( "|", $newuserpatronymicsearch);
foreach($newuserpatronymicarray as $userp) {
$u = strpos ( $newmailHtml,$userp);
$uu = strpos ( $newmailHtml,$userp." ");
if (($u > 0) and ($uu == 0)) {
$newuserpatronymic = substr ($newmailHtml,$u);
$newuserpatronymic = substr ($newuserpatronymic,strpos ( $newuserpatronymic, "|") + 1);
$newuserpatronymic = substr($newuserpatronymic,0,strpos ( $newuserpatronymic, "|"));
echo "Отчество: ". $newuserpatronymic. "<br/>";
break;
}
}
// Получаем ФИО из формы
$newusersname = $newusersurname. " ". $newusername. " ". $newuserpatronymic;
//die;
// Массив возможных названий полей email в анкете
$newuserfonesearch = "Ваш email|Ваш e-mail|Email|email|E-mail|e-mail|";
$newuserfonearray = explode ( "|", $newuserfonesearch);
foreach($newuserfonearray as $userm) {
$u = strpos ( $newmailHtml,$userm);
$uu = strpos ( $newmailHtml,$userm." ");
if (($u > 0) and ($uu == 0)) {
$newusersemail = substr ($newmailHtml,$u);
$newusersemail = substr ($newusersemail,strpos ( $newusersemail, "|") + 1);
$newusersemail = substr($newusersemail,0,strpos ( $newusersemail, "|"));
echo "E-mail: ". $newusersemail. "<br/>";
break;
}
}
// Формируем данные для записи в базу AcyMailing
$newusersname = "'". strip_tags ( $newusersname). "'";
$newuserskey = "'". quickform_generateKey(14). "'";
$newuserssource = "'"."module_96"."'";
$newusersdate = "'". round(gettimeofday(true))."'";
$newusersip = "'".$qfCheck->getip()."'";
$newusersemail = "'". strip_tags($newusersemail). "'";
//echo "Подписчик: ". $newusersname." ". $newusersemail;
//die;
$query = $db->getQuery(true);
$query->select('*');
$query->from($db->quoteName('#__acymailing_subscriber'));
$query->where($db->quoteName('email')." = "."'".$post['email'][0]."'");
$db->setQuery($query);
$newuser = $db->loadObjectList();
// Если email в базе AcyMailing отсутствует, добавляем нового подписчика
if (empty($newuser)) {
// добавляем подписчика в базу
$db->setQuery(" INSERT INTO `#__acymailing_subscriber` (`email`,`name`,`created`,`ip`,`source`,`key`) VALUES ($newusersemail,$newusersname,$newusersdate,$newusersip,$newuserssource,$newuserskey)");
$db->query();
// Получаем данные о новом подписчике
$query = $db->getQuery(true);
$query->select('*');
$query->from($db->quoteName('#__acymailing_subscriber'));
$query->where($db->quoteName('email')." = ".$newusersemail);
$db->setQuery($query);
$newuser = $db->loadRow();
if (!empty($newuser)) {
// listID рассылки из _acymailing_list, на которую будет подписан подписчик
$newuserslistid = "2";
//$newuserslistid = "'".$newuserslistid."'" ;
$newuserssubid = "'".$newuser[0]."'";
$newuserstatus = "1";
//echo $newuserssubid;
//die;
// Подписываем на рассылку
$db->setQuery(" INSERT INTO `#__acymailing_listsub` (`listid`,`subid`,`subdate`,`status`) VALUES ($newuserslistid,$newuserssubid,$newusersdate,$newuserstatus)");
$db->query();
}
}
2) а после неё вставляем:
function quickform_generateKey($length){
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
$max = strlen($characters) - 1;
for($i = 0; $i < $length; $i++){
$randstring .= $characters[mt_rand(0, $max)];
}
return $randstring;
}
Срабатывать будет на определенные заголовки полей в форме, дополните своими, если надо...:
$newusersurnamesearch = "sur name|фамилия|прізвище|ФИО|Ф.И.О";
$newusernamesearch = "first name|имя|имя, отчество|ім'я|ім'я (по батькові)|ім'я, по батькові";
$newuserpatronymicsearch = "patronymic|отчество|по батькові";
ID рассылки берется из _acymailing_list:
$newuserslistid = "2";
Все конечно через заднюю калитку, но полезно.