public static function createDB($client_id) { $cfg = erConfigClassLhConfig::getInstance(); self::deleteDB($client_id); $db = ezcDbInstance::get(); $db->query('CREATE DATABASE ' . $cfg->getSetting('db', 'database_user_prefix') . $client_id . ';'); }
public function __construct() { $this->memcache = new Memcache(); $hosts = erConfigClassLhConfig::getInstance()->getSetting('memecache', 'servers'); foreach ($hosts as $server) { $this->memcache->addServer($server['host'], $server['port'], $server['weight']); } }
public static function createDB($client_id) { $cfg = erConfigClassLhConfig::getInstance(); $sock = new HTTPSocket(); $sock->connect('ssl://' . $cfg->getSetting('site', 'direct_admin_ip'), $cfg->getSetting('site', 'direct_admin_port')); $sock->set_login($cfg->getSetting('site', 'direct_admin_user'), $cfg->getSetting('site', 'direct_admin_pass')); $sock->set_method('POST'); $sock->query('/CMD_API_DATABASES', array('action' => 'create', 'name' => "client{$client_id}", 'userlist' => $cfg->getSetting('site', 'direct_admin_dbuser'), 'passwd' => $cfg->getSetting('site', 'direct_admin_dbpass'), 'passwd2' => $cfg->getSetting('site', 'direct_admin_dbpass'))); return $sock->fetch_body(); }
public function __construct() { try { $params = erConfigClassLhConfig::getInstance()->getSetting('redis', 'server'); $this->redis = new Redis(); $this->redis->connect($params['host'], $params['port'], 2.5); $this->redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); } catch (Exception $e) { // Do nothing } }
public static function updateSiteAccess(stdClass $input) { $languages = self::getLanguages(); $languageData = $languages[$input->language]; $siteAccessData = erConfigClassLhConfig::getInstance()->getSetting('site_access_options', $input->siteaccess); $siteAccessData['locale'] = $languageData['locale']; $siteAccessData['content_language'] = $languageData['content_language']; $siteAccessData['dir_language'] = $languageData['dir_language']; $siteAccessData['theme'] = self::trimArrayElements(explode("\n", trim($input->theme))); $siteAccessData['default_url']['module'] = $input->module; $siteAccessData['default_url']['view'] = $input->view; $cfgSite = erConfigClassLhConfig::getInstance(); $cfgSite->setSetting('site_access_options', $input->siteaccess, $siteAccessData); $cfgSite->save(); }
public static function setupInstance($db) { if (isset($_SERVER['HTTP_HOST'])) { $cfg = erConfigClassLhConfig::getInstance(); $subdomain = str_replace('.' . $cfg->getSetting('site', 'seller_domain'), '', $_SERVER['HTTP_HOST']); $items = erLhcoreClassModelInstance::getList(array('filter' => array('address' => $subdomain))); if (!empty($items)) { erLhcoreClassInstance::$instanceChat = array_shift($items); $db->query('USE ' . $cfg->getSetting('db', 'database_user_prefix') . erLhcoreClassInstance::$instanceChat->id); } else { header('Location: ' . $cfg->getSetting('site', 'seller_url')); exit; } } }
public static function setupInstance($db) { if (isset($_SERVER['HTTP_HOST'])) { $cfg = erConfigClassLhConfig::getInstance(); $subdomain = str_replace('.' . $cfg->getSetting('site', 'seller_domain'), '', $_SERVER['HTTP_HOST']); $session = erLhcoreClassInstance::getSession(); $q = $session->createFindQuery('erLhcoreClassModelInstance'); $q->where($q->expr->eq('address', $q->bindValue($subdomain)) . ' OR (full_domain = 1 AND ' . $q->expr->eq('address', $q->bindValue($_SERVER['HTTP_HOST'])) . ')'); $items = $session->find($q); if (!empty($items)) { erLhcoreClassInstance::$instanceChat = array_shift($items); $db->query('USE ' . $cfg->getSetting('db', 'database_user_prefix') . erLhcoreClassInstance::$instanceChat->id); } else { header('Location: ' . $cfg->getSetting('site', 'seller_url')); exit; } } }
/** * Arguments * array('chat' => & $chat) * */ public function sevabot($params) { $settings = (include 'extension/sevabot/settings/settings.ini.php'); // Format message content $chat = $params['chat']; $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 5, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); $chatDataItems = $settings['chat']; if (isset($settings['chat_dep'][$chat->dep_id]) && !empty($settings['chat_dep'][$chat->dep_id])) { $chatDataItems = array_merge($chatDataItems, $settings['chat_dep'][$chat->dep_id]); } // Global notifications foreach ($chatDataItems as $chatData) { $veryfyEmail = sha1(sha1($chatData['email'] . $secretHash) . $secretHash); $msgParsed = str_replace(array('{messages}', '{url_accept}', '{chat_id}', '{user_name}'), array($messagesContent, erLhcoreClassXMP::getBaseHost() . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $chatData['email'], $chat->id, $chat->user_name), $settings['msg']); $md5 = md5($chatData['chat_id'] . $msgParsed . $settings['sevabot_secret']); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $settings['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('md5' => $md5, 'msg' => $msgParsed, 'chat' => $chatData['chat_id'])); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Some hostings produces wargning... $content = curl_exec($ch); if ($content != 'OK') { erLhcoreClassLog::write(print_r($content, true)); } } }
?> </div> </div> <?php } ?> </div> <?php } ?> </div> <?php include_once erLhcoreClassDesign::designtpl('pagelayouts/parts/page_footer.tpl.php'); ?> </div> </div> <?php if (erConfigClassLhConfig::getInstance()->getSetting('site', 'debug_output') == true) { $debug = ezcDebug::getInstance(); echo $debug->generateOutput(); } ?> </body> </html>
{ ezcBase::autoload($className); } ezcBase::addClassRepository(dirname(__FILE__) . '/', dirname(__FILE__) . '/lib/autoloads'); $input = new ezcConsoleInput(); $helpOption = $input->registerOption(new ezcConsoleOption('s', 'siteaccess', ezcConsoleInput::TYPE_STRING)); $cronjobPartOption = $input->registerOption(new ezcConsoleOption('c', 'cronjob', ezcConsoleInput::TYPE_STRING)); $cronjobPathOption = $input->registerOption(new ezcConsoleOption('p', 'path', ezcConsoleInput::TYPE_STRING)); $extensionPartOption = $input->registerOption(new ezcConsoleOption('e', 'extension', ezcConsoleInput::TYPE_STRING)); try { $input->process(); } catch (ezcConsoleOptionException $e) { die($e->getMessage()); } ezcBaseInit::setCallback('ezcInitDatabaseInstance', 'erLhcoreClassLazyDatabaseConfiguration'); $instance = erLhcoreClassSystem::instance(); $instance->SiteAccess = $helpOption->value; $instance->SiteDir = dirname(__FILE__) . '/'; $cfgSite = erConfigClassLhConfig::getInstance(); $defaultSiteAccess = $cfgSite->getSetting('site', 'default_site_access'); $optionsSiteAccess = $cfgSite->getSetting('site_access_options', $helpOption->value); $instance->Language = $optionsSiteAccess['locale']; $instance->ThemeSite = $optionsSiteAccess['theme']; $instance->WWWDirLang = '/' . $helpOption->value; // php cron.php -s site_admin -c cron/workflow // php cron.php -s site_admin -e customstatus -c cron/customcron if ($extensionPartOption->value) { include_once 'extension/' . $extensionPartOption->value . '/modules/lh' . $cronjobPartOption->value . '.php'; } else { include_once 'modules/lh' . $cronjobPartOption->value . '.php'; }
<?php /** * Iterates through all instances and executes callback timeout * At the moment it's a simple foreach. In the future we may need to enahance this part * with some queues etc. * * php cron.php -s site_admin -e instance -c cron/extensions_update * */ $cfg = erConfigClassLhConfig::getInstance(); $db = ezcDbInstance::get(); foreach (erLhcoreClassModelInstance::getList(array('limit' => 1000000, 'filter' => array('status' => erLhcoreClassModelInstance::WORKING))) as $instance) { echo "Executing request to update instance internal structure for extensions - ", $instance->id, "\n"; $secretHash = $cfg->getSetting('site', 'seller_secret_hash'); $hash = sha1($instance->id . 'extensions' . date('Ym') . $secretHash); if ($instance->full_domain == 1) { $url = erConfigClassLhConfig::getInstance()->getSetting('site', 'http_mode') . $instance->address . '/index.php/instance/extensionsstructure/' . $instance->id . '/' . date('Ym') . '/' . $hash; } else { $url = erConfigClassLhConfig::getInstance()->getSetting('site', 'http_mode') . $instance->address . '.' . $cfg->getSetting('site', 'seller_domain') . '/index.php/instance/extensionsstructure/' . $instance->id . '/' . date('Ym') . '/' . $hash; } $response = erLhcoreClassModelChatOnlineUser::executeRequest($url); echo "Response:\n"; print_r($response); echo PHP_EOL; }
} if ($form->hasValidData('hattr') && !empty($form->hattr)) { $inputData->hattr = $form->hattr; } $inputData->name_items = $form->name_items; $stringParts = array(); foreach ($form->name_items as $key => $name_item) { if (isset($inputData->values_req[$key]) && $inputData->values_req[$key] == 't' && ($inputData->value_show[$key] == 'b' || $inputData->value_show[$key] == (isset($additionalParams['offline']) ? 'off' : 'on')) && (!isset($valuesArray[$key]) || trim($valuesArray[$key]) == '')) { $Errors[] = trim($name_item) . ' : ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'is required'); } $stringParts[] = array('key' => $name_item, 'value' => isset($valuesArray[$key]) ? trim($valuesArray[$key]) : ''); } $chat->additional_data = json_encode($stringParts); } if (erLhcoreClassModelChatConfig::fetch('session_captcha')->current_value == 1) { if (!$form->hasValidData($nameField) || $form->{$nameField} == '' || $form->{$nameField} < time() - 600 || $hashCaptcha != sha1($_SERVER['REMOTE_ADDR'] . $form->{$nameField} . erConfigClassLhConfig::getInstance()->getSetting('site', 'secrethash'))) { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Invalid captcha code, please enable Javascript!'); } } else { // Captcha validation if (!$form->hasValidData($nameField) || $form->{$nameField} == '' || $form->{$nameField} < time() - 600) { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Invalid captcha code, please enable Javascript!'); } } if ($form->hasValidData('operator') && erLhcoreClassModelUser::getUserCount(array('filter' => array('id' => $form->operator, 'disabled' => 0))) > 0) { $inputData->operator = $chat->user_id = $form->operator; } if ($form->hasValidData('user_timezone')) { $timezone_name = timezone_name_from_abbr(null, $form->user_timezone * 3600, true); if ($timezone_name !== false) { $chat->user_tz_identifier = $timezone_name;
<?php $tpl = erLhcoreClassTemplate::getInstance('lhchat/listchatconfig.tpl.php'); if ($currentUser->hasAccessTo('lhchat', 'administrateconfig')) { if (isset($_POST['UpdateConfig'])) { foreach (erLhcoreClassModelChatConfig::getItems() as $item) { $ConfigData = erLhcoreClassModelChatConfig::fetch($item->identifier); switch ($ConfigData->type) { case erLhcoreClassModelChatConfig::SITE_ACCESS_PARAM_ON: $data = array(); foreach (erConfigClassLhConfig::getInstance()->getSetting('site', 'available_site_access') as $siteaccess) { $data[$siteaccess] = $_POST[$item->identifier . 'Value' . $siteaccess]; } $ConfigData->value = serialize($data); break; case erLhcoreClassModelChatConfig::SITE_ACCESS_PARAM_OFF: $ConfigData->value = isset($_POST[$item->identifier . 'ValueParam']) ? $_POST[$item->identifier . 'ValueParam'] : 0; break; default: break; } $ConfigData->saveThis(); } // Cleanup cache to recompile templates etc. $CacheManager = erConfigClassLhCacheConfig::getInstance(); $CacheManager->expireCache(); $tpl->set('updated', 'done'); } } $tpl->set('currentUser', $currentUser); $Result['content'] = $tpl->fetch();
echo htmlspecialchars(erLhcoreClassModelChatConfig::fetch('application_name')->current_value); ?> </title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> <link rel="icon" type="image/png" href="<?php echo erLhcoreClassDesign::design('images/favicon.ico'); ?> " /> <link rel="shortcut icon" type="image/x-icon" href="<?php echo erLhcoreClassDesign::design('images/favicon.ico'); ?> "> <meta name="Keywords" content="" /> <meta name="Description" content="<?php echo erConfigClassLhConfig::getInstance()->getOverrideValue('site', 'description'); ?> " /> <meta name="robots" content="noindex, nofollow"> <?php include_once erLhcoreClassDesign::designtpl('pagelayouts/parts/copyright_meta.tpl.php'); ?> <?php include_once erLhcoreClassDesign::designtpl('pagelayouts/parts/page_head_css.tpl.php'); include_once erLhcoreClassDesign::designtpl('pagelayouts/parts/page_head_css_admin_theme.tpl.php'); include_once erLhcoreClassDesign::designtpl('pagelayouts/parts/page_head_css_extension_multiinclude.tpl.php'); ?> <?php
public static function newChatInformWorkflow($options = array(), &$chat) { $chat->nc_cb_executed = 1; $chat->updateThis(); if (in_array('mail', $options['options'])) { erLhcoreClassChatMail::sendMailUnacceptedChat($chat); } if (in_array('xmp', $options['options'])) { erLhcoreClassXMP::sendXMPMessage($chat); } erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.new_chat', array('chat' => &$chat)); // Execute callback if it exists $extensions = erConfigClassLhConfig::getInstance()->getSetting('site', 'extensions'); $instance = erLhcoreClassSystem::instance(); foreach ($extensions as $ext) { $callbackFile = $instance->SiteDir . '/extension/' . $ext . '/callbacks/new_chat.php'; if (file_exists($callbackFile)) { include $callbackFile; } } }
<?php if (erConfigClassLhConfig::getInstance()->getDirLanguage('dir_language') == 'ltr' || erConfigClassLhConfig::getInstance()->getDirLanguage('dir_language') == '') { ?> <link rel="stylesheet" type="text/css" href="<?php echo erLhcoreClassDesign::designCSS('vendor/bootstrap/css/bootstrap.min.css;vendor/bootstrap/css/bootstrap-theme.min.css;css/app.css;css/override.css;css/fontello.css;css/datepicker.css'); ?> " /> <?php } else { ?> <link rel="stylesheet" type="text/css" href="<?php echo erLhcoreClassDesign::designCSS('vendor/bootstrap/css/bootstrap.min.css;vendor/bootstrap/css/bootstrap-theme.min.css;css/bootstrap-rtl.min.css;css/app.css;css/app-rtl.css;css/override_rtl.css;css/fontello.css;css/datepicker.css'); ?> " /> <?php } echo isset($Result['additional_header_css']) ? $Result['additional_header_css'] : '';
/** * Custom form fields validation */ public static function validateStartChat(&$inputForm, &$start_data_fields, &$chat, $additionalParams = array()) { $validationFields = array(); // Dynamic form field if ($inputForm->validate_start_chat == true) { if (isset($start_data_fields['name_visible_in_popup']) && $start_data_fields['name_visible_in_popup'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_name_visible_in_popup']) && $start_data_fields['offline_name_visible_in_popup'] == true) { $validationFields['Username'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['email_visible_in_popup']) && $start_data_fields['email_visible_in_popup'] == true || isset($additionalParams['offline'])) { $validationFields['Email'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'validate_email'); } if (isset($start_data_fields['message_visible_in_popup']) && $start_data_fields['message_visible_in_popup'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_message_visible_in_popup']) && $start_data_fields['offline_message_visible_in_popup'] == true) { $validationFields['Question'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['phone_visible_in_popup']) && $start_data_fields['phone_visible_in_popup'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_phone_visible_in_popup']) && $start_data_fields['offline_phone_visible_in_popup'] == true) { $validationFields['Phone'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['tos_visible_in_popup']) && $start_data_fields['tos_visible_in_popup'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_tos_visible_in_popup']) && $start_data_fields['offline_tos_visible_in_popup'] == true) { $validationFields['AcceptTOS'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'boolean'); } } else { if (isset($start_data_fields['name_visible_in_page_widget']) && $start_data_fields['name_visible_in_page_widget'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_name_visible_in_page_widget']) && $start_data_fields['offline_name_visible_in_page_widget'] == true) { $validationFields['Username'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['email_visible_in_page_widget']) && $start_data_fields['email_visible_in_page_widget'] == true || isset($additionalParams['offline'])) { $validationFields['Email'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'validate_email'); } if (isset($start_data_fields['message_visible_in_page_widget']) && $start_data_fields['message_visible_in_page_widget'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_message_visible_in_page_widget']) && $start_data_fields['offline_message_visible_in_page_widget'] == true) { $validationFields['Question'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['phone_visible_in_page_widget']) && $start_data_fields['phone_visible_in_page_widget'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_phone_visible_in_page_widget']) && $start_data_fields['offline_phone_visible_in_page_widget'] == true) { $validationFields['Phone'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw'); } if (isset($start_data_fields['tos_visible_in_page_widget']) && $start_data_fields['tos_visible_in_page_widget'] == true && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_tos_visible_in_page_widget']) && $start_data_fields['offline_tos_visible_in_page_widget'] == true) { $validationFields['AcceptTOS'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'boolean'); } } $validationFields['DepartamentID'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'int', array('min_range' => -1)); $validationFields['DepartmentIDDefined'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'int', array('min_range' => 1), FILTER_REQUIRE_ARRAY); $validationFields['operator'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'int', array('min_range' => 1)); $validationFields['user_timezone'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'int'); $validationFields['keyUpStarted'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'int', array('min_range' => 1)); $validationFields['name_items'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $validationFields['values_req'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'string', null, FILTER_REQUIRE_ARRAY); $validationFields['value_items'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $validationFields['value_types'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $validationFields['value_sizes'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $validationFields['value_show'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'string', null, FILTER_REQUIRE_ARRAY); $validationFields['hattr'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'string', null, FILTER_REQUIRE_ARRAY); // Captcha stuff if (erLhcoreClassModelChatConfig::fetch('session_captcha')->current_value == 1) { // Start session if required only $currentUser = erLhcoreClassUser::instance(); $hashCaptcha = isset($_SESSION[$_SERVER['REMOTE_ADDR']]['form']) ? $_SESSION[$_SERVER['REMOTE_ADDR']]['form'] : null; $nameField = 'captcha_' . $hashCaptcha; $validationFields[$nameField] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'string'); } else { $nameField = 'captcha_' . sha1(erLhcoreClassIPDetect::getIP() . $_POST['tscaptcha'] . erConfigClassLhConfig::getInstance()->getSetting('site', 'secrethash')); $validationFields[$nameField] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'string'); } // Custom start chat fields $validationFields['value_items_admin'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $validationFields['via_hidden'] = new ezcInputFormDefinitionElement(ezcInputFormDefinitionElement::OPTIONAL, 'unsafe_raw', null, FILTER_REQUIRE_ARRAY); $form = new ezcInputForm(INPUT_POST, $validationFields); $Errors = array(); if (erLhcoreClassModelChatBlockedUser::getCount(array('filter' => array('ip' => erLhcoreClassIPDetect::getIP()))) > 0) { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'You do not have permission to chat! Please contact site owner.'); } /** * IP Ranges block * */ $ignorable_ip = erLhcoreClassModelChatConfig::fetch('banned_ip_range')->current_value; if ($ignorable_ip != '' && erLhcoreClassIPDetect::isIgnored(erLhcoreClassIPDetect::getIP(), explode(',', $ignorable_ip))) { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'You do not have permission to chat! Please contact site owner.'); } if (erLhcoreClassModelChatConfig::fetch('session_captcha')->current_value == 1) { if (!$form->hasValidData($nameField) || $form->{$nameField} == '' || $form->{$nameField} < time() - 600 || $hashCaptcha != sha1($_SERVER['REMOTE_ADDR'] . $form->{$nameField} . erConfigClassLhConfig::getInstance()->getSetting('site', 'secrethash'))) { $Errors['captcha'] = erTranslationClassLhTranslation::getInstance()->getTranslation("chat/startchat", "Your request was not processed as expected - but don't worry it was not your fault. Please re-submit your request. If you experience the same issue you will need to contact us via other means."); } } else { // Captcha validation if (!$form->hasValidData($nameField) || $form->{$nameField} == '' || $form->{$nameField} < time() - 600) { $Errors['captcha'] = erTranslationClassLhTranslation::getInstance()->getTranslation("chat/startchat", "Your request was not processed as expected - but don't worry it was not your fault. Please re-submit your request. If you experience the same issue you will need to contact us via other means."); } } if (isset($validationFields['Username'])) { if (!$form->hasValidData('Username') || $form->Username == '' && ($start_data_fields['name_require_option'] == 'required' && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_name_require_option']) && $start_data_fields['offline_name_require_option'] == 'required')) { $Errors['nick'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please enter your name'); } elseif ($form->hasValidData('Username')) { $chat->nick = $inputForm->username = $form->Username; } if ($form->hasValidData('Username') && $form->Username != '' && strlen($form->Username) > 50) { $Errors['nick'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Maximum 50 characters'); } } if (isset($validationFields['Email'])) { if (!$form->hasValidData('Email') && $start_data_fields['email_require_option'] == 'required' || !$form->hasValidData('Email') && isset($additionalParams['offline'])) { $Errors['email'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please enter a valid email address'); } elseif ($form->hasValidData('Email')) { $chat->email = $inputForm->email = $form->Email; } else { $chat->email = $inputForm->email = $_POST['Email']; } } // Validate question if (isset($validationFields['Question'])) { if (!$form->hasValidData('keyUpStarted') && (!$form->hasValidData('Question') || trim($form->Question) == '' && ($start_data_fields['message_require_option'] == 'required' && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_message_require_option']) && $start_data_fields['offline_message_require_option'] == 'required'))) { $Errors['question'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please enter your message'); } elseif ($form->hasValidData('Question')) { $inputForm->question = trim($form->Question); } if ($form->hasValidData('Question') && trim($form->Question) != '' && strlen($form->Question) > (int) erLhcoreClassModelChatConfig::fetch('max_message_length')->current_value) { $Errors['question'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Maximum') . ' ' . (int) erLhcoreClassModelChatConfig::fetch('max_message_length')->current_value . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'characters for a message'); } } if (isset($validationFields['AcceptTOS'])) { if (!$form->hasValidData('AcceptTOS') || $form->AcceptTOS == false) { $Errors['accept_tos'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'You have to accept our Terms Of Service'); } else { $inputForm->accept_tos = true; } } // Validate phone if (isset($validationFields['Phone'])) { if (!$form->hasValidData('Phone') || ($form->Phone == '' || mb_strlen($form->Phone) < erLhcoreClassModelChatConfig::fetch('min_phone_length')->current_value) && ($start_data_fields['phone_require_option'] == 'required' && !isset($additionalParams['offline']) || isset($additionalParams['offline']) && isset($start_data_fields['offline_phone_require_option']) && $start_data_fields['offline_phone_require_option'] == 'required')) { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please enter your phone'); } elseif ($form->hasValidData('Phone')) { $chat->phone = $inputForm->phone = $form->Phone; } if ($form->hasValidData('Phone') && $form->Phone != '' && strlen($form->Phone) > 100) { $Errors['phone'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Maximum 100 characters for phone'); } } if ($form->hasValidData('operator') && erLhcoreClassModelUser::getUserCount(array('filter' => array('id' => $form->operator, 'disabled' => 0))) > 0) { $inputForm->operator = $chat->user_id = $form->operator; } /** * File for offline form * */ $inputForm->has_file = false; if (isset($additionalParams['offline']) && ($inputForm->validate_start_chat == true && isset($start_data_fields['offline_file_visible_in_popup']) && $start_data_fields['offline_file_visible_in_popup'] == true || $inputForm->validate_start_chat == false && isset($start_data_fields['offline_file_visible_in_page_widget']) && $start_data_fields['offline_file_visible_in_page_widget'] == true)) { $fileData = erLhcoreClassModelChatConfig::fetch('file_configuration'); $data = (array) $fileData->data; if ($_FILES['File']['error'] != 4) { // No file was provided if (isset($_FILES['File']) && erLhcoreClassSearchHandler::isFile('File', '/\\.(' . $data['ft_us'] . ')$/i', $data['fs_max'] * 1024)) { $inputForm->has_file = true; // Just extract file extension $fileNameAray = explode('.', $_FILES['File']['name']); end($fileNameAray); // Set attribute for futher $inputForm->file_extension = strtolower(current($fileNameAray)); $inputForm->file_location = $_FILES['File']['tmp_name']; } elseif (isset($_FILES['File'])) { $Errors[] = erLhcoreClassSearchHandler::$lastError != '' ? erLhcoreClassSearchHandler::$lastError : erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Invalid file'); } } } if ($form->hasValidData('user_timezone')) { $timezone_name = timezone_name_from_abbr(null, $form->user_timezone * 3600, true); if ($timezone_name !== false) { $chat->user_tz_identifier = $timezone_name; } else { $chat->user_tz_identifier = ''; } } if ($form->hasValidData('DepartmentIDDefined')) { $inputForm->departament_id_array = $form->DepartmentIDDefined; } if ($form->hasValidData('DepartamentID') && erLhcoreClassModelDepartament::getCount(array('filter' => array('id' => $form->DepartamentID, 'disabled' => 0))) > 0) { $chat->dep_id = $form->DepartamentID; } elseif ($form->hasValidData('DepartamentID') && $form->DepartamentID == -1) { $chat->dep_id == 0; if (isset($additionalParams['theme']) && $additionalParams['theme'] !== false && $additionalParams['theme']->department_title != '') { $Errors['department'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please choose') . ' ' . htmlspecialchars($additionalParams['theme']->department_title) . '!'; } else { $Errors['department'] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Please choose department!'); } } elseif ($chat->dep_id == 0 || erLhcoreClassModelDepartament::getCount(array('filter' => array('id' => $chat->dep_id, 'disabled' => 0))) == 0) { // Perhaps extension overrides default department? $response = erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.validate_department', array('input_form' => $inputForm)); // There was no callbacks or file not found etc, we try to download from standard location if ($response === false) { $departments = erLhcoreClassModelDepartament::getList(array('limit' => 1, 'filter' => array('disabled' => 0))); if (!empty($departments)) { $department = array_shift($departments); $chat->dep_id = $department->id; } else { $Errors[] = erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'Could not determine a default department!'); } } else { $chat->dep_id = $response['department_id']; } } // Set chat attributes for transfer workflow logic if ($chat->department !== false && $chat->department->department_transfer_id > 0) { $chat->transfer_if_na = 1; $chat->transfer_timeout_ts = time(); $chat->transfer_timeout_ac = $chat->department->transfer_timeout; } if ($chat->department !== false && $chat->department->inform_unread == 1) { $chat->reinform_timeout = $chat->department->inform_unread_delay; } $inputForm->departament_id = $chat->dep_id; if ($inputForm->priority !== false && is_numeric($inputForm->priority)) { $chat->priority = (int) $inputForm->priority; } else { if ($chat->department !== false) { $chat->priority = $chat->department->priority; } } $stringParts = array(); if ($form->hasValidData('name_items') && !empty($form->name_items)) { $valuesArray = array(); if ($form->hasValidData('value_items') && !empty($form->value_items)) { $inputForm->value_items = $valuesArray = $form->value_items; } if ($form->hasValidData('values_req') && !empty($form->values_req)) { $inputForm->values_req = $form->values_req; } if ($form->hasValidData('value_types') && !empty($form->value_types)) { $inputForm->value_types = $form->value_types; } if ($form->hasValidData('value_sizes') && !empty($form->value_sizes)) { $inputForm->value_sizes = $form->value_sizes; } if ($form->hasValidData('value_show') && !empty($form->value_show)) { $inputForm->value_show = $form->value_show; } if ($form->hasValidData('hattr') && !empty($form->hattr)) { $inputForm->hattr = $form->hattr; } $inputForm->name_items = $form->name_items; foreach ($form->name_items as $key => $name_item) { if (isset($inputForm->values_req[$key]) && $inputForm->values_req[$key] == 't' && ($inputForm->value_show[$key] == 'b' || $inputForm->value_show[$key] == (isset($additionalParams['offline']) ? 'off' : 'on')) && (!isset($valuesArray[$key]) || trim($valuesArray[$key]) == '')) { $Errors['additional_' . $key] = trim($name_item) . ' : ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'is required'); } $stringParts[] = array('h' => $inputForm->value_types[$key] && $inputForm->value_types[$key] == 'hidden' ? true : false, 'key' => $name_item, 'value' => isset($valuesArray[$key]) ? trim($valuesArray[$key]) : ''); } } if (isset($start_data_fields['custom_fields']) && $start_data_fields['custom_fields'] != '') { $customAdminfields = json_decode($start_data_fields['custom_fields'], true); $valuesArray = array(); // Fill values if exists if ($form->hasValidData('value_items_admin')) { $inputForm->value_items_admin = $valuesArray = $form->value_items_admin; } if ($form->hasValidData('via_hidden')) { $inputForm->via_hidden = $form->via_hidden; } if (is_array($customAdminfields)) { foreach ($customAdminfields as $key => $adminField) { if (isset($inputForm->value_items_admin[$key]) && isset($adminField['isrequired']) && $adminField['isrequired'] == 'true' && ($adminField['visibility'] == 'all' || $adminField['visibility'] == (isset($additionalParams['offline']) ? 'off' : 'on')) && (!isset($valuesArray[$key]) || trim($valuesArray[$key]) == '')) { $Errors['additional_admin_' . $key] = trim($adminField['fieldname']) . ': ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/startchat', 'is required'); } if (isset($valuesArray[$key]) && $valuesArray[$key] != '') { $stringParts[] = array('identifier' => $adminField['fieldidentifier'], 'key' => $adminField['fieldname'], 'value' => isset($valuesArray[$key]) ? trim($valuesArray[$key]) : ''); } } } } if (!empty($stringParts)) { $chat->additional_data = json_encode($stringParts); } erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.validate_start_chat', array('errors' => &$Errors, 'input_form' => &$inputForm, 'start_data_fields' => &$start_data_fields, 'chat' => &$chat, 'additional_params' => &$additionalParams)); return $Errors; }
function step4() { $cfgSite = erConfigClassLhConfig::getInstance(); $cfgSite->save(); $msg = "Installation is complete. You can start by adding users and departments"; syslog(LOG_DEBUG, $msg); }
/** * Open, parse, and return the template file. * * @param $file string the template file name */ function fetch($fileTemplate = null) { $instance = erLhcoreClassSystem::instance(); $port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80; if (!$fileTemplate) { $fileTemplate = $this->file; } if ($this->cacheEnabled == true && key_exists(md5($fileTemplate . $instance->WWWDirLang . $instance->Language . $port), $this->cacheTemplates)) { try { return $this->fetchExecute($this->cacheTemplates[md5($fileTemplate . $instance->WWWDirLang . $instance->Language . $port)]); } catch (Exception $e) { } } $cfg = erConfigClassLhConfig::getInstance(); $file = erLhcoreClassDesign::designtpl($fileTemplate); if ($this->templatecompile == true) { $contentFile = php_strip_whitespace($file); // Compile templates - 3 level of inclusions for ($i = 0; $i < 9; $i++) { $Matches = array(); preg_match_all('/<\\?php(\\s*)include_once\\(erLhcoreClassDesign::designtpl\\(\'([a-zA-Z0-9-\\.-\\/\\_]+)\'\\)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[2] as $key => $Match) { $contentFile = str_replace($Matches[0][$key], php_strip_whitespace(erLhcoreClassDesign::designtpl($Match)), $contentFile); } //Compile templates inclusions first level. $Matches = array(); preg_match_all('/<\\?php(\\s*)include\\(erLhcoreClassDesign::designtpl\\(\'([a-zA-Z0-9-\\.-\\/\\_]+)\'\\)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[2] as $key => $Match) { $contentFile = str_replace($Matches[0][$key], php_strip_whitespace(erLhcoreClassDesign::designtpl($Match)), $contentFile); } } //Compile image css paths. Etc.. $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::design\\(\'([a-zA-Z0-9-\\.-\\/\\_]+)\'\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $Match) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::design($Match), $contentFile); } //Compile translations, pure translations $Matches = array(); preg_match_all('/<\\?php echo erTranslationClassLhTranslation::getInstance\\(\\)->getTranslation\\(\'(.*?)\',\'(.*?)\'\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $TranslateContent) { $contentFile = str_replace($Matches[0][$key], erTranslationClassLhTranslation::getInstance()->getTranslation($TranslateContent, $Matches[2][$key]), $contentFile); } //Translations used in logical conditions $Matches = array(); preg_match_all('/erTranslationClassLhTranslation::getInstance\\(\\)->getTranslation\\(\'(.*?)\',\'(.*?)\'\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $TranslateContent) { $contentFile = str_replace($Matches[0][$key], '\'' . erTranslationClassLhTranslation::getInstance()->getTranslation($TranslateContent, $Matches[2][$key]) . '\'', $contentFile); } // Compile url addresses $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::baseurl\\((.*?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::baseurl(trim($UrlAddress, '\'')), $contentFile); } // Compile url direct addresses $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::baseurldirect\\((.*?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::baseurldirect(trim($UrlAddress, '\'')), $contentFile); } // Compile url direct addresses $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::baseurlsite\\(\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::baseurlsite(), $contentFile); } // Compile css url addresses $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::designCSS\\((.*?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::designCSS(trim($UrlAddress, '\'')), $contentFile); } // Compile css url addresses $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassDesign::designJS\\((.*?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], erLhcoreClassDesign::designJS(trim($UrlAddress, '\'')), $contentFile); } // Compile url addresses in logical operations $Matches = array(); preg_match_all('/erLhcoreClassDesign::baseurl\\((.*?)\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], '\'' . erLhcoreClassDesign::baseurl(trim($UrlAddress, '\'')) . '\'', $contentFile); } // Compile url addresses in logical operations $Matches = array(); preg_match_all('/erLhcoreClassDesign::baseurldirect\\((.*?)\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $contentFile = str_replace($Matches[0][$key], '\'' . erLhcoreClassDesign::baseurldirect(trim($UrlAddress, '\'')) . '\'', $contentFile); } // Compile config settings, direct output $Matches = array(); preg_match_all('/<\\?php echo erConfigClassLhConfig::getInstance\\(\\)->getSetting\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?),(\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erConfigClassLhConfig::getInstance()->getSetting($Matches[2][$key], $Matches[5][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = $valueConfig; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile config settings $Matches = array(); preg_match_all('/erConfigClassLhConfig::getInstance\\(\\)->getSetting\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?),(\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erConfigClassLhConfig::getInstance()->getSetting($Matches[2][$key], $Matches[5][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = '\'' . $valueConfig . '\''; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile override config settings, used in title, description override $Matches = array(); preg_match_all('/<\\?php echo erConfigClassLhConfig::getInstance\\(\\)->getOverrideValue\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?),(\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erConfigClassLhConfig::getInstance()->getOverrideValue($Matches[2][$key], $Matches[5][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = $valueConfig; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile override config settings $Matches = array(); preg_match_all('/erConfigClassLhConfig::getInstance\\(\\)->getOverrideValue\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?),(\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erConfigClassLhConfig::getInstance()->getOverrideValue($Matches[2][$key], $Matches[5][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = '\'' . $valueConfig . '\''; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } $Matches = array(); preg_match_all('/<\\?php echo erConfigClassLhConfig::getInstance\\(\\)->getDirLanguage\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erConfigClassLhConfig::getInstance()->getDirLanguage($Matches[2][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = $valueConfig; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile config settings $Matches = array(); preg_match_all('/erConfigClassLhConfig::getInstance\\(\\)->getDirLanguage\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $var) { $valueConfig = erConfigClassLhConfig::getInstance()->getDirLanguage($Matches[2][$key]); $valueReplace = ''; if (is_bool($valueConfig)) { $valueReplace = $valueConfig == false ? 'false' : 'true'; } elseif (is_integer($valueConfig)) { $valueReplace = $valueConfig; } elseif (is_array($valueConfig)) { $valueReplace = var_export($valueConfig, true); } else { $valueReplace = '\'' . $valueConfig . '\''; } $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } if ($this->cacheDbVariables == true) { // Compile config completely $Matches = array(); preg_match_all('/<\\?php echo erLhcoreClassModelChatConfig::fetch\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)->current_value(.*?)\\?\\>/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erLhcoreClassModelChatConfig::fetch($Matches[2][$key])->current_value; $contentFile = str_replace($Matches[0][$key], $valueConfig, $contentFile); } // Compile config settings in php scripts $Matches = array(); preg_match_all('/erLhcoreClassModelChatConfig::fetch\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)->current_value/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erLhcoreClassModelChatConfig::fetch($Matches[2][$key])->current_value; $valueReplace = ''; $valueReplace = '\'' . str_replace("'", "\\'", $valueConfig) . '\''; $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile config settings in php scripts $Matches = array(); preg_match_all('/erLhcoreClassModelChatConfig::fetch\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)->data_value/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erLhcoreClassModelChatConfig::fetch($Matches[2][$key])->data_value; $valueReplace = var_export($valueConfig, true); $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } // Compile config settings array $Matches = array(); preg_match_all('/erLhcoreClassModelChatConfig::fetch\\((\\s?)\'([a-zA-Z0-9-\\.-\\/\\_]+)\'(\\s?)\\)->data\\[\'([a-zA-Z0-9-\\.-\\/\\_]+)\'\\]/i', $contentFile, $Matches); foreach ($Matches[1] as $key => $UrlAddress) { $valueConfig = erLhcoreClassModelChatConfig::fetch($Matches[2][$key])->data[$Matches[4][$key]]; $valueReplace = ''; $valueReplace = '\'' . str_replace("'", "\\'", $valueConfig) . '\''; $contentFile = str_replace($Matches[0][$key], $valueReplace, $contentFile); } } // Compile content language $contentFile = str_replace('<?php echo erLhcoreClassSystem::instance()->ContentLanguage?>', erLhcoreClassSystem::instance()->ContentLanguage, $contentFile); // Compile siteaccess $contentFile = str_replace('erLhcoreClassSystem::instance()->SiteAccess', '\'' . erLhcoreClassSystem::instance()->SiteAccess . '\'', $contentFile); // Atomoc template compilation to avoid concurent request compiling and writing to the same file $fileName = 'cache/compiledtemplates/' . md5(time() . rand(0, 1000) . microtime() . $file . $instance->WWWDirLang . $instance->Language . $port) . '.php'; file_put_contents($fileName, erLhcoreClassTemplate::strip_html($contentFile)); $file = 'cache/compiledtemplates/' . md5($file . $instance->WWWDirLang . $instance->Language . $port) . '.php'; rename($fileName, $file); $this->cacheTemplates[md5($fileTemplate . $instance->WWWDirLang . $instance->Language . $port)] = $file; $this->storeCache(); } return $this->fetchExecute($file); }
public function setupSMTP($params) { $params['phpmailer']->Sender = erConfigClassLhConfig::getInstance()->getSetting('site', 'sender_mail'); $params['phpmailer']->From = erConfigClassLhConfig::getInstance()->getSetting('site', 'seller_mail'); $params['phpmailer']->FromName = erConfigClassLhConfig::getInstance()->getSetting('site', 'seller_title'); return array('status' => erLhcoreClassChatEventDispatcher::STOP_WORKFLOW); }
public static function informChatClosed(erLhcoreClassModelChat $chat, $operator = false) { $sendMail = erLhAbstractModelEmailTemplate::fetch(5); $mail = new PHPMailer(); $mail->CharSet = "UTF-8"; if ($sendMail->from_email != '') { $mail->Sender = $mail->From = $sendMail->from_email; } $mail->FromName = $sendMail->from_name; $mail->Subject = $sendMail->subject; $messages = array_reverse(erLhcoreClassModelmsg::getList(array('limit' => 10, 'sort' => 'id DESC', 'filter' => array('chat_id' => $chat->id)))); $messagesContent = ''; foreach ($messages as $msg) { if ($msg->user_id == -1) { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . erTranslationClassLhTranslation::getInstance()->getTranslation('chat/syncadmin', 'System assistant') . ': ' . htmlspecialchars($msg->msg) . "\n"; } else { $messagesContent .= date(erLhcoreClassModule::$dateDateHourFormat, $msg->time) . ' ' . ($msg->user_id == 0 ? htmlspecialchars($chat->nick) : htmlspecialchars($msg->name_support)) . ': ' . htmlspecialchars($msg->msg) . "\n"; } } $emailRecipient = array(); if ($sendMail->recipient != '') { // This time we give priority to template recipients $emailRecipient = explode(',', $sendMail->recipient); } elseif ($chat->department !== false && $chat->department->email != '') { $emailRecipient = explode(',', $chat->department->email); } else { // Lets find first user and send him an e-mail $list = erLhcoreClassModelUser::getUserList(array('limit' => 1, 'sort' => 'id ASC')); $user = array_pop($list); $emailRecipient = array($user->email); } self::setupSMTP($mail); $cfgSite = erConfigClassLhConfig::getInstance(); $secretHash = $cfgSite->getSetting('site', 'secrethash'); if ($chat->email != '') { $mail->AddReplyTo($chat->email, $chat->nick); } // Format user friendly additional data if ($chat->additional_data != '') { $paramsAdditional = json_decode($chat->additional_data, true); $elementsAdditional = array(); if (is_array($paramsAdditional) && !empty($paramsAdditional)) { foreach ($paramsAdditional as $param) { $elementsAdditional[] = $param['key'] . ' - ' . $param['value']; } $additional_data = implode("\n", $elementsAdditional); } else { $additional_data = $chat->additional_data; } } else { $additional_data = ''; } foreach ($emailRecipient as $receiver) { $veryfyEmail = sha1(sha1($receiver . $secretHash) . $secretHash); $mail->Body = str_replace(array('{chat_id}', '{phone}', '{name}', '{email}', '{message}', '{additional_data}', '{url_request}', '{ip}', '{department}', '{url_accept}', '{operator}', '{country}', '{city}'), array($chat->id, $chat->phone, $chat->nick, $chat->email, $messagesContent, $additional_data, $chat->referrer, erLhcoreClassIPDetect::getIP(), (string) $chat->department, 'http://' . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $receiver, $operator, $chat->country_name, $chat->city), $sendMail->content); $mail->AddAddress($receiver); $mail->Send(); $mail->ClearAddresses(); } if ($sendMail->bcc_recipients != '') { $recipientsBCC = explode(',', $sendMail->bcc_recipients); foreach ($recipientsBCC as $receiver) { $receiver = trim($receiver); $veryfyEmail = sha1(sha1($receiver . $secretHash) . $secretHash); $mail->Body = str_replace(array('{chat_id}', '{phone}', '{name}', '{email}', '{message}', '{additional_data}', '{url_request}', '{ip}', '{department}', '{url_accept}', '{operator}', '{country}', '{city}'), array($chat->id, $chat->phone, $chat->nick, $chat->email, $messagesContent, $additional_data, $chat->referrer, erLhcoreClassIPDetect::getIP(), (string) $chat->department, 'http://' . $_SERVER['HTTP_HOST'] . erLhcoreClassDesign::baseurl('chat/accept') . '/' . erLhcoreClassModelChatAccept::generateAcceptLink($chat) . '/' . $veryfyEmail . '/' . $receiver, $operator, $chat->country_name, $chat->city), $sendMail->content); $mail->AddAddress($receiver); $mail->Send(); $mail->ClearAddresses(); } } }
?> /> <?php print erTranslationClassLhTranslation::getInstance()->getTranslation('listchatconfig', $systemconfig->explain); ?> </label> <?php } ?> <?php if ($systemconfig->type == erLhcoreClassModelChatConfig::SITE_ACCESS_PARAM_ON) { ?> <?php foreach (erConfigClassLhConfig::getInstance()->getSetting('site', 'available_site_access') as $siteaccess) { $siteaccessOptions = erConfigClassLhConfig::getInstance()->getSetting('site_access_options', $siteaccess); ?> <label><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('chat/editchatconfig', 'Value in'); ?> - "<?php echo htmlspecialchars($siteaccess); ?> " <?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('chat/editchatconfig', 'site access'); ?> </label> <input class="form-control" name="<?php echo $attribute; ?> Value<?php
$redirectFull = $redirect != '' ? '/(r)/' . rawurlencode($redirect) : ''; header('Location: ' . erLhcoreClassDesign::baseurldirect('site_admin/user/login') . $redirectFull); exit; } $tpl = erLhcoreClassTemplate::getInstance('lhuser/login.tpl.php'); $redirect = ''; if (isset($_POST['redirect'])) { $redirect = $_POST['redirect']; $tpl->set('redirect_url', $redirect); } else { $redirect = rawurldecode($Params['user_parameters_unordered']['r']); $tpl->set('redirect_url', $redirect); } if (isset($_POST['Login'])) { if (!$currentUser->authenticate($_POST['Username'], $_POST['Password'], isset($_POST['rememberMe']) && $_POST['rememberMe'] == 1 ? true : false)) { $Error = erTranslationClassLhTranslation::getInstance()->getTranslation('user/login', 'Incorrect username or password'); $tpl->set('errors', array($Error)); } else { if ($redirect != '') { erLhcoreClassModule::redirect(base64_decode($redirect)); } else { erLhcoreClassModule::redirect(); exit; } } } $pagelayout = erConfigClassLhConfig::getInstance()->getOverrideValue('site', 'login_pagelayout'); if ($pagelayout != null) { $Result['pagelayout'] = 'login'; } $Result['content'] = $tpl->fetch();
public static function closeChatCallback($chat, $operator = false) { $extensions = erConfigClassLhConfig::getInstance()->getSetting('site', 'extensions'); $instance = erLhcoreClassSystem::instance(); foreach ($extensions as $ext) { $callbackFile = $instance->SiteDir . '/extension/' . $ext . '/callbacks/close_chat.php'; if (file_exists($callbackFile)) { include $callbackFile; } } erLhcoreClassChatEventDispatcher::getInstance()->dispatch('chat.close', array('chat' => &$chat, 'user_data' => $operator)); if (($dep = $chat->department) !== false && $dep->inform_close == 1) { erLhcoreClassChatMail::informChatClosed($chat, $operator); } }
var domContainer = document.getElementById('lhc_container_faq'); var domIframe = 'lhcfaq_iframe'; var domContainerId = 'lhc_container_faq'; <?php include erLhcoreClassDesign::designtpl('lhchat/getstatus/drag_drop_logic.tpl.php'); ?> }, showStatusWidget : function() { var statusTEXT = '<a id="faq-icon" class="status-icon" href="#" onclick="return lh_inst.lh_openchatWindow()" >'+LHCFAQOptions.status_text+'</a>'; var raw_css = "#lhc_faq_container * {direction:<?php erConfigClassLhConfig::getInstance()->getOverrideValue('site', 'dir_language') == 'ltr' || erConfigClassLhConfig::getInstance()->getOverrideValue('site', 'dir_language') == '' ? print 'ltr;text-align:left;' : (print 'rtl;text-align:right;'); ?> ;font-family:arial;line-height:100%;font-size:12px;box-sizing: content-box;zoom:1;margin:0;padding:0;}\n#lhc_faq_container .status-icon{text-decoration:none;font-size:12px;font-weight:bold;color:#<?php $theme !== false ? print $theme->text_color : (print '000'); ?> ;display:block;padding:<?php echo $currentPosition['padding_text']; ?> ;background:url('<?php echo erLhcoreClassModelChatConfig::fetch('explicit_http_mode')->current_value; ?> //<?php echo $_SERVER['HTTP_HOST']; echo erLhcoreClassDesign::design('images/icons/help.png'); ?> ') no-repeat <?php
<?php if (erLhcoreClassInstance::getInstance()->is_active == false) { ?> <div class="alert alert-danger alert-dismissible" role="alert" style="max-width:1024px;margin:7px auto;"> <?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('pagelayout/pagelayout', 'Your service plan has expired.'); ?> <?php if (erConfigClassLhConfig::getInstance()->getSetting('site', 'hide_billing') == false) { ?> <a class="alert-link" href="<?php echo erLhcoreClassDesign::baseurl('instance/billing'); ?> " ><i class="material-icons">account_balance</i><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('pagelayout/pagelayout', 'Billing'); ?> </a> <?php } ?> </div> <?php }
private function updateCache() { try { $sys = erLhcoreClassSystem::instance()->SiteDir; $reader = new ezcTranslationTsBackend($sys . '/translations/' . $this->languageCode); $reader->setOptions(array('format' => 'translation.ts')); $reader->initReader($this->languageCode); $cacheObj = new ezcCacheStorageFileArray($sys . '/cache/translations'); $writer = new ezcTranslationCacheBackend($cacheObj); $writer->initWriter($this->languageCode); // Load extensions translations $extensions = erConfigClassLhConfig::getInstance()->getSetting('site', 'extensions'); $contextDataArray = array(); foreach ($extensions as $ext) { $trsDir = $sys . 'extension/' . $ext . '/translations/' . $this->languageCode . '/translation.ts'; if (file_exists($trsDir)) { $readerExtension = new ezcTranslationTsBackend($sys . '/extension/' . $ext . '/translations/' . $this->languageCode); $readerExtension->setOptions(array('format' => 'translation.ts')); $readerExtension->initReader($this->languageCode); foreach ($readerExtension as $contextName => $contextData) { if (isset($contextDataArray[$contextName])) { // Perhaps few extensions have same content? $contextDataArray[$contextName] = array_merge($contextDataArray[$contextName], $contextData); } else { $contextDataArray[$contextName] = $contextData; } } $readerExtension->deInitReader(); } } // Store translations foreach ($reader as $contextName => $contextData) { if (isset($contextDataArray[$contextName])) { $contextData = array_merge($contextData, $contextDataArray[$contextName]); unset($contextDataArray[$contextName]); } $writer->storeContext($contextName, $contextData); } // Store unique extension context foreach ($contextDataArray as $contextName => $contextData) { $writer->storeContext($contextName, $contextData); } $reader->deInitReader(); unset($contextDataArray); $writer->deInitWriter(); } catch (Exception $e) { // Sometimes write fails, so ignore it } }
public function setUsername($username) { $cfg = erConfigClassLhConfig::getInstance(); $db = ezcDbInstance::get(); $db->query('USE ' . $cfg->getSetting('db', 'database_user_prefix') . $this->id); // Switch to intance DB $stmt = $db->prepare('UPDATE lh_users SET username = :username WHERE id = 1'); $stmt->bindValue(':username', $username); $stmt->execute(); $db->query('USE ' . $cfg->getSetting('db', 'database')); }
</label> <label><input type="checkbox" id="ShowContentMinimized" value="on"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('system/htmlcode', 'Show chatbox content minimized first time if content is shown.'); ?> </label> <p class="explain"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('system/htmlcode', 'Copy the code from the text area to the footer, before the closing </body> tag'); ?> </p> <textarea style="width:100%;height:180px;font-size:12px;" id="HMLTContent" ></textarea> <script type="text/javascript"> var default_site_access = '<?php echo erConfigClassLhConfig::getInstance()->getSetting('site', 'default_site_access'); ?> /'; function generateEmbedCode(){ var siteAccess = $('#LocaleID').val() == default_site_access ? '' : $('#LocaleID').val(); var id_position = '/(position)/'+$('#PositionID').val(); var textStatus = $('#id_status_text').val(); var top = '/(top)/'+($('#id_top_text').val() == '' ? 300 : $('#id_top_text').val()); var topposition = '/(units)/'+$('#UnitsTop').val(); var widthwidget = '/(width)/'+($('#id_width_text').val() == '' ? 300 : $('#id_width_text').val()); var heightwidget = '/(height)/'+($('#id_height_text').val() == '' ? 300 : $('#id_height_text').val()); var chat_height = '/(chat_height)/'+($('#id_chat_height').val() == '' ? 220 : $('#id_chat_height').val()); var show_content = ($('#ShowContent').is(':checked') ? '/(sc)/true' : ''); var show_min = ($('#ShowContentMinimized').is(':checked')? '/(scm)/true' : ''); var dis_min = ($('#DisableMiminize').is(':checked')? '/(dmn)/true' : '');
public static function createCustomer($instance) { $originalSiteAccess = erLhcoreClassSystem::instance()->SiteAccess; if ($instance->locale != '') { erLhcoreClassSystem::instance()->setSiteAccessByLocale($instance->locale); } $password = erLhcoreClassModelForgotPassword::randomPassword(10); $chat_box_hash = erLhcoreClassModelForgotPassword::randomPassword(10); $searchArray = array('{email_replace}', '{password_hash}', '{export_hash_chats}', '{chat_box_hash}', '{chat_box_hash_length}'); $cfg = erConfigClassLhConfig::getInstance(); $replaceArray = array($instance->email, sha1($password . $cfg->getSetting('site', 'secrethash') . sha1($password)), erLhcoreClassModelForgotPassword::randomPassword(10), $chat_box_hash, strlen($chat_box_hash)); $db = ezcDbInstance::get(); self::deleteDatabase($instance->id); self::createDatabase($instance->id); $db->query('USE ' . $cfg->getSetting('db', 'database_user_prefix') . $instance->id); $sql = file_get_contents('extension/instance/doc/db_3.sql'); $sql = str_replace($searchArray, $replaceArray, $sql); $db->query($sql); $dbPostUpdate = ltrim(erLhcoreClassDesign::design('db_post_update/db.sql'), '/'); if (file_exists($dbPostUpdate)) { $db->query(file_get_contents($dbPostUpdate)); } // Insert default user language if ($instance->locale != '') { $stm = $db->prepare("INSERT INTO `lh_users_setting` (`user_id`, `identifier`, `value`) VALUES (1,'user_language',:value)"); $stm->bindValue(':value', $instance->locale); $stm->execute(); } else { $stm = $db->prepare("INSERT INTO `lh_users_setting` (`user_id`, `identifier`, `value`) VALUES (1,'user_language',:value)"); $stm->bindValue(':value', 'en_EN'); $stm->execute(); } $tpl = erLhcoreClassTemplate::getInstance('lhinstance/email.tpl.php'); $tpl->setArray(array('instance' => $instance, 'email' => $instance->email, 'password' => $password)); $mail = new PHPMailer(); $mail->CharSet = 'UTF-8'; $mail->Sender = $mail->From = $cfg->getSetting('site', 'seller_mail'); $mail->FromName = $cfg->getSetting('site', 'seller_title'); $mail->Subject = $cfg->getSetting('site', 'seller_title'); $mail->AddReplyTo($cfg->getSetting('site', 'seller_mail'), $cfg->getSetting('site', 'seller_title')); $mail->Body = $tpl->fetch(); $mail->AddAddress($instance->email); erLhcoreClassChatMail::setupSMTP($mail); $mail->Send(); $mail->ClearAddresses(); // Dispatch event for listeners erLhcoreClassChatEventDispatcher::getInstance()->dispatch('instance.registered.created', array('instance' => $instance)); $db->query('USE ' . $cfg->getSetting('db', 'database')); // Activate instance $sql = "UPDATE lhc_instance_client SET status = 1 WHERE id = {$instance->id}"; $db->query($sql); if ($instance->locale != '') { erLhcoreClassSystem::instance()->setSiteAccess($originalSiteAccess); } }