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); }