Модуль "Заказать звонок" (callbackbukleta)

Заменить код файла /modules/callbackbukleta/callbackbukleta.php на этот

PHP

<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Callbackbukleta
{
public static function show()
{
$show_modal = 0;
if (!empty($_POST['callbackbukleta'])) {
$aCallbackbukleta = Core_Config::instance()->get('callbackbukleta_config');
if (empty($_SESSION['callbackbukleta-timeout']) or ($_SESSION['callbackbukleta-timeout'] + (60 * $aCallbackbukleta['time_wait'])) < time()) {
if (self::_saveContact($_POST) === true) {
$alert = "Ваша заявка принята";
} elseif (self::_saveContact($_POST) == 2) {
$alert = "Не верно введен код с картинки";
$show_modal = 1;
} elseif (self::_saveContact($_POST) == 2.1) {
$alert = "Вы не прошли проверку, попробуйте ещё раз.";
$show_modal = 1;
} elseif (self::_saveContact($_POST) == 3) {
$alert = "Не правильно введен телефонный номер";
$show_modal = 1;
}
} else {
$alert = "Следующее сообщение можно отправить через {$aCallbackbukleta['time_wait']} минут.";
}
require_once CMS_FOLDER . 'modules/callbackbukleta/template/alert.htm';
}
$captcha_id = Core_Captcha::getCaptchaId();
require_once CMS_FOLDER . 'modules/callbackbukleta/template/template.htm';
self::_clearAudio();
}
private static function _saveContact($aPost)
{
if ($aPost = Core_Array::get($aPost, 'callbackbukleta')) {
$aCallbackbukleta = Core_Config::instance()->get('callbackbukleta_config');
if (!empty($aCallbackbukleta['show_captcha']) && $aCallbackbukleta['show_captcha'] == 1) {
if(!empty($aCallbackbukleta['show_recaptcha'])) {
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . $aCallbackbukleta['recaptcha_secretkey'] . '&response=' . (array_key_exists('g-recaptcha-response', $_POST) ? $_POST["g-recaptcha-response"] : '') . '&remoteip=' . $_SERVER['REMOTE_ADDR'];
$resp = json_decode(file_get_contents($url), true);
if ($resp['success'] == false) {
return 2.1;
}
}
elseif (!Core_Captcha::valid($aPost['captcha_id'], $aPost['captcha_val'])) {
return 2;
}
}
$phone_mask = preg_replace("/[^0-9]/", '', $aCallbackbukleta['phone_mask']);
$phone = preg_replace("/[^0-9]/", '', $aPost['phone']);
if( mb_strlen($phone_mask) != mb_strlen($phone)) {
return 3;
}
$oCallbackbukleta = Core_Entity::factory('Callbackbukleta');
$oCallbackbukleta->phone = $aPost['phone'];
if (!empty($aPost['name'])) {
$oCallbackbukleta->name = $aPost['name'];
}
if (!empty($aPost['email'])) {
$oCallbackbukleta->email = $aPost['email'];
}
if(!empty($aPost['audiofile'])) {
$oCallbackbukleta->audiofile = $aPost['audiofile'];
}
$oCallbackbukleta->datetime = date('Y-m-d H:i:s', time());
if ($oCallbackbukleta->save()) {
if(!empty($oCallbackbukleta->audiofile)) {
if(!is_dir(CMS_FOLDER.'upload/callbackbukleta')) {
mkdir(CMS_FOLDER.'upload/callbackbukleta');
}
$aAudiofile = explode('/', $oCallbackbukleta->audiofile);
$sAudiofile = array_pop($aAudiofile);
copy(CMS_FOLDER.$oCallbackbukleta->audiofile, CMS_FOLDER.'upload/callbackbukleta/'.$sAudiofile);
$oCallbackbukleta->audiofile = '/upload/callbackbukleta/'.$sAudiofile;
$oCallbackbukleta->save();
}
if (!empty($aCallbackbukleta['email_notification']) && self::_isValidEmail($aCallbackbukleta['email_notification'])) {
if (!empty($oCallbackbukleta->name)) {
$message .= 'ФИО: ' . $oCallbackbukleta->name . "\n";
}
$message .= 'Телефон: ' . $oCallbackbukleta->phone . "\n";
if (!empty($oCallbackbukleta->email)) {
$message .= 'Email: ' . $oCallbackbukleta->email . "\n";
}
if (!empty($oCallbackbukleta->audiofile)) {
$message .= 'Ссылка на аудиосообщение <a href="//'. $_SERVER['SERVER_NAME']. $oCallbackbukleta->audiofile . '">Открыть</a>\n';
}
$message .= 'Время запроса: ' . date('H:i:s d.m.Y', strtotime($oCallbackbukleta->datetime));
Core_Mail::instance()
->to($aCallbackbukleta['email_notification'])
->from(!empty($aCallbackbukleta['from_email'])?$aCallbackbukleta['from_email']:false)
->subject("Заказ обратного звонка " . $_SERVER['SERVER_NAME'])
->message($message)
->contentType('text/plain')
->header('X-HostCMS-Reason', 'Alert')
->header('Precedence', 'bulk')
->send();
if (!empty($aCallbackbukleta['sms_enable']) && $aCallbackbukleta['sms_enable'] == 1) {
self::_sendSms($message);
}
}
$_SESSION['callbackbukleta-timeout'] = time();
return true;
} else {
return false;
}
} else {
return false;
}
}
private static function _sendSms($message)
{
$aCallbackbukleta = Core_Config::instance()->get('callbackbukleta_config');
$sms_login = $aCallbackbukleta['sms_login'];
$sms_password = $aCallbackbukleta['sms_password'];
$sms_phone = $aCallbackbukleta['sms_phone'];
if (!empty($sms_login) && !empty($sms_password) && !empty($sms_phone)) {
require_once 'smsc_api.php';
send_sms($sms_phone, $message);
}
}
private static function _isValidEmail($email)
{
if (!function_exists('filter_var')) {
if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email)) {
return true;
}
else {
return false;
}
}
else {
return filter_var($email, FILTER_VALIDATE_EMAIL);
}
}
private static function _clearAudio(){
$aFile = scandir(CMS_FOLDER.'/modules/callbackbukleta/audiofiles');
if(!empty($aFile)) {
foreach ($aFile as $sFile) {
if (strstr($sFile, 'wav')) {
$aFilestr = explode('-', $sFile);
$sTime = $aFilestr[1];
//Удаляем все файлы, которые хранятся больше 20 минут.
if ($sTime < (time() - 60 * 20) ) {
echo CMS_FOLDER . '/modules/callbackbukleta/audiofiles/' . $sFile;
unlink(CMS_FOLDER . '/modules/callbackbukleta/audiofiles/' . $sFile);
}
}
}
}
}
}
php

