/** * The output of the Viewer * Params: the following optional params can be accepted * 0: product_id (use 0 to use default) * 1: container_template (use '' to use default) * 2: empty_template (use '' to use default) * 3: forbidden_template (use '' to use default) * 4: ip_used_template (use '' to use default) * 5: success_template (use '' to use default) * 6: error_template (use '' to use default) * 7: success_message_template (use '' to use default) * 8: error_message_template (use '' to use default) * 9: review_template (use '' to use default) * 10: rating_template (use '' to use default) * 11: rating_rate_template (use '' to use default) * 12: rating_header_template (use '' to use default) * 13: rating_rate_cell_template (use '' to use default) * Note: to use custom templates be sure to dedcribe them in * - avactis-system/admin/blocks_ini/product-add-review-form-block.ini * - getTemplateFormat() function of the class * * The following scheme of templates will be shown * case 1: adding review is disabled for the product * * will be shown: * empty_template (in any case) * * case 2: a new review has just been posted and * posting a new review is not available * (since multiple reviews from the same IP is disabled) * * will be shown: * success_message template * * case 3: an attempt to post a new review has just been done * while posting a new review is not available * (since multiple reviews from the same IP is disabled) * use case: several attempts was done from different windows * * will be shown: * error_message template * * case 3: multiple reviews from the same IP is disabled * and the review from the IP exists * * will be shown: * ip_used_template (in any case) * * case 4: authorization is needed to add review * * will be shown: * forbidden_template (in any case) * * case 5: review can be added * * will be shown: * container_template (in any case) * -> error_template (if any error) * as Local_ErrorMessage() tag * -> success_template (if any success message) * as Local_SuccessMessage() tag * -> rating_template (if rating is available) * -> rating_rate_template (for every rate) * -> rating_header_template (for every rate value) * as Local_RatingHeader() tag * -> rating_rate_cell_template (for every rate value) * as Local_RatingCells() tag * as Local_RatingData() tag * as Local_Rating tag * -> review_template (if review is available) * as Local_Review() tag */ function output() { global $application; $product_id = 0; if ($this->NoView) { return ''; } loadClass('CCustomerInfo'); // getting the product_id from the params if any if (func_num_args() > 0) { $product_id = func_get_arg(0); } // if no product_id trying to obtain it from the stack of tags if ($product_id <= 0) { $param = modApiFunc('tag_param_stack', 'find_first_param_by_priority', array(TAG_PARAM_PROD_ID)); if ($param !== PARAM_NOT_FOUND && $param['key'] == TAG_PARAM_PROD_ID) { $product_id = $param['value']; } } // if still no product_id trying to get it from Catalog class if ($product_id <= 0) { $product_id = modApiFunc('Catalog', 'getCurrentProductId'); } // if the number of params is more than 1 assume the other params // to be the names of template to show. Only non-empty names are // used so to use a default template please set '' (empty string) // for it the order in which the templates should be specified is // set in the mapping array. Please do not change the order to // avoid problems with existing pages. However you can extend // the array for your purposes // Note: be sure the template exists: // in the ProductAddReviewForm section of // the product-add-review-form-block.ini // in the getTemplateFormat function // in the $this -> _templates array $mapping = array('container', 'empty', 'forbidden', 'ip_used', 'success', 'error', 'success_message', 'review', 'rating', 'rating_rate', 'rating_header', 'rating_rate_cell'); for ($i = 0; $i < count($mapping); $i++) { if (func_num_args() > 1 + $i && func_get_arg(1 + $i) != '') { $this->_templates[$mapping[$i]] = func_get_arg(1 + $i); } } // getting the product data $this->_product_data = modApiFunc('Customer_Reviews', 'getBaseProductInfo', array('product_id' => $product_id)); // processing Session data if available $this->_data = array(); // checking if session data is available if (modApiFunc('Session', 'is_set', 'PostingReviewData')) { // getting session data $posting_data = modApiFunc('Session', 'get', 'PostingReviewData'); // if session data for the product is available // here we presume there can be several add_review forms on a page if (isset($posting_data[$product_id])) { // keeping the data for output $this->_data = $posting_data[$product_id]; // removing session data for the product from the session unset($posting_data[$product_id]); // storing the new data in the session if (empty($posting_data)) { modApiFunc('Session', 'un_set', 'PostingReviewData'); } else { modApiFunc('Session', 'set', 'PostingReviewData', $posting_data); } } } // if author is not set in the session while the customer is logged in // then sets it to the firstname + lastname of the current customer if (modApiFunc('Customer_Account', 'getCurrentSignedCustomer')) { if (!isset($this->_data)) { $this->_data = array(); } if (!isset($this->_data['author']) || !$this->_data['author']) { $c_info = new CCustomerInfo(modApiFunc('Customer_Account', 'getCurrentSignedCustomer')); $this->_data['author'] = $c_info->getPersonInfo('FirstName', 'customer') . ' ' . $c_info->getPersonInfo('LastName', 'customer'); } } // getting setting for checkout type $checkout_type = modApiFunc('Customer_Account', 'getSettings'); $checkout_type = $checkout_type['CHECKOUT_TYPE']; // getting the store settings // if customer reviews are enabled $reviews_enable = modApiFunc('Settings', 'getParamValue', 'CUSTOMER_REVIEWS', 'CUSTOMER_REVIEWS_ENABLE'); // if only registered customers can post the reviews $reviews_writing = modApiFunc('Settings', 'getParamValue', 'CUSTOMER_REVIEWS', 'CUSTOMER_REVIEWS_WRITING'); // if multiple reviews from the same IP is enabled $reviews_multiple = modApiFunc('Settings', 'getParamValue', 'CUSTOMER_REVIEWS', 'CUSTOMER_REVIEWS_MULTIPLE'); // the number of reviews for the product posted from the IP $ip_reviews = modApiFunc('Customer_Reviews', 'getReviewsCountForProductByIP', $product_id, $_SERVER['REMOTE_ADDR']); // is AJAX should be used for adding reviews $isAJAXActive = modApiFunc('Settings', 'getParamValue', 'CUSTOMER_REVIEWS', 'CUSTOMER_REVIEWS_AJAX_ACTIVE'); // setting up the template engine $template_block = $application->getBlockTemplate('ProductAddReviewForm'); $this->mTmplFiller->setTemplate($template_block); // registering tags $_tags = array('Local_FormAction' => $_SERVER['PHP_SELF'], 'Local_ProductID' => $product_id, 'Local_ProductName' => $this->_product_data['product_name'], 'Local_ReturnURL' => prepareHTMLDisplay(modApiFunc('Request', 'selfURL')), 'Local_Error' => $this->outputError(), 'Local_Success' => $this->outputSuccess(), 'Local_Author' => prepareHTMLDisplay(@$this->_data['author']), 'Local_Rating' => $this->outputRating(), 'Local_Review' => $this->outputReview(), 'Local_isAJAXActive' => $isAJAXActive == 'YES' ? '1' : ''); $this->_Template_Contents = $_tags; $application->registerAttributes($this->_Template_Contents); // checking the settings and the result // if reviews are disabled -> show empty_template // if writing reviews is disabled -> show empty_template // if reviews are disabled for the product -> show empty_template // if checkout type = quick while writing reviews is available // for signed in customers -> show empty_template if ($reviews_enable == 'NO' || $reviews_writing == 'NONE' || !in_array($this->_product_data['product_cr'], array(5, 6, 7)) || $checkout_type == CHECKOUT_TYPE_QUICK && $reviews_writing == 'REGONLY' && !modApiFunc('Customer_Account', 'getCurrentSignedCustomer')) { return $this->mTmplFiller->fill($this->_templates['empty']); } // if multiple reviews from the same IP is disabled // while a new review has just been posted if ($reviews_multiple == 'NO' && $ip_reviews > 0 && @$this->_data['success'] != '') { return $this->outputSuccessMessage(); } // if multiple reviews from the same IP is disabled // while an attempt to post a review has just been done if ($reviews_multiple == 'NO' && $ip_reviews > 0 && @$this->_data['error'] != '') { return $this->outputErrorMessage(); } // if multiple reviews from the same IP is disabled // while a review for the IP exists -> show ip_used template if ($reviews_multiple == 'NO' && $ip_reviews > 0) { return $this->outputIPUsed(); } // if the customer is anonymous while writing reviews is available // for signed in customers -> show forbidden_template if ($reviews_writing == 'REGONLY' && !modApiFunc('Customer_Account', 'getCurrentSignedCustomer')) { return $this->outputForbidden(); } return $this->mTmplFiller->fill($this->_templates['container']); }
function doWork($data) { global $application; if ($data === null) { return null; } $filtered = array(); $obj = new CCustomerInfo($data['customer_account']); foreach ($this->_settings['attrs'] as $tag) { $output = ''; preg_match('/^customer(.+)/i', $tag, $m1); if (preg_match('/^(billing|shipping|orders)(.+)/i', $m1[1], $m2)) { $group = $m2[1]; $attr = $m2[2]; } else { $attr = $m1[1]; if (in_array(_ml_strtolower($attr), array('id', 'status'))) { $group = 'base'; } else { $group = 'Customer'; } } if (_ml_strtolower($attr) == 'accountname') { $output = $obj->getDisplayAccountName(); $filtered[$tag] = $output; continue; } if (_ml_strtolower($group) != 'orders') { $attr_value = $obj->getPersonInfo($attr, $group); switch (_ml_strtolower($attr)) { case 'status': $MR =& $application->getInstance('MessageResources', 'customer-account-messages', 'AdminZone'); $output = $MR->getMessage('CUSTOMER_STATUS_' . $attr_value); break; case 'country': $output = modApiFunc('Location', 'getCountry', $attr_value); break; case 'state': if (modApiFunc('Location', 'getStateCode', $attr_value) != '') { $output = modApiFunc('Location', 'getState', $attr_value); } else { $output = $attr_value; } break; default: $output = $attr_value; break; } } else { $filter = array('type' => 'quick', 'order_status' => ORDER_STATUS_ALL); $obj->setOrdersHistoryFilter($filter); switch (_ml_strtolower($attr)) { case 'quantity': $output = $obj->getOrdersCount(); break; case 'totalamount': $output = number_format($obj->getOrdersAmount(), 2, '.', ''); break; case 'totalfullypaidamount': $output = number_format($obj->getOrdersFullyPaidAmount(), 2, '.', ''); break; } } $filtered[$tag] = $output; } unset($obj); return $filtered; }