Index: trunk/core/kernel/db/dblist.php =================================================================== diff -u -N -r2711 -r2737 --- trunk/core/kernel/db/dblist.php (.../dblist.php) (revision 2711) +++ trunk/core/kernel/db/dblist.php (.../dblist.php) (revision 2737) @@ -32,7 +32,15 @@ */ class kDBList extends kDBBase { + /** + * Holds totals for fields specified in config + * + * @var Array + */ + var $Totals = Array(); + + /** * Description * * @var array @@ -149,7 +157,8 @@ * * @return kDBList */ - function kDBList() { + function kDBList() + { parent::kDBBase(); $this->OrderFields = Array(); @@ -318,6 +327,51 @@ return true; } + function CalculateTotals() + { + $this->Totals = Array(); + + $fields = Array(); + foreach($this->Fields as $field_name => $field_options) + { + $totals = getArrayValue($field_options, 'totals'); + if(!$totals) continue; + + $field_expression = isset($this->CalculatedFields[$field_name]) ? $this->CalculatedFields[$field_name] : '`'.$this->TableName.'`.`'.$field_name.'`'; + $fields[$field_name] = $totals.'('.$field_expression.') AS '.$field_name.'_'.$totals; + } + + if(!$fields) return false; + + $sql = $this->GetSelectSQL(true, false); + $fields = implode(', ', $fields); + + if ( preg_match("/DISTINCT(.*?)FROM(?!_)/is",$sql,$regs ) ) + { + $sql = preg_replace("/^.*SELECT DISTINCT(.*?)FROM(?!_)/is", 'SELECT '.$fields.' FROM', $sql); + } + else + { + $sql = preg_replace("/^.*SELECT(.*?)FROM(?!_)/is", 'SELECT '.$fields.' FROM ', $sql); + } + + $totals = $this->Conn->Query($sql); + + foreach($totals as $totals_row) + { + foreach($totals_row as $total_field => $field_value) + { + if(!isset($this->Totals[$total_field])) $this->Totals[$total_field] = 0; + $this->Totals[$total_field] += $field_value; + } + } + } + + function getTotal($field, $total_function) + { + return $this->Totals[$field.'_'.$total_function]; + } + /** * Builds full select query except for LIMIT clause * Index: trunk/kernel/units/visits/visits_event_handler.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/kernel/units/visits/visits_event_handler.php (.../visits_event_handler.php) (revision 2698) +++ trunk/kernel/units/visits/visits_event_handler.php (.../visits_event_handler.php) (revision 2737) @@ -20,20 +20,8 @@ $this->Application->SetVar('visits_id', $object->GetID() ); } } - /** - * Search - * - * @param kEvent $event - */ - function OnSearch(&$event){ - parent::OnSearch($event); - - - } - - /** * Apply any custom changes to list's sql query * * @param kEvent $event @@ -45,7 +33,8 @@ $object =& $event->getObject(); $types = $event->getEventParam('types'); - if ($types=='myvisitors'){ + if($types == 'myvisitors') + { $user_id = $this->Application->GetVar('u_id'); $object->addFilter('myitems_user1','au.PortalUserId = '.$user_id); @@ -55,16 +44,14 @@ } - if ($types=='myvisitororders' && $event->Special=='incommerce'){ - + if($types == 'myvisitororders' && $event->Special == 'incommerce') + { $user_id = $this->Application->GetVar('u_id'); $object->addFilter('myitems_orders','ord.OrderId IS NOT NULL'); $object->addFilter('myitems_user1','au.PortalUserId = '.$user_id); $object->addFilter('myitems_user2','au.PortalUserId >0'); $object->addFilter('myitems_orders_processed','ord.Status = 4'); - } - } /** @@ -79,12 +66,15 @@ function prepareObject(&$object, &$event) { $types = $event->getEventParam('types'); - if(method_exists($object, 'AddGroupByField')){ - if ( ($types=='myvisitors' || !$types) && $object->Special=='incommerce'){ - $object->addCalculatedField('OrderTotalAmountSum', 'SUM(ord.SubTotal+ord.ShippingCost+ord.VAT)'); - $object->addCalculatedField('OrderAffiliateCommissionSum', 'SUM(ord.AffiliateCommission)'); - $object->addCalculatedField('OrderCountByVisit', 'COUNT(OrderId)'); + if(method_exists($object, 'AddGroupByField')) + { + if( ($types == 'myvisitors' || !$types) && $object->Special == 'incommerce') + { + $object->addCalculatedField('OrderTotalAmountSum', 'SUM(IF(ord.Status = 4, ord.SubTotal+ord.ShippingCost+ord.VAT, 0))'); + $object->addCalculatedField('OrderAffiliateCommissionSum', 'SUM( IF(ord.Status = 4,ord.AffiliateCommission,0))'); + $object->addCalculatedField('OrderCountByVisit', 'COUNT(OrderId)'); } + if (!$types){ $object->AddGroupByField('%1$s.VisitId'); } Index: trunk/core/units/visits/visits_event_handler.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/core/units/visits/visits_event_handler.php (.../visits_event_handler.php) (revision 2698) +++ trunk/core/units/visits/visits_event_handler.php (.../visits_event_handler.php) (revision 2737) @@ -20,20 +20,8 @@ $this->Application->SetVar('visits_id', $object->GetID() ); } } - /** - * Search - * - * @param kEvent $event - */ - function OnSearch(&$event){ - parent::OnSearch($event); - - - } - - /** * Apply any custom changes to list's sql query * * @param kEvent $event @@ -45,7 +33,8 @@ $object =& $event->getObject(); $types = $event->getEventParam('types'); - if ($types=='myvisitors'){ + if($types == 'myvisitors') + { $user_id = $this->Application->GetVar('u_id'); $object->addFilter('myitems_user1','au.PortalUserId = '.$user_id); @@ -55,16 +44,14 @@ } - if ($types=='myvisitororders' && $event->Special=='incommerce'){ - + if($types == 'myvisitororders' && $event->Special == 'incommerce') + { $user_id = $this->Application->GetVar('u_id'); $object->addFilter('myitems_orders','ord.OrderId IS NOT NULL'); $object->addFilter('myitems_user1','au.PortalUserId = '.$user_id); $object->addFilter('myitems_user2','au.PortalUserId >0'); $object->addFilter('myitems_orders_processed','ord.Status = 4'); - } - } /** @@ -79,12 +66,15 @@ function prepareObject(&$object, &$event) { $types = $event->getEventParam('types'); - if(method_exists($object, 'AddGroupByField')){ - if ( ($types=='myvisitors' || !$types) && $object->Special=='incommerce'){ - $object->addCalculatedField('OrderTotalAmountSum', 'SUM(ord.SubTotal+ord.ShippingCost+ord.VAT)'); - $object->addCalculatedField('OrderAffiliateCommissionSum', 'SUM(ord.AffiliateCommission)'); - $object->addCalculatedField('OrderCountByVisit', 'COUNT(OrderId)'); + if(method_exists($object, 'AddGroupByField')) + { + if( ($types == 'myvisitors' || !$types) && $object->Special == 'incommerce') + { + $object->addCalculatedField('OrderTotalAmountSum', 'SUM(IF(ord.Status = 4, ord.SubTotal+ord.ShippingCost+ord.VAT, 0))'); + $object->addCalculatedField('OrderAffiliateCommissionSum', 'SUM( IF(ord.Status = 4,ord.AffiliateCommission,0))'); + $object->addCalculatedField('OrderCountByVisit', 'COUNT(OrderId)'); } + if (!$types){ $object->AddGroupByField('%1$s.VisitId'); } Index: trunk/core/kernel/parser/template_parser.php =================================================================== diff -u -N -r2714 -r2737 --- trunk/core/kernel/parser/template_parser.php (.../template_parser.php) (revision 2714) +++ trunk/core/kernel/parser/template_parser.php (.../template_parser.php) (revision 2737) @@ -388,6 +388,9 @@ $this->CompiledBuffer .= '<'.'?php'."\n"; $this->CompiledBuffer .= 'global $application;'."\n"; + + $this->CompiledBuffer .= '$params =& $application->Parser->Params;'."\n"; + $this->CompiledBuffer .= '$o = \'\';'."\n"; } Index: trunk/core/units/visits/visits_config.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/core/units/visits/visits_config.php (.../visits_config.php) (revision 2698) +++ trunk/core/units/visits/visits_config.php (.../visits_config.php) (revision 2737) @@ -29,12 +29,12 @@ ), 'incommerce' => Array ( 'UserName' => 'IF( ISNULL(u.Login), IF (%1$s.PortalUserId = -1, \'root\', IF (%1$s.PortalUserId = -2, \'Guest\', \'n/a\')), u.Login)', - 'AffiliateUser' => 'IF( LENGTH(au.Login),au.Login,\'!la_None!\')', - 'AffiliatePortalUserId' => 'af.PortalUserId', - 'OrderTotalAmount' => '(ord.SubTotal+ord.ShippingCost+ord.VAT)', - 'OrderAffiliateCommission' => 'ord.AffiliateCommission', - 'OrderNumber' => 'CONCAT(LPAD(Number,6,0),\'-\',LPAD(SubNumber,3,0) )', - 'OrderId' => 'ord.OrderId', + 'AffiliateUser' => 'IF( LENGTH(au.Login),au.Login,\'!la_None!\')', + 'AffiliatePortalUserId' => 'af.PortalUserId', + 'OrderTotalAmount' => 'IF(ord.Status = 4, ord.SubTotal+ord.ShippingCost+ord.VAT, 0)', + 'OrderAffiliateCommission' => 'IF(ord.Status = 4, ord.AffiliateCommission, 0)', + 'OrderNumber' => 'CONCAT(LPAD(Number,6,0),\'-\',LPAD(SubNumber,3,0) )', + 'OrderId' => 'ord.OrderId', ), ), @@ -68,7 +68,7 @@ ), 'Fields' => Array( - 'VisitId' => Array(), + 'VisitId' => Array('type' => 'int'), 'VisitDate' => Array('type' => 'int', 'formatter'=>'kDateFormatter', 'custom_filter' => 'date_range', 'not_null' => '1','default' => '0'), 'Referer' => Array('type' => 'string','not_null' => '1','default' => ''), 'IPAddress' => Array('type' => 'string','not_null' => '1','default' => ''), @@ -77,13 +77,14 @@ ), 'VirtualFields' => Array( - 'UserName' => Array('type'=>'string'), - 'AffiliateUser' => Array('type'=>'string'), - 'AffiliatePortalUserId' => Array('type'=>'int'), - 'OrderTotalAmount' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00'), + 'UserName' => Array('type'=>'string'), + 'AffiliateUser' => Array('type'=>'string'), + 'AffiliatePortalUserId' => Array('type'=>'int'), + 'OrderTotalAmount' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00', 'totals' => 'SUM'), 'OrderTotalAmountSum' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00'), - 'OrderAffiliateCommission' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), - 'OrderAffiliateCommissionSum' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), + 'OrderAffiliateCommission' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000', 'totals' => 'SUM'), + 'OrderAffiliateCommissionSum' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), + 'OrderId' => Array('type' => 'int', 'default' => '0'), ), 'Grids' => Array( @@ -94,10 +95,7 @@ 'IPAddress' => Array( 'title'=>'la_col_IPAddress' ), 'Referer' => Array( 'title'=>'la_col_Referer', 'data_block' => 'grid_referer_td' ), 'UserName' => Array('title' => 'la_col_Username', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId'), -/* 'AffiliateUser' => Array( 'title' => 'la_col_AffiliateUser', 'data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId'), - 'OrderTotalAmountSum' => Array( 'title' => 'la_col_OrderTotal'), - 'OrderAffiliateCommissionSum' => Array( 'title' => 'la_col_Commission'), -*/ ), + ), ), 'visitsincommerce' => Array( 'Icons' => Array('default'=>'icon16_custom.gif'), // icons for each StatusField values, if no matches or no statusfield selected, then "default" icon is used Index: trunk/core/kernel/db/db_event_handler.php =================================================================== diff -u -N -r2663 -r2737 --- trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 2663) +++ trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 2737) @@ -317,7 +317,6 @@ */ function OnListBuild(&$event) { - //$event->setPseudoClass('_List'); $object =& $event->getObject(); $this->dbBuild($object,$event); @@ -328,13 +327,13 @@ $object->linkToParent( $this->getMainSpecial($event) ); -// $object->linkToParent($special); - $this->AddFilters($event); $this->SetCustomQuery($event); // new!, use this for dynamic queries based on specials for ex. $this->SetPagination($event); $this->SetSorting($event); + $object->CalculateTotals(); + $actions =& $this->Application->recallObject('kActions'); $actions->Set('remove_specials['.$event->Prefix_Special.']', '0'); $actions->Set($event->Prefix_Special.'_GoTab', ''); Index: trunk/kernel/units/visits/visits_config.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/kernel/units/visits/visits_config.php (.../visits_config.php) (revision 2698) +++ trunk/kernel/units/visits/visits_config.php (.../visits_config.php) (revision 2737) @@ -29,12 +29,12 @@ ), 'incommerce' => Array ( 'UserName' => 'IF( ISNULL(u.Login), IF (%1$s.PortalUserId = -1, \'root\', IF (%1$s.PortalUserId = -2, \'Guest\', \'n/a\')), u.Login)', - 'AffiliateUser' => 'IF( LENGTH(au.Login),au.Login,\'!la_None!\')', - 'AffiliatePortalUserId' => 'af.PortalUserId', - 'OrderTotalAmount' => '(ord.SubTotal+ord.ShippingCost+ord.VAT)', - 'OrderAffiliateCommission' => 'ord.AffiliateCommission', - 'OrderNumber' => 'CONCAT(LPAD(Number,6,0),\'-\',LPAD(SubNumber,3,0) )', - 'OrderId' => 'ord.OrderId', + 'AffiliateUser' => 'IF( LENGTH(au.Login),au.Login,\'!la_None!\')', + 'AffiliatePortalUserId' => 'af.PortalUserId', + 'OrderTotalAmount' => 'IF(ord.Status = 4, ord.SubTotal+ord.ShippingCost+ord.VAT, 0)', + 'OrderAffiliateCommission' => 'IF(ord.Status = 4, ord.AffiliateCommission, 0)', + 'OrderNumber' => 'CONCAT(LPAD(Number,6,0),\'-\',LPAD(SubNumber,3,0) )', + 'OrderId' => 'ord.OrderId', ), ), @@ -68,7 +68,7 @@ ), 'Fields' => Array( - 'VisitId' => Array(), + 'VisitId' => Array('type' => 'int'), 'VisitDate' => Array('type' => 'int', 'formatter'=>'kDateFormatter', 'custom_filter' => 'date_range', 'not_null' => '1','default' => '0'), 'Referer' => Array('type' => 'string','not_null' => '1','default' => ''), 'IPAddress' => Array('type' => 'string','not_null' => '1','default' => ''), @@ -77,13 +77,14 @@ ), 'VirtualFields' => Array( - 'UserName' => Array('type'=>'string'), - 'AffiliateUser' => Array('type'=>'string'), - 'AffiliatePortalUserId' => Array('type'=>'int'), - 'OrderTotalAmount' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00'), + 'UserName' => Array('type'=>'string'), + 'AffiliateUser' => Array('type'=>'string'), + 'AffiliatePortalUserId' => Array('type'=>'int'), + 'OrderTotalAmount' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00', 'totals' => 'SUM'), 'OrderTotalAmountSum' => Array('type' => 'float', 'formatter'=>'kFormatter', 'format'=>'%01.2f', 'not_null' => '1','default' => '0.00'), - 'OrderAffiliateCommission' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), - 'OrderAffiliateCommissionSum' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), + 'OrderAffiliateCommission' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000', 'totals' => 'SUM'), + 'OrderAffiliateCommissionSum' => Array('type' => 'double', 'formatter'=>'kFormatter','format'=>'%.02f', 'not_null' => '1','default' => '0.0000'), + 'OrderId' => Array('type' => 'int', 'default' => '0'), ), 'Grids' => Array( @@ -94,10 +95,7 @@ 'IPAddress' => Array( 'title'=>'la_col_IPAddress' ), 'Referer' => Array( 'title'=>'la_col_Referer', 'data_block' => 'grid_referer_td' ), 'UserName' => Array('title' => 'la_col_Username', 'data_block' => 'grid_userlink_td', 'user_field' => 'PortalUserId'), -/* 'AffiliateUser' => Array( 'title' => 'la_col_AffiliateUser', 'data_block' => 'grid_userlink_td', 'user_field' => 'AffiliatePortalUserId'), - 'OrderTotalAmountSum' => Array( 'title' => 'la_col_OrderTotal'), - 'OrderAffiliateCommissionSum' => Array( 'title' => 'la_col_Commission'), -*/ ), + ), ), 'visitsincommerce' => Array( 'Icons' => Array('default'=>'icon16_custom.gif'), // icons for each StatusField values, if no matches or no statusfield selected, then "default" icon is used Index: trunk/kernel/units/visits/visits_tag_processor.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/kernel/units/visits/visits_tag_processor.php (.../visits_tag_processor.php) (revision 2698) +++ trunk/kernel/units/visits/visits_tag_processor.php (.../visits_tag_processor.php) (revision 2737) @@ -22,87 +22,102 @@ } } - function GetTotalAffiliateVisits($params){ - $object_user = &$this->Application->recallObject('u'); - - $sql='SELECT COUNT(*) FROM '.TABLE_PREFIX.'Visits vis - LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON (vis.AffiliateId = af.AffiliateId) - WHERE af.PortalUserId = '.$object_user->GetDBField('PortalUserId'); - return $this->Conn->GetOne($sql); - + function getDateLimitClause($field) + { + $search_filter = $this->Application->RecallVar( $this->getPrefixSpecial().'_search_filter'); + if($search_filter) + { + $search_filter = unserialize($search_filter); + return $search_filter[$field]['value']; + } + return ''; } - function AffiliateOrderInfo($params){ - $object_user = &$this->Application->recallObject('u'); + function AffiliateOrderInfo($params) + { + $list =& $this->GetList($params); - $sql='SELECT COUNT(ord.OrderId) as OrderCount, SUM(AffiliateCommission) as TotalCommission, SUM(SubTotal+ShippingCost+VAT) as TotalAmount - FROM '.TABLE_PREFIX.'Orders ord - LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON (vis.AffiliateId = af.AffiliateId) - LEFT JOIN '.TABLE_PREFIX.'Visits vis ON (ord.VisitId = vis.VisitId) - WHERE af.PortalUserId = '.$object_user->GetDBField('PortalUserId').' - AND ord.Status = 4 - GROUP BY af.PortalUserId - '; + $date_limit = str_replace($list->TableName, 'vis', $this->getDateLimitClause('VisitDate') ); - $info = $this->Conn->GetRow($sql); + $affil_table = $this->Application->getUnitOption('affil', 'TableName'); + $affil_idfield = $this->Application->getUnitOption('affil', 'IDField'); + $sql = 'SELECT '.$affil_idfield.' FROM '.$affil_table.' WHERE PortalUserId = '.$this->Application->GetVar('u_id'); + $affiliate_id = $this->Conn->GetOne($sql); - $params_info = $this->prepareTagParams($params); - $params_info['name'] = $params_info['render_as']; - if (!$info['OrderCount']) $info['OrderCount'] = 0; - if (!$info['TotalAmount']) $info['TotalAmount'] = 0; - if (!$info['AffiliateCommission']) $info['AffiliateCommission'] = 0; + $sql = 'SELECT COUNT(DISTINCT vis.PortalUserId) AS TotalVisitors, COUNT(ord.OrderId) AS OrderCount + FROM '.$list->TableName.' vis + LEFT JOIN '.TABLE_PREFIX.'Orders ord ON ord.VisitId = vis.VisitId + WHERE (vis.AffiliateId = '.$affiliate_id.') AND (ord.Status = '.ORDER_STATUS_PROCESSED.')'.($date_limit ? ' AND '.$date_limit : ''); + + $result = $this->Conn->GetRow($sql); + $result['OrderTotalAmount'] = $list->getTotal('OrderTotalAmount', 'SUM'); + $result['OrderAffiliateCommission'] = $list->getTotal('OrderAffiliateCommission', 'SUM'); - $params_info = array_merge_recursive2($params_info, $info); - $params_info['TotalVisits'] = $this->GetTotalAffiliateVisits($params); + $block_params = $this->prepareTagParams($params); + $block_params['name'] = $params['render_as']; + + $format_fields = Array('OrderTotalAmount', 'OrderAffiliateCommission'); - //$order_autoload = $this->Application->getUnitOption('ord', 'AutoLoad'); - //$this->Application->setUnitOption('ord', 'AutoLoad', false); - $order_object = &$this->Application->recallObject('ord.totals', null, array('skip_autoload'=>true)); - //$this->Application->setUnitOption('ord', 'AutoLoad', $order_autoload); - - $order_object->SetDBField('AffiliateCommission', $params_info['TotalCommission']); - $order_object->SetDBField('TotalAmount', $params_info['TotalAmount']); - - $fields_to_convert = array('AffiliateCommission', 'TotalAmount'); - - - if( $this->HasParam($params, 'currency') ) - { - $iso = $this->GetISO($params['currency']); - foreach($fields_to_convert as $key => $field){ + if( $this->HasParam($params, 'currency') ) + { $iso = $this->GetISO($params['currency']); - $original = $order_object->GetDBField($field); - $value = $this->ConvertCurrency($original, $iso); - $order_object->SetDBField($field, $value); - + foreach($format_fields as $format_field) + { + $value = sprintf($list->Fields[$format_field]['format'], $result[$format_field]); + $value = $this->ConvertCurrency($value, $iso); + $value = $this->AddCurrencySymbol($value, $iso); + $result[$format_field] = $value; + } } - $params_info['TotalCommission'] = $this->AddCurrencySymbol($order_object->GetField('AffiliateCommission'), $iso); - $params_info['TotalAmount'] = $this->AddCurrencySymbol($order_object->GetField('TotalAmount'), $iso); - } - + $block_params = array_merge_recursive2($block_params, $result); - - - return $this->Application->ParseBlock($params_info); - + return $this->Application->ParseBlock($block_params); } - function ListVisitors($params){ - + + /*function ShowTotals($params) + { + $list =& $this->GetList($params); + $block_params = $this->prepareTagParams($params); + $block_params = array_merge_recursive2($block_params, $list->Totals); + $block_params['name'] = $this->SelectParam($params, 'render_as,block'); + return $this->Application->ParseBlock($block_params); + }*/ + + function ListVisitors($params) + { $o = ''; $params['render_as'] = $params['item_render_as']; $o_visitors = $this->PrintList2($params); - if ($o_visitors){ + if($o_visitors) + { + $header = ''; + $footer = ''; - $visitors_params = array('name' => $params['header_render_as']); - $o = $this->Application->ParseBlock($visitors_params); - $o .= $o_visitors; + $block_params = $this->prepareTagParams($params); - }else { + $header_block = getArrayValue($params, 'header_render_as'); + if($header_block) + { + $block_params['name'] = $header_block; + $header = $this->Application->ParseBlock($block_params); + } + + $footer_block = getArrayValue($params, 'footer_render_as'); + if($footer_block) + { + $block_params['name'] = $footer_block; + $footer = $this->Application->ParseBlock($block_params); + } + + $o = $header.$o_visitors.$footer; + } + else + { $visitors_params = array('name' => $params['empty_myvisitors_render_as']); $o = $this->Application->ParseBlock($visitors_params); } Index: trunk/core/units/visits/visits_tag_processor.php =================================================================== diff -u -N -r2698 -r2737 --- trunk/core/units/visits/visits_tag_processor.php (.../visits_tag_processor.php) (revision 2698) +++ trunk/core/units/visits/visits_tag_processor.php (.../visits_tag_processor.php) (revision 2737) @@ -22,87 +22,102 @@ } } - function GetTotalAffiliateVisits($params){ - $object_user = &$this->Application->recallObject('u'); - - $sql='SELECT COUNT(*) FROM '.TABLE_PREFIX.'Visits vis - LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON (vis.AffiliateId = af.AffiliateId) - WHERE af.PortalUserId = '.$object_user->GetDBField('PortalUserId'); - return $this->Conn->GetOne($sql); - + function getDateLimitClause($field) + { + $search_filter = $this->Application->RecallVar( $this->getPrefixSpecial().'_search_filter'); + if($search_filter) + { + $search_filter = unserialize($search_filter); + return $search_filter[$field]['value']; + } + return ''; } - function AffiliateOrderInfo($params){ - $object_user = &$this->Application->recallObject('u'); + function AffiliateOrderInfo($params) + { + $list =& $this->GetList($params); - $sql='SELECT COUNT(ord.OrderId) as OrderCount, SUM(AffiliateCommission) as TotalCommission, SUM(SubTotal+ShippingCost+VAT) as TotalAmount - FROM '.TABLE_PREFIX.'Orders ord - LEFT JOIN '.TABLE_PREFIX.'Affiliates af ON (vis.AffiliateId = af.AffiliateId) - LEFT JOIN '.TABLE_PREFIX.'Visits vis ON (ord.VisitId = vis.VisitId) - WHERE af.PortalUserId = '.$object_user->GetDBField('PortalUserId').' - AND ord.Status = 4 - GROUP BY af.PortalUserId - '; + $date_limit = str_replace($list->TableName, 'vis', $this->getDateLimitClause('VisitDate') ); - $info = $this->Conn->GetRow($sql); + $affil_table = $this->Application->getUnitOption('affil', 'TableName'); + $affil_idfield = $this->Application->getUnitOption('affil', 'IDField'); + $sql = 'SELECT '.$affil_idfield.' FROM '.$affil_table.' WHERE PortalUserId = '.$this->Application->GetVar('u_id'); + $affiliate_id = $this->Conn->GetOne($sql); - $params_info = $this->prepareTagParams($params); - $params_info['name'] = $params_info['render_as']; - if (!$info['OrderCount']) $info['OrderCount'] = 0; - if (!$info['TotalAmount']) $info['TotalAmount'] = 0; - if (!$info['AffiliateCommission']) $info['AffiliateCommission'] = 0; + $sql = 'SELECT COUNT(DISTINCT vis.PortalUserId) AS TotalVisitors, COUNT(ord.OrderId) AS OrderCount + FROM '.$list->TableName.' vis + LEFT JOIN '.TABLE_PREFIX.'Orders ord ON ord.VisitId = vis.VisitId + WHERE (vis.AffiliateId = '.$affiliate_id.') AND (ord.Status = '.ORDER_STATUS_PROCESSED.')'.($date_limit ? ' AND '.$date_limit : ''); + + $result = $this->Conn->GetRow($sql); + $result['OrderTotalAmount'] = $list->getTotal('OrderTotalAmount', 'SUM'); + $result['OrderAffiliateCommission'] = $list->getTotal('OrderAffiliateCommission', 'SUM'); - $params_info = array_merge_recursive2($params_info, $info); - $params_info['TotalVisits'] = $this->GetTotalAffiliateVisits($params); + $block_params = $this->prepareTagParams($params); + $block_params['name'] = $params['render_as']; + + $format_fields = Array('OrderTotalAmount', 'OrderAffiliateCommission'); - //$order_autoload = $this->Application->getUnitOption('ord', 'AutoLoad'); - //$this->Application->setUnitOption('ord', 'AutoLoad', false); - $order_object = &$this->Application->recallObject('ord.totals', null, array('skip_autoload'=>true)); - //$this->Application->setUnitOption('ord', 'AutoLoad', $order_autoload); - - $order_object->SetDBField('AffiliateCommission', $params_info['TotalCommission']); - $order_object->SetDBField('TotalAmount', $params_info['TotalAmount']); - - $fields_to_convert = array('AffiliateCommission', 'TotalAmount'); - - - if( $this->HasParam($params, 'currency') ) - { - $iso = $this->GetISO($params['currency']); - foreach($fields_to_convert as $key => $field){ + if( $this->HasParam($params, 'currency') ) + { $iso = $this->GetISO($params['currency']); - $original = $order_object->GetDBField($field); - $value = $this->ConvertCurrency($original, $iso); - $order_object->SetDBField($field, $value); - + foreach($format_fields as $format_field) + { + $value = sprintf($list->Fields[$format_field]['format'], $result[$format_field]); + $value = $this->ConvertCurrency($value, $iso); + $value = $this->AddCurrencySymbol($value, $iso); + $result[$format_field] = $value; + } } - $params_info['TotalCommission'] = $this->AddCurrencySymbol($order_object->GetField('AffiliateCommission'), $iso); - $params_info['TotalAmount'] = $this->AddCurrencySymbol($order_object->GetField('TotalAmount'), $iso); - } - + $block_params = array_merge_recursive2($block_params, $result); - - - return $this->Application->ParseBlock($params_info); - + return $this->Application->ParseBlock($block_params); } - function ListVisitors($params){ - + + /*function ShowTotals($params) + { + $list =& $this->GetList($params); + $block_params = $this->prepareTagParams($params); + $block_params = array_merge_recursive2($block_params, $list->Totals); + $block_params['name'] = $this->SelectParam($params, 'render_as,block'); + return $this->Application->ParseBlock($block_params); + }*/ + + function ListVisitors($params) + { $o = ''; $params['render_as'] = $params['item_render_as']; $o_visitors = $this->PrintList2($params); - if ($o_visitors){ + if($o_visitors) + { + $header = ''; + $footer = ''; - $visitors_params = array('name' => $params['header_render_as']); - $o = $this->Application->ParseBlock($visitors_params); - $o .= $o_visitors; + $block_params = $this->prepareTagParams($params); - }else { + $header_block = getArrayValue($params, 'header_render_as'); + if($header_block) + { + $block_params['name'] = $header_block; + $header = $this->Application->ParseBlock($block_params); + } + + $footer_block = getArrayValue($params, 'footer_render_as'); + if($footer_block) + { + $block_params['name'] = $footer_block; + $footer = $this->Application->ParseBlock($block_params); + } + + $o = $header.$o_visitors.$footer; + } + else + { $visitors_params = array('name' => $params['empty_myvisitors_render_as']); $o = $this->Application->ParseBlock($visitors_params); }