Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Fri, Jun 20, 9:45 PM

in-portal

Index: branches/unlabeled/unlabeled-1.29.2/core/units/admin/admin_tag_processor.php
===================================================================
--- branches/unlabeled/unlabeled-1.29.2/core/units/admin/admin_tag_processor.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.29.2/core/units/admin/admin_tag_processor.php (revision 7647)
@@ -0,0 +1,678 @@
+<?php
+
+ class AdminTagProcessor extends kDBTagProcessor {
+
+ function SetConst($params)
+ {
+ $name = $this->SelectParam($params, 'name,const');
+ safeDefine($name, $params['value']);
+ }
+
+ /**
+ * Allows to execute js script after the page is fully loaded
+ *
+ * @param Array $params
+ * @return string
+ */
+ function AfterScript($params)
+ {
+ $after_script = $this->Application->GetVar('after_script');
+ if ($after_script) {
+ return '<script type="text/javascript">'.$after_script.'</script>';
+ }
+ return '';
+ }
+
+ /**
+ * Returns section title with #section# keyword replaced with current section
+ *
+ * @param Array $params
+ * @return string
+ */
+ function GetSectionTitle($params)
+ {
+ $params['name'] = replaceModuleSection($params['phrase']);
+ return $this->Application->ProcessParsedTag('m', 'Phrase', $params);
+ }
+
+ /**
+ * Returns section icon with #section# keyword replaced with current section
+ *
+ * @param Array $params
+ * @return string
+ */
+ function GetSectionIcon($params)
+ {
+ return replaceModuleSection($params['icon']);
+ }
+
+ /**
+ * Allows to detect if current template is one of listed ones
+ *
+ * @param Array $params
+ * @return int
+ */
+ function TemplateMatches($params)
+ {
+ $templates = explode(',' ,$params['templates']);
+ $t = $this->Application->GetVar('t');
+ return in_array($t, $templates) ? 1 : 0;
+ }
+
+ /**
+ * Save return script in cases, when old sections are opened from new sections
+ *
+ * @param Array $params
+ */
+ function SaveReturnScript($params)
+ {
+ // admin/save_redirect.php?do=
+ $url = str_replace($this->Application->BaseURL(), '', $this->Application->ProcessParsedTag('m', 'Link', $params) );
+ $url = explode('?', $url, 2);
+ $url = 'save_redirect.php?'.$url[1].'&do='.$url[0];
+
+ $this->Application->StoreVar('ReturnScript', $url);
+ }
+
+ /**
+ * Redirects to correct next import step template based on import script data
+ *
+ * @param Array $params
+ */
+ function ImportRedirect($params)
+ {
+ $import_id = $this->Application->GetVar('import_id');
+ if ($import_id) {
+ // redirect forward to step3 (import parameters coosing)
+ $this->Application->StoreVar('ImportScriptID', $import_id);
+
+ $sql = 'SELECT *
+ FROM '.TABLE_PREFIX.'ImportScripts
+ WHERE is_id = '.$import_id;
+
+ $db =& $this->Application->GetADODBConnection();
+ $is_params = $db->GetRow($sql);
+
+ if ($is_params['is_type'] == 'db') {
+ $this->Application->Redirect('', null, '', 'import/step3.php');
+ }
+ elseif ($is_params['is_type'] == 'csv') {
+ $module = strtolower($is_params['is_Module']);
+ $template = $module.'/import';
+ $module_info = $this->Application->findModule('Name', $module);
+
+ $item_prefix = $module_info['Var'];
+ $pass_params = Array('m_opener' => 'd', $item_prefix.'.import_id' => 0, $item_prefix.'.import_event' => 'OnNew', 'pass' => 'm,'.$item_prefix.'.import', 'm_cat_id' => $module_info['RootCat']);
+
+ $this->Application->Redirect($template, $pass_params);
+ }
+ }
+ else {
+ // redirect back to step2 (import type choosing)
+ $this->Application->Redirect('', null, '', 'import/step2.php');
+ }
+ }
+
+ /**
+ * Returns version of module by name
+ *
+ * @param Array $params
+ * @return string
+ */
+ function ModuleVersion($params)
+ {
+ return $this->Application->findModule('Name', $params['module'], 'Version');
+ }
+
+ /**
+ * Used in table form section drawing
+ *
+ * @param Array $params
+ * @return string
+ */
+ function DrawTree($params)
+ {
+ static $deep_level = 0;
+
+ // when processings, then sort children by priority (key of children array)
+ $ret = '';
+ $section_name = $params['section_name'];
+ $params['name'] = $this->SelectParam($params, 'name,render_as,block');
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ $section_data =& $sections_helper->getSectionData($section_name);
+
+ $params['children_count'] = isset($section_data['children']) ? count($section_data['children']) : 0;
+ $params['deep_level'] = $deep_level++;
+ $template = $section_data['url']['t'];
+ unset($section_data['url']['t']);
+ $section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
+ $ret .= $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
+ if (!isset($section_data['children'])) {
+ return $ret;
+ }
+
+ ksort($section_data['children'], SORT_NUMERIC);
+ foreach ($section_data['children'] as $section_name) {
+ $params['section_name'] = $section_name;
+ $ret .= $this->DrawTree($params);
+ $deep_level--;
+ }
+
+
+ return $ret;
+ }
+
+
+ function SectionInfo($params)
+ {
+ $section = $params['section'];
+ if ($section == '#session#') {
+ $section = $this->Application->RecallVar('section');
+ }
+
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ /* @var $sections_helper kSectionsHelper */
+ $section_data =& $sections_helper->getSectionData($section);
+
+ if (isset($params['parent']) && $params['parent']) {
+ do {
+ $section_data =& $sections_helper->getSectionData($section_data['parent']);
+ } while (isset($section_data['use_parent_header']) && $section_data['use_parent_header']);
+ }
+
+ $info = $params['info'];
+ switch ($info) {
+ case 'module_path':
+ $module = $section_data['icon_module'];
+ $res = $this->ModulePath(array('module' => $module));
+ break;
+ default:
+ $res = $section_data[$info];
+ }
+
+ if ($info == 'label' || isset($params['as_label'])) {
+ $res = $this->Application->Phrase($res);
+ }
+ return $res;
+ }
+
+
+ function PrintSection($params)
+ {
+ $section_name = $params['section_name'];
+ if ($section_name == '#session#') {
+ $section_name = $this->Application->RecallVar('section');
+ }
+
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ /* @var $sections_helper kSectionsHelper */
+ $section_data =& $sections_helper->getSectionData($section_name);
+
+ $params['name'] = $this->SelectParam($params, 'name,render_as,block');
+ $params['section_name'] = $section_name;
+
+ $template = $section_data['url']['t'];
+ unset($section_data['url']['t']);
+
+ $section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
+ $ret = $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
+
+ return $ret;
+ }
+
+ /**
+ * Used in XML drawing for tree
+ *
+ * @param Array $params
+ * @return string
+ */
+ function PrintSections($params)
+ {
+ // when processings, then sort children by priority (key of children array)
+ $ret = '';
+ $section_name = $params['section_name'];
+ if ($section_name == '#session#') {
+ $section_name = $this->Application->RecallVar('section');
+ }
+
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ $section_data =& $sections_helper->getSectionData($section_name);
+
+ $params['name'] = $this->SelectParam($params, 'name,render_as,block');
+ if (!isset($section_data['children'])) {
+ return '';
+ }
+
+ $debug_mode = $this->Application->isDebugMode(); // cache this for performance
+ ksort($section_data['children'], SORT_NUMERIC);
+ foreach ($section_data['children'] as $section_name) {
+ $params['section_name'] = $section_name;
+ $section_data =& $sections_helper->getSectionData($section_name);
+ if (!$debug_mode && isset($section_data['debug_only']) && $section_data['debug_only']) {
+ // don't show section for debug mode only without debug mode turned on
+ continue;
+ }
+
+ if (isset($section_data['tabs_only']) && $section_data['tabs_only']) {
+ $perm_status = false;
+ $folder_label = $section_data['label'];
+ ksort($section_data['children'], SORT_NUMERIC);
+ foreach ($section_data['children'] as $priority => $section_name) {
+ // if only tabs in this section & none of them have permission, then skip section too
+ $section_data =& $sections_helper->getSectionData($section_name);
+ if ($section_data && isset($section_data['perm_prefix'])) {
+ // this section uses other section permissions
+ $section_name = $this->Application->getUnitOption($section_data['perm_prefix'].'.main', 'PermSection');
+ }
+
+ $perm_status = $this->Application->CheckPermission($section_name.'.view', 1);
+ if ($perm_status) {
+ break;
+ }
+ }
+ if (!$perm_status) {
+ // no permission for all tabs -> don't display tree node either
+ continue;
+ }
+
+ $params['section_name'] = $section_name;
+ $section_data =& $sections_helper->getSectionData($section_name);
+ $section_data['label'] = $folder_label; // use folder label in tree
+ $section_data['is_tab'] = 1;
+ }
+ else {
+ if ($section_data && isset($section_data['perm_prefix'])) {
+ // this section uses other section permissions
+ $section_name = $this->Application->getUnitOption($section_data['perm_prefix'].'.main', 'PermSection');
+ }
+
+ if (!$this->Application->CheckPermission($section_name.'.view', 1)) continue;
+ }
+
+ $params['children_count'] = isset($section_data['children']) ? count($section_data['children']) : 0;
+
+ $template = $section_data['url']['t'];
+ unset($section_data['url']['t']);
+
+ $section_data['section_url'] = $this->Application->HREF($template, '', $section_data['url']);
+
+ $late_load = getArrayValue($section_data, 'late_load');
+ if ($late_load) {
+ $t = $late_load['t'];
+ unset($late_load['t']);
+ $section_data['late_load'] = $this->Application->HREF($t, '', $late_load);
+ $params['children_count'] = 99;
+ }
+ else {
+ $section_data['late_load'] = '';
+ }
+
+ $ret .= $this->Application->ParseBlock( array_merge_recursive2($params, $section_data) );
+ $params['section_name'] = $section_name;
+ }
+
+ return preg_replace("/\r\n|\n/", '', $ret);
+ }
+
+ function ListSectionPermissions($params)
+ {
+ $section_name = isset($params['section_name']) ? $params['section_name'] : $this->Application->GetVar('section_name');
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ $section_data =& $sections_helper->getSectionData($section_name);
+
+ $block_params = array_merge_recursive2($section_data, Array('name' => $params['render_as'], 'section_name' => $section_name));
+
+ $ret = '';
+ foreach ($section_data['permissions'] as $perm_name) {
+ if (preg_match('/^advanced:(.*)/', $perm_name) != $params['type']) continue;
+ $block_params['perm_name'] = $perm_name;
+ $ret .= $this->Application->ParseBlock($block_params);
+ }
+ return $ret;
+ }
+
+ function ModuleInclude($params)
+ {
+ foreach ($params as $param_name => $param_value) {
+ $params[$param_name] = replaceModuleSection($param_value);
+ }
+
+ return $this->Application->ProcessParsedTag('m', 'ModuleInclude', $params);
+ }
+
+ function TodayDate($params)
+ {
+ return date($params['format']);
+ }
+
+ function TreeEditWarrning($params)
+ {
+ $ret = $this->Application->Phrase($params['label']);
+ $ret = str_replace(Array('&lt;', '&gt;', 'br/', 'br /', "\n", "\r"), Array('<', '>', 'br', 'br', '', ''), $ret);
+ if (getArrayValue($params, 'escape')) {
+ $ret = addslashes($ret);
+ }
+ $ret = str_replace('<br>', '\n', $ret);
+ return $ret;
+ }
+
+ /**
+ * Draws section tabs using block name passed
+ *
+ * @param Array $params
+ */
+ function ListTabs($params)
+ {
+ $sections_helper =& $this->Application->recallObject('SectionsHelper');
+ $section_data =& $sections_helper->getSectionData($params['section_name']);
+
+ $ret = '';
+ $block_params = Array('name' => $params['render_as']);
+ ksort($section_data['children'], SORT_NUMERIC);
+ foreach ($section_data['children'] as $priority => $section_name) {
+ if (!$this->Application->CheckPermission($section_name.'.view', 1)) continue;
+
+ $tab_data =& $sections_helper->getSectionData($section_name);
+ $block_params['t'] = $tab_data['url']['t'];
+ $block_params['title'] = $tab_data['label'];
+ $block_params['main_prefix'] = $section_data['SectionPrefix'];
+ $ret .= $this->Application->ParseBlock($block_params);
+ }
+
+
+ return $ret;
+ }
+
+ /**
+ * Returns list of module item tabs that have view permission in current category
+ *
+ * @param Array $params
+ */
+ function ListCatalogTabs($params)
+ {
+ $ret = '';
+ $special = isset($params['special']) ? $params['special'] : '';
+ $replace_main = isset($params['replace_m']) && $params['replace_m'];
+ $skip_prefixes = isset($params['skip_prefixes']) ? explode(',', $params['skip_prefixes']) : Array();
+ $block_params = Array('name' => $params['render_as']);
+ foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
+ $prefix = $module_info['Var'];
+
+ if (in_array($prefix, $skip_prefixes) || !$this->Application->prefixRegistred($prefix) || !$this->Application->getUnitOption($prefix, 'CatalogItem')) continue;
+ if ($prefix == 'm' && $replace_main) $prefix = 'c';
+ $label = $this->Application->getUnitOption($prefix, $params['title_property']);
+ $block_params['title'] = $label;
+ $block_params['prefix'] = $prefix;
+ $ret .= $this->Application->ParseBlock($block_params);
+ }
+ return $ret;
+ }
+
+ function FCKEditor($params)
+ {
+ if (file_exists(FULL_PATH.'/core/cmseditor/fckeditor.php')) {
+ $editor_path = 'core/cmseditor/';
+ }
+ else {
+ $editor_path = 'admin/editor/cmseditor/';
+ }
+ include_once(FULL_PATH.'/'.$editor_path.'/fckeditor.php');
+ $oFCKeditor = new FCKeditor($params['name']);
+ $oFCKeditor->BasePath = BASE_PATH.'/'.$editor_path;
+ $oFCKeditor->Width = $params['width'] ;
+ $oFCKeditor->Height = $params['height'] ;
+ $oFCKeditor->ToolbarSet = 'Advanced' ;
+ $oFCKeditor->Value = '' ;
+ $oFCKeditor->Config = Array(
+ //'UserFilesPath' => $pathtoroot.'kernel/user_files',
+ 'ProjectPath' => BASE_PATH.'/',
+ 'CustomConfigurationsPath' => $this->Application->BaseURL().$editor_path.'fckconfig.js',
+// 'EditorAreaCSS' => $this->Application->BaseURL().'/themes/inportal_site/inc/inportal.css', //GetThemeCSS(),
+ //'StylesXmlPath' => '../../inp_styles.xml',
+// 'Debug' => 1,
+ 'Admin' => 1,
+ 'K4' => 1,
+ );
+ return $oFCKeditor->CreateHtml();
+
+ }
+
+ /**
+ * Allows to construct link for opening any type of catalog item selector
+ *
+ * @param Array $params
+ * @return string
+ */
+ function SelectorLink($params)
+ {
+ $mode = 'catalog';
+ if (isset($params['mode'])) { // {catalog, advanced_view}
+ $mode = $params['mode'];
+ unset($params['mode']);
+ }
+
+ $params['t'] = 'in-portal/item_selector/item_selector_'.$mode;
+
+ $default_params = Array('no_amp' => 1, 'pass' => 'all,'.$params['prefix']);
+ unset($params['prefix']);
+
+ $pass_through = Array();
+ if (isset($params['tabs_dependant'])) { // {yes, no}
+ $pass_through['td'] = $params['tabs_dependant'];
+ unset($params['tabs_dependant']);
+ }
+
+ if (isset($params['selection_mode'])) { // {single, multi}
+ $pass_through['tm'] = $params['selection_mode'];
+ unset($params['selection_mode']);
+ }
+
+ if (isset($params['tab_prefixes'])) { // {all, none, <comma separated prefix list}
+ $pass_through['tp'] = $params['tab_prefixes'];
+ unset($params['tab_prefixes']);
+ }
+
+ if ($pass_through) {
+ // add pass_through to selector url if any
+ $params['pass_through'] = implode(',', array_keys($pass_through));
+ $params = array_merge_recursive2($params, $pass_through);
+ }
+
+ // user can override default parameters (except pass_through of course)
+ $params = array_merge_recursive2($default_params, $params);
+
+ return $this->Application->ProcessParsedTag('m', 't', $params);
+ }
+
+ function TimeFrame($params)
+ {
+ $w = adodb_date('w');
+ $m = adodb_date('m');
+ $y = adodb_date('Y');
+ //FirstDayOfWeek is 0 for Sunday and 1 for Monday
+ $fdow = $this->Application->ConfigValue('FirstDayOfWeek');
+ if ($fdow && $w == 0) $w = 7;
+ $today_start = adodb_mktime(0,0,0,adodb_date('m'),adodb_date('d'),$y);
+ $first_day_of_this_week = $today_start - ($w - $fdow)*86400;
+ $first_day_of_this_month = adodb_mktime(0,0,0,$m,1,$y);
+ $this_quater = ceil($m/3);
+ $this_quater_start = adodb_mktime(0,0,0,$this_quater*3-2,1,$y);
+
+ switch ($params['type']) {
+ case 'last_week_start':
+ $timestamp = $first_day_of_this_week - 86400*7;
+ break;
+ case 'last_week_end':
+ $timestamp = $first_day_of_this_week - 1;
+ break;
+
+ case 'last_month_start':
+ $timestamp = $m == 1 ? adodb_mktime(0,0,0,12,1,$y-1) : adodb_mktime(0,0,0,$m-1,1,$y);
+ break;
+ case 'last_month_end':
+ $timestamp = $first_day_of_this_month = adodb_mktime(0,0,0,$m,1,$y) - 1;
+ break;
+
+ case 'last_quater_start':
+ $timestamp = $this_quater == 1 ? adodb_mktime(0,0,0,10,1,$y-1) : adodb_mktime(0,0,0,($this_quater-1)*3-2,1,$y);
+ break;
+ case 'last_quater_end':
+ $timestamp = $this_quater_start - 1;
+ break;
+
+ case 'last_6_months_start':
+ $timestamp = $m <= 6 ? adodb_mktime(0,0,0,$m+6,1,$y-1) : adodb_mktime(0,0,0,$m-6,1,$y);
+ break;
+
+ case 'last_year_start':
+ $timestamp = adodb_mktime(0,0,0,1,1,$y-1);
+ break;
+ case 'last_year_end':
+ $timestamp = adodb_mktime(23,59,59,12,31,$y-1);
+ break;
+ }
+
+
+ if (isset($params['format'])) {
+ $format = $params['format'];
+ if(preg_match("/_regional_(.*)/", $format, $regs))
+ {
+ $lang =& $this->Application->recallObject('lang.current');
+ $format = $lang->GetDBField($regs[1]);
+ }
+ return adodb_date($format, $timestamp);
+ }
+
+ return $timestamp;
+
+ }
+ function CheckPermCache($params)
+ {
+ if ($this->Conn->GetOne('SELECT Data FROM '.TABLE_PREFIX.'Cache WHERE VarName = \'ForcePermCacheUpdate\'')) {
+ $this->Application->Redirect($params['cache_update_t'], array('continue' => 1));
+ }
+ }
+ /**
+ * Checks if current protocol is SSL
+ *
+ * @param Array $params
+ * @return int
+ */
+ function IsSSL($params)
+ {
+ return (PROTOCOL == 'https://')? 1 : 0;
+ }
+
+ function PrintColumns($params)
+ {
+ $picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
+ $picker_helper->SetGridName($this->Application->GetLinkedVar('grid_name'));
+ /* @var $picker_helper kColumnPickerHelper */
+
+ $main_prefix = $this->Application->RecallVar('main_prefix');
+ $cols = $picker_helper->LoadColumns($main_prefix);
+
+ $o = '';
+ if (isset($params['hidden']) && $params['hidden']) {
+ foreach ($cols['hidden_fields'] as $col) {
+ $title = $this->Application->Phrase($cols['titles'][$col]);
+ $o .= "<option value='$col'>".$title;
+ }
+ }
+ else {
+ foreach ($cols['order'] as $col) {
+ if (in_array($col, $cols['hidden_fields'])) continue;
+ $title = $this->Application->Phrase($cols['titles'][$col]);
+ $o .= "<option value='$col'>".$title;
+ }
+ }
+ return $o;
+ }
+
+ /**
+ * Allows to set popup size (key - current template name)
+ *
+ * @param Array $params
+ */
+ function SetPopupSize($params)
+ {
+ if (!$this->UsePopups($params)) return ;
+
+ $width = $params['width'];
+ $height = $params['height'];
+
+ if ($this->Application->GetVar('ajax') == 'yes') {
+ // during AJAX request just output size
+ die($width.'x'.$height);
+ }
+
+ $t = $this->Application->GetVar('t');
+ $sql = 'SELECT *
+ FROM '.TABLE_PREFIX.'PopupSizes
+ WHERE TemplateName = '.$this->Conn->qstr($t);
+ $popup_info = $this->Conn->GetRow($sql);
+ if (!$popup_info) {
+ // create new popup size record
+ $fields_hash = Array (
+ 'TemplateName' => $t,
+ 'PopupWidth' => $width,
+ 'PopupHeight' => $height,
+ );
+ $this->Conn->doInsert($fields_hash, TABLE_PREFIX.'PopupSizes');
+ }
+ elseif ($popup_info['PopupWidth'] != $width || $popup_info['PopupHeight'] != $height) {
+ // popup found and size in tag differs from one in db -> update in db
+ $fields_hash = Array (
+ 'PopupWidth' => $width,
+ 'PopupHeight' => $height,
+ );
+ $this->Conn->doUpdate($fields_hash, TABLE_PREFIX.'PopupSizes', 'PopupId = '.$popup_info['PopupId']);
+ }
+ }
+
+ /**
+ * Returns popup size (by template), if not cached, then parse template to get value
+ *
+ * @param Array $params
+ * @return string
+ */
+ function GetPopupSize($params)
+ {
+ $t = $this->Application->GetVar('template_name');
+ $sql = 'SELECT *
+ FROM '.TABLE_PREFIX.'PopupSizes
+ WHERE TemplateName = '.$this->Conn->qstr($t);
+ $popup_info = $this->Conn->GetRow($sql);
+ if (!$popup_info) {
+ $this->Application->InitParser();
+ $this->Application->ParseBlock(array('name' => $t)); // dies when SetPopupSize tag found & in ajax requrest
+ return '750x400'; // tag SetPopupSize not found in template -> use default size
+ }
+ return $popup_info['PopupWidth'].'x'.$popup_info['PopupHeight'];
+ }
+
+ function UsePopups($params)
+ {
+ return (int)$this->Application->ConfigValue('UsePopups');
+ }
+
+ function UseToolbarLabels($params)
+ {
+ return (int)$this->Application->ConfigValue('UseToolbarLabels');
+ }
+
+ /**
+ * Checks if debug mode enabled (optionally) and specified constant is on
+ *
+ * @param Array $params
+ * @return bool
+ */
+ function ConstOn($params)
+ {
+ $constant_name = $this->SelectParam($params, 'name,const');
+ $debug_mode = isset($params['debug_mode']) && $params['debug_mode'] ? $this->Application->isDebugMode() : true;
+ return $debug_mode && constOn($constant_name);
+ }
+ }
+
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.29.2/core/units/admin/admin_tag_processor.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.29
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/unlabeled/unlabeled-1.29.2/core/units/email_events/email_events_event_handler.php
===================================================================
--- branches/unlabeled/unlabeled-1.29.2/core/units/email_events/email_events_event_handler.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.29.2/core/units/email_events/email_events_event_handler.php (revision 7647)
@@ -0,0 +1,275 @@
+<?php
+
+ class EmailEventsEventsHandler extends kDBEventHandler
+ {
+
+ /**
+ * Allows to override standart permission mapping
+ *
+ */
+ function mapPermissions()
+ {
+ parent::mapPermissions();
+ $permissions = Array(
+ 'OnFrontOnly' => Array('self' => 'edit'),
+ 'OnSaveSelected' => Array('self' => 'view'),
+ );
+ $this->permMapping = array_merge($this->permMapping, $permissions);
+ }
+
+ /**
+ * Changes permission section to one from REQUEST, not from config
+ *
+ * @param kEvent $event
+ */
+ function CheckPermission(&$event)
+ {
+ $module = $this->Application->GetVar('module');
+ $module = explode(':', $module, 2);
+
+ if (count($module) == 1) {
+ $main_prefix = $this->Application->findModule('Name', $module[0], 'Var');
+ }
+ else {
+ $exceptions = Array('Category' => 'c', 'Users' => 'u');
+ $main_prefix = $exceptions[ $module[1] ];
+ }
+ $section = $this->Application->getUnitOption($main_prefix.'.email', 'PermSection');
+
+ $event->setEventParam('PermSection', $section);
+ return parent::CheckPermission($event);
+ }
+
+ /**
+ * Apply any custom changes to list's sql query
+ *
+ * @param kEvent $event
+ * @access protected
+ * @see OnListBuild
+ */
+ function SetCustomQuery(&$event)
+ {
+ if ($event->Special == 'module') {
+ $object =& $event->getObject();
+ $module = $this->Application->GetVar('module');
+ $object->addFilter('module_filter', '%1$s.Module = '.$this->Conn->qstr($module));
+ }
+ }
+
+ /**
+ * Sets status Front-End Only to selected email events
+ *
+ * @param kEvent $event
+ */
+ function OnFrontOnly(&$event)
+ {
+ $ids = implode(',', $this->StoreSelectedIDs($event));
+
+ $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
+ $sql = 'UPDATE '.$table_name.'
+ SET Enabled = 2
+ WHERE EventId IN ('.$ids.')';
+ $this->Conn->Query($sql);
+ }
+
+ /**
+ * Sets selected user to email events selected
+ *
+ * @param kEvent $event
+ */
+ function OnSelectUser(&$event)
+ {
+ $items_info = $this->Application->GetVar('u');
+ if ($items_info) {
+ $user_id = array_shift( array_keys($items_info) );
+
+ $selected_ids = $this->getSelectedIDs($event, true);
+
+ $ids = $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids');
+ $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField');
+ $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName');
+ $sql = 'UPDATE '.$table_name.'
+ SET '.$this->Application->RecallVar('dst_field').' = '.$user_id.'
+ WHERE '.$id_field.' IN ('.$ids.')';
+ $this->Conn->Query($sql);
+ }
+
+ $this->finalizePopup($event);
+ }
+
+ /**
+ * Saves selected ids to session
+ *
+ * @param kEvent $event
+ */
+ function OnSaveSelected(&$event)
+ {
+ $this->StoreSelectedIDs($event);
+ }
+
+ /**
+ * Raised when email message shoul be sent
+ *
+ * @param kEvent $event
+ */
+ function OnEmailEvent(&$event){
+
+ $email_event = $event->getEventParam('EmailEventName');
+ if( strpos($email_event, '_') !== false )
+ {
+ trigger_error('<span class="debug_error">Invalid email event name</span> <b>'.$email_event.'</b>. Use only <b>UPPERCASE characters</b> and <b>dots</b> as email event names', E_USER_ERROR);
+ }
+
+ $to_user_id = $event->getEventParam('EmailEventToUserId');
+ $email_event_type = $event->getEventParam('EmailEventType');
+
+ $message_object = &$this->Application->recallObject('emailmessages', null, Array('skip_autoload' => true));
+ $event_table = $this->Application->getUnitOption('emailevents', 'TableName');
+
+ $event_object =& $event->getObject( Array('skip_autoload' => true) );
+ $event_object->Load(array('Event'=>$email_event, 'Type'=>$email_event_type));
+
+ $event_id = $event_object->GetDBField('EventId');
+ $from_user_id = $event_object->GetDBField('FromUserId');
+ $type = $event_object->GetDBField('Type');
+ $enabled = $event_object->GetDBField('Enabled');
+
+ $direct_send_params = $event->getEventParam('DirectSendParams');
+
+ if ($enabled == 0) return; // disabled event
+ if ($enabled == 2 && $this->Application->IsAdmin() ) return; // event only for front-end
+
+ if ($type == 1){
+ // For type "Admin" recipient is a user from field FromUserId which means From/To user in Email events list
+ $to_user_id = $from_user_id;
+ $from_user_id = -1;
+ }
+ /*
+ if (!($to_user_id > 0) && !$direct_send_params){
+ // if we can not determine recepient we will not send email
+ return;
+ }
+ */
+ //Parse Message Template
+ $message_object->Load(array('EventId' => $event_id, 'LanguageId' => $this->Application->GetVar('m_lang')));
+ $message_type = $message_object->GetDBField('MessageType');
+
+ $email_object = &$this->Application->recallObject('kEmailMessage');
+ $email_object->Clear();
+
+ // add footer: begin
+ $sql = 'SELECT em.Template
+ FROM '.$message_object->TableName.' em
+ LEFT JOIN '.TABLE_PREFIX.'Events e ON e.EventId = em.EventId
+ WHERE em.LanguageId = '.$message_object->GetDBField('LanguageId').' AND e.Event = "COMMON.FOOTER"';
+ $footer = explode("\n\n", $this->Conn->GetOne($sql));
+ $footer = $message_object->GetDBField('MessageType') == 'text' ? $email_object->convertHTMLtoPlain($footer[1]) : $footer[1];
+ $message_template = $message_object->GetDBField('Template')."\r\n".$footer;
+ // add footer: end
+
+ $from_user_object = &$this->Application->recallObject('u.email-from', null, Array('skip_autoload' => true));
+ $from_user_object->Load($from_user_id);
+ // here if we don't have from_user loaded, it takes a default user from config values
+ if ( $from_user_object->IsLoaded() ) {
+ $from_user_email = $from_user_object->GetDBField('Email');
+ $from_user_name = trim($from_user_object->GetDBField('FirstName').' '.$from_user_object->GetDBField('LastName'));
+ }
+ else {
+ $from_user_email = $this->Application->ConfigValue('Smtp_AdminMailFrom');
+ }
+
+ $to_user_object = &$this->Application->recallObject('u.email-to', null, Array('skip_autoload' => true));
+ $to_user_object->Load($to_user_id);
+ $to_user_email = $to_user_object->GetDBField('Email');
+ $to_user_name = trim($to_user_object->GetDBField('FirstName').' '.$to_user_object->GetDBField('LastName'));
+
+ if($direct_send_params){
+ $to_user_email = ( $direct_send_params['to_email'] ? $direct_send_params['to_email'] : $to_user_email );
+ $to_user_name = ( $direct_send_params['to_name'] ? $direct_send_params['to_name'] : $to_user_name );
+ $from_user_email = ( $direct_send_params['from_email'] ? $direct_send_params['from_email'] : $from_user_email);
+ $from_user_name = ( $direct_send_params['from_name'] ? $direct_send_params['from_name'] : $from_user_name );
+ $message_body_additional = $direct_send_params['message'];
+ }
+
+ $to_user_email = $to_user_email ? $to_user_email : $this->Application->ConfigValue('Smtp_AdminMailFrom');
+
+ $this->Application->makeClass('Template');
+ $this->Application->InitParser();
+ $parser_params = $this->Application->Parser->Params;
+ $direct_send_params['message_text'] = $message_body_additional;
+ $this->Application->Parser->Params = array_merge_recursive2($this->Application->Parser->Params, $direct_send_params);
+ $message_template = str_replace('<inp:touser _Field="password"', '<inp2:u_Field name="Password_plain"', $message_template);
+ $message_template = str_replace('<inp:touser _Field="UserName"', '<inp2:u_Field name="Login"', $message_template);
+ $message_template = str_replace('<inp:touser _Field', '<inp2:u_Field name', $message_template);
+ $message_template = $this->Application->Parser->Parse($message_template, 'email_template', 0);
+ $this->Application->Parser->Params = $parser_params;
+
+ $message_template = str_replace("\r", "", $message_template);
+
+ list($message_headers, $message_body) = explode("\n\n", $message_template, 2);
+
+
+ $email_object->setFrom($from_user_email, $from_user_name);
+ $email_object->setTo($to_user_email, $to_user_name);
+ $email_object->setSubject('Mail message');
+
+ $email_object->setHeaders($message_headers);
+
+ if ($message_type == 'html'){
+ $email_object->setHTMLBody($message_body);
+ }
+ else {
+ $email_object->setTextBody($message_body);
+ }
+
+ $smtp_object = &$this->Application->recallObject('kSmtpClient');
+ $smtp_object->debug = $this->Application->isDebugMode() && constOn('DBG_SMTP');
+
+ $smtp_server = $this->Application->ConfigValue('Smtp_Server');
+ $smtp_port = $this->Application->ConfigValue('Smtp_Port');
+
+ $smtp_authenticate = $this->Application->ConfigValue('Smtp_Authenticate');
+ if ($smtp_authenticate){
+ $smtp_user = $this->Application->ConfigValue('Smtp_User');
+ $smtp_pass = $this->Application->ConfigValue('Smtp_Pass');
+ }else{
+ $smtp_user = '';
+ $smtp_pass = '';
+ }
+
+
+ if ($smtp_server){
+ if ($email_object->sendSMTP($smtp_object, $smtp_server, $smtp_user, $smtp_pass, $smtp_authenticate)){
+ $event->status=erSUCCESS;
+ }
+ else {
+ $event->status=erFAIL;
+ }
+ }else{
+ if($email_object->send()){
+ $event->status=erSUCCESS;
+ }
+ else {
+ $event->status=erFAIL;
+ }
+ }
+
+ if ($event->status == erSUCCESS){
+ if (!$from_user_name) {
+ $from_user_name = strip_tags( $this->Application->ConfigValue('Site_Name') );
+ }
+ $sql = 'INSERT INTO '.TABLE_PREFIX.'EmailLog SET
+ fromuser = '.$this->Conn->qstr($from_user_name.' ('.$from_user_email.')').',
+ addressto = '.$this->Conn->qstr($to_user_name.' ('.$to_user_email.')').',
+ subject = '.$this->Conn->qstr($email_object->Subject).',
+ timestamp = UNIX_TIMESTAMP(),
+ event = '.$this->Conn->qstr($email_event);
+ $this->Conn->Query($sql);
+ }
+
+ $this->Application->removeObject('u.email-from');
+ $this->Application->removeObject('u.email-to');
+ return $event;
+ }
+ }
+?>
\ No newline at end of file
Property changes on: branches/unlabeled/unlabeled-1.29.2/core/units/email_events/email_events_event_handler.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.29
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property

Event Timeline