Ошибка в модуле Редиректы

Ошибка

 Query error 1048: Column 'informationsystem_group_id' cannot be null. Query: INSERT INTO `redirects` (`deleted`, `site_id`, `old_url`, `type`, `new_url`, `active`, `informationsystem_id`, `informationsystem_item_id`, `informationsystem_group_id`, `shop_id`, `shop_group_id`, `shop_item_id`, `referer`) VALUES (0, '1', '/old_url/123', '1', '', 0, '1', '0', NULL, '1', '0', '0', '')
 35 modules/core/exception.php
 641 modules/core/database/mysql.php
 60 modules/core/querybuilder/statement.php
 1450 modules/core/orm.php
 550 modules/core/entity.php
 532 modules/redirect/model.php
 1520 modules/core/orm.php
 363 modules/redirect/model.php
 578 modules/admin/form/action/controller/type/edit.php
 357 modules/redirect/controller/edit.php
 488 modules/admin/form/action/controller/type/edit.php
 408 modules/redirect/controller/edit.php
 1080 modules/admin/form/controller.php
 196 admin/redirect/index.php
Решения

1. открыть /admin/redirect/index.php
2. найти $groups = $oInformationsystem_Item_Controller_Edit->fillInformationsystemGroup(Core_Array::getGet('informationsystem_id'), 0);
3. заменить на  $groups = array('...') + $oInformationsystem_Item_Controller_Edit->fillInformationsystemGroup(Core_Array::getGet('informationsystem_id'), 0);

4. перекачать архив, заменить файл modules/redirect/controller/edit.php
выполнить запрос
ALTER TABLE `redirects`
    CHANGE COLUMN `informationsystem_id` `informationsystem_id` INT(11) NULL DEFAULT '0' AFTER `site_id`,
    CHANGE COLUMN `informationsystem_item_id` `informationsystem_item_id` INT(11) NULL DEFAULT '0' AFTER `informationsystem_id`,
    CHANGE COLUMN `informationsystem_group_id` `informationsystem_group_id` INT(11) NULL DEFAULT '0' AFTER `informationsystem_item_id`,
    CHANGE COLUMN `shop_id` `shop_id` INT(11) NULL DEFAULT '0' AFTER `referer`,
    CHANGE COLUMN `shop_group_id` `shop_group_id` INT(11) NULL DEFAULT '0' AFTER `shop_id`,
    CHANGE COLUMN `shop_item_id` `shop_item_id` INT(11) NULL DEFAULT '0' AFTER `shop_group_id`;
5.  Перекачайте архив и замените файл modules/redirect/model.php файлом из архива
php