/** * Perform an export according to the given request. * * @param Mage_Core_Controller_Request_Http $request * @param Mage_Core_Controller_Response_Http $response * @throws Exception */ public function process(Mage_Core_Controller_Request_Http $request, Mage_Core_Controller_Response_Http $response) { // In case store is part of URL path use it to choose config. $store = $request->get('store'); if ($store) { $store = Mage::app()->getStore($store); } $apiConfigCharset = Mage::getStoreConfig("api/config/charset", $store); $start_date = strtotime($request->getParam('start_date')); $end_date = strtotime($request->getParam('end_date')); if (!$start_date || !$end_date) { throw new Exception('Start and end dates are required', 400); } $page = (int) $request->getParam('page'); /* @var $orders Mage_Sales_Model_Mysql4_Order_Collection */ $orders = Mage::getResourceModel('sales/order_collection'); // might use 'created_at' attribute instead $orders->addAttributeToFilter('updated_at', array('from' => date('Y-m-d H:i:s', $start_date), 'to' => date('Y-m-d H:i:s', $end_date))); if ($store) { $orders->addAttributeToFilter('store_id', $store->getId()); } if ($page > 0) { $orders->setPage($page, $this->_getExportPageSize()); } $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument('1.0', $apiConfigCharset); $this->_writeOrders($orders, $xml, $store ? $store->getId() : 0); $xml->endDocument(); $response->clearHeaders()->setHeader('Content-Type', 'text/xml; charset=' . $apiConfigCharset)->setBody($xml->outputMemory(true)); }
/** * Fetches and outputs file to user browser * $info is array with following indexes: * - 'path' - full file path * - 'type' - mime type of file * - 'size' - size of file * - 'title' - user-friendly name of file (usually - original name as uploaded in Magento) * * @param Mage_Core_Controller_Response_Http $response * @param string $filePath * @param array $info * @return bool */ public function downloadFileOption($response, $filePath, $info) { try { $response->setHttpResponseCode(200)->setHeader('Pragma', 'public', true)->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)->setHeader('Content-type', $info['type'], true)->setHeader('Content-Length', $info['size'])->setHeader('Content-Disposition', 'inline' . '; filename=' . $info['title'])->clearBody(); $response->sendHeaders(); readfile($filePath); } catch (Exception $e) { return false; } return true; }
/** * Return the value of the first found location header * * @param Mage_Core_Controller_Response_Http $response * @return string */ protected function _getRedirectTarget($response) { $headers = $response->getHeaders(); if ($headers) { foreach ($headers as $header) { if ('Location' === $header['name']) { return $header['value']; } } } return ''; }
protected function _renderResponse(Mage_Core_Controller_Response_Http $response, $data, $httpCode) { try { $content = Mage::helper('core')->jsonEncode($data); $response->setBody($content); $response->setHttpResponseCode($httpCode); } catch (Exception $e) { Mage::logException($e); $response->setBody('Undefined error'); $response->setHttpResponseCode(500); } }
/** * Try to login user in admin * * @param string $username * @param string $password * @param Mage_Core_Controller_Request_Http $request * @return Mage_Admin_Model_User|null */ public function login($username, $password, $request = null) { if (empty($username) || empty($password)) { return; } try { /** @var $user Mage_Admin_Model_User */ $user = $this->_factory->getModel('admin/user'); $user->login($username, $password); if ($user->getId()) { $this->renewSession(); if (Mage::getSingleton('adminhtml/url')->useSecretKey()) { Mage::getSingleton('adminhtml/url')->renewSecretUrls(); } $this->setIsFirstPageAfterLogin(true); $this->setUser($user); $this->setAcl(Mage::getResourceModel('admin/acl')->loadAcl()); $alternativeUrl = $this->_getRequestUri($request); $redirectUrl = $this->_urlPolicy->getRedirectUrl($user, $request, $alternativeUrl); if ($redirectUrl) { Mage::dispatchEvent('admin_session_user_login_success', array('user' => $user)); $this->_response->clearHeaders()->setRedirect($redirectUrl)->sendHeadersAndExit(); } } else { Mage::throwException(Mage::helper('adminhtml')->__('Invalid User Name or Password.')); } } catch (Mage_Core_Exception $e) { Mage::dispatchEvent('admin_session_user_login_failed', array('user_name' => $username, 'exception' => $e)); if ($request && !$request->getParam('messageSent')) { Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); $request->setParam('messageSent', true); } } return $user; }
/** * Cache a url so that when the associated tags are cleared the url can be added to a list of urls to be * invalidated by an external process. * * Set the Cache-Control header so the proxy will cache the response. * * @param Mage_Core_Controller_Response_Http $response * @param $lifetime */ public function httpResponseSendBefore(Mage_Core_Controller_Response_Http $response, $lifetime) { // Cache the url with all of the related tags (prefixed) $cacheKey = $this->getCacheKey(); if ($lastModified = Mage::app()->getCacheInstance()->getFrontend()->test($cacheKey)) { // TODO - touch cache record? } else { $url = $this->getBaseUrl() . Mage::app()->getRequest()->getRequestUri(); $tags = $this->_getCacheTags($this->helper()->getTags()); $tags[] = self::CACHE_TAG; Mage::app()->saveCache($url, self::PREFIX_KEY . $cacheKey, $tags, $lifetime); } // Set a header so the page is cached $cacheControl = sprintf(Mage::getStoreConfig('system/diehard/cachecontrol'), $lifetime); $response->setHeader('Cache-Control', $cacheControl, true); }
/** * When caching a page simply generate and cache a random value as the ETag * * @param Mage_Core_Controller_Response_Http $response * @param $lifetime */ public function httpResponseSendBefore(Mage_Core_Controller_Response_Http $response, $lifetime) { $useEtags = Mage::getStoreConfigFlag('system/diehard/use_etags'); $cacheKey = $this->getCacheKey(); // Use existing cache data if it exists in case there are multiple upstream proxies // If a record exists then any content generated at the time the record was is assumed to not be stale if (!($cacheData = Mage::app()->loadCache($cacheKey))) { $fullActionName = $this->helper()->getFullActionName(); if ($useEtags) { $cacheData = $fullActionName . ':' . sha1(microtime() . mt_rand()); } else { $cacheData = $fullActionName . ':' . $this->_rfc1123Date(); } $tags = $this->helper()->getTags(); $tags[] = Cm_Diehard_Helper_Data::CACHE_TAG; Mage::app()->saveCache($cacheData, $cacheKey, $tags, $lifetime); } list($fullActionName, $cacheData) = explode(':', $cacheData, 2); // Set headers so the page is cached with the ETag/Last-Modified value for invalidation session_cache_limiter(''); $cacheControl = sprintf(Mage::getStoreConfig('system/diehard/cachecontrol'), $lifetime); $response->setHeader('Cache-Control', $cacheControl, true); $response->setHeader('Expires', $this->_rfc1123Date(time() + $lifetime), true); if ($useEtags) { $response->setHeader('ETag', 'W/"' . $cacheData . '"', true); } else { $response->setHeader('Last-Modified', $cacheData, true); } }
public function setNeverExpireBrowserCacheHeader(Mage_Core_Controller_Request_Http $httpRequest, Mage_Core_Controller_Response_Http $response) { if (!Mage::app()->useCache('config')) { return $this; } if (!$httpRequest->has(self::FUZE_VALUE_CACHE_KEY)) { Mage::log("MegaMenu cache problem: You cannot set never expire browser cache, because this http request has not been secured by the fuze url param."); return $this; } $expires = gmdate('D, d M Y H:i:s \\G\\M\\T', time() + 3600 * self::HOURS_IN_BROWSER_CACHE); $maxAge = self::HOURS_IN_BROWSER_CACHE * 3600; $response->setHeader('Pragma', 'public', true); $response->setHeader('Expires', $expires, true); $response->setHeader('Cache-Control', "public, max-age={$maxAge}", true); return $this; }
/** * Redirect to entity (category or product) in new store * * @param int $rewriteId * * @return null|void */ public function _checkStoreRedirect($rewriteId) { if ($this->_prevStoreId == $this->_storeId) { return; } $redirect = $this->_redirectResource->getRedirectByRewriteId($rewriteId); if (!empty($redirect['product_id'])) { $requestPath = $this->_getProductRequestPath($redirect, $redirect['category_id']); } elseif (!empty($redirect['category_id'])) { $requestPath = $this->_getCategoryRequestPath($redirect); } if (!empty($requestPath)) { $this->_response->setRedirect($requestPath, 301); $this->_request->setDispatched(true); } }
/** * Redirect to category from another store if custom url key defined * * @param int $rewriteId */ protected function _checkStoreRedirect($rewriteId) { if ($this->_prevStoreId != $this->_storeId) { $categoryId = $this->_categoryResource->getCategoryIdByRewriteId($rewriteId); if (!empty($categoryId)) { $rewrite = $this->_categoryResource->getRewriteByCategoryId($categoryId, $this->_storeId); if (!empty($rewrite)) { $requestPath = $rewrite['request_path']; if (!empty($this->_newStoreSeoSuffix)) { $requestPath .= '.' . $this->_newStoreSeoSuffix; } $requestPath = $this->_getBaseUrl() . $requestPath; $this->_response->setRedirect($requestPath, 301); $this->_request->setDispatched(true); } } } }
/** * set Body * * @param string $content * @param string $name * @return $this */ public function setBody($content, $name = null) { // handle Checkout redirects if (strstr($content, 'paypal_standard_checkout') or strstr($content, 'clickandbuy_checkout') or strstr($content, 'payone_checkout') or strstr($content, 'moneybookers_checkout')) { echo $content; exit; } // not longer necessary because of the rewriting of the app Model we can change die Response Object everywhere //$this->ajaxHandler($content); parent::setBody($content, $name); return $this; }
/** * @param $url */ protected function _handleRedirect($url) { $redirectUrl = Mage::getUrl($url); $this->_response->setRedirect($redirectUrl); $this->_controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, TRUE); }
/** * Additionally check for session messages in several domains case * * @param string $url * @param int $code * @return Mage_Core_Controller_Response_Http */ public function setRedirect($url, $code = 302) { /** * Use single transport object instance */ if (self::$_transportObject === null) { self::$_transportObject = new Varien_Object(); } self::$_transportObject->setUrl($url); self::$_transportObject->setCode($code); Mage::dispatchEvent('controller_response_redirect', array('response' => $this, 'transport' => self::$_transportObject)); return parent::setRedirect(self::$_transportObject->getUrl(), self::$_transportObject->getCode()); }
/** * @param Mage_Core_Controller_Response_Http $response * @return string */ public function getContentType(\Mage_Core_Controller_Response_Http $response) { foreach ($response->getHeaders() as $header) { if (isset($header['name']) && $header['name'] === 'Content-Type' && isset($header['value'])) { return $header['value']; } } return 'text/html; charset=UTF-8'; }
/** * Append arbitrary content to the passed HTML element. * * @param string $tag * @param Mage_Core_Controller_Response_Http $response * @param string $content * @return void */ protected function _appendToHtmlTag($tag, Mage_Core_Controller_Response_Http $response, $content) { $response->setBody(str_replace('</' . $tag . '>', $content . '</' . $tag . '>', $response->getBody(false))); }
protected function _isMovedToNextStep(Mage_Core_Controller_Response_Http $response) { if ($response->getHttpResponseCode() == 200) { $body = json_decode($response->getBody()); if (empty($body->error)) { return true; } } return false; }
protected function _send(Mage_Core_Controller_Response_Http $response, $data, $responseCode = 200) { $response->clearHeader('Location')->setHeader('Content-Type', 'application/json', true); $response->setHttpResponseCode($responseCode); $response->setBody(json_encode($data)); }
/** * Apply custom Cache-Control: max-age from db * * @param Mage_Core_Controller_Request_Http $request * @param Mage_Core_Controller_Response_Http $response */ protected function _applyCustomMaxAgeFromDb(Mage_Core_Controller_Request_Http $request, Mage_Core_Controller_Response_Http $response) { if (!$this->messagesToShow) { // apply custom max-age from db $urls = array($request->getRequestString()); $alias = $request->getAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS); if ($alias) { $urls[] = $alias; } /** @var $customUrlModel Aoe_Static_Model_CustomUrl */ $customUrlModel = Mage::getModel('aoestatic/customUrl'); $customUrlModel->setStoreId(Mage::app()->getStore()->getId()); $customUrlModel->loadByRequestPath($urls); if ($customUrlModel->getId() && $customUrlModel->getMaxAge()) { $response->setHeader('Cache-Control', 'max-age=' . (int) $customUrlModel->getMaxAge(), true); $response->setHeader('X-Magento-Lifetime', (int) $customUrlModel->getMaxAge(), true); $response->setHeader('aoestatic', 'cache', true); } } }
/** * Calls the diehard/load controller without spawning a new request * * @param array $params * @return string */ public function getDynamicBlockReplacement($params) { // Append dynamic block content to end of page to be replaced by javascript, but not Ajax if ($params['blocks'] || !empty($params['all_blocks'])) { // Init store if it has not been yet (page served from cache) if (!$this->helper()->isAppInited()) { $this->helper()->initApp(); } else { // Reset layout Mage::unregister('_singleton/core/layout'); Mage::getSingleton('core/layout'); // TODO Mage::app()->getLayout() is not reset using the method above! // TODO Consider resetting Magento entirely using Mage::reset(); } // Create a sub-request to get JSON response $uri = $this->getBaseUrl() . '/_diehard/load/ajax'; $request = new Mage_Core_Controller_Request_Http($uri); $request->setRouteName('diehard'); $request->setModuleName('_diehard'); $request->setControllerName('load'); $request->setActionName('ajax'); $request->setControllerModule('Cm_Diehard'); $request->setParam('full_action_name', $params['full_action_name']); if (!empty($params['all_blocks'])) { $request->setParam('all_blocks', 1); } else { $request->setParam('blocks', $params['blocks']); } $request->setParam('params', $params['params']); $request->setDispatched(true); // Override parameters in request singleton (for Mage_Core_Block_Abstract#getRequest()) Mage::app()->getRequest()->clearParams(); Mage::app()->getRequest()->setParams($request->getParams()); Mage::app()->getRequest()->setParams($request->getParam('params')); // Render sub-request into sub-response object $response = new Mage_Core_Controller_Response_Http(); require_once Mage::getModuleDir('controllers', 'Cm_Diehard') . '/LoadController.php'; $controller = new Cm_Diehard_LoadController($request, $response); $controller->dispatch('json'); $replacement = ''; if ($this->helper()->isDebug()) { $replacement .= '<!-- Dynamic blocks rendered: ' . (empty($params['all_blocks']) ? implode(',', $params['blocks']) : 'ALL') . ' -->' . "\n"; } $replacement .= "<script type=\"text/javascript\">/* <![CDATA[ */Diehard.replaceBlocks({$response->getBody()});/* ]]> */</script>"; return $replacement; } else { if ($this->helper()->isDebug()) { return '<!-- No dynamic blocks -->'; } else { return ''; } } }