Esempio n. 1
0
 /**
  * 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));
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 3
0
 /**
  * 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 '';
 }
Esempio n. 4
0
 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;
 }
Esempio n. 6
0
 /**
  * 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);
 }
Esempio n. 7
0
 /**
  * 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);
     }
 }
Esempio n. 8
0
 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);
     }
 }
Esempio n. 10
0
 /**
  * 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);
             }
         }
     }
 }
Esempio n. 11
0
 /**
  * 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);
 }
Esempio n. 13
0
 /**
  * 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());
 }
Esempio n. 14
0
 /**
  * @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';
 }
Esempio n. 15
0
 /**
  * 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)));
 }
Esempio n. 16
0
 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;
 }
Esempio n. 17
0
 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));
 }
Esempio n. 18
0
 /**
  * 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);
         }
     }
 }
Esempio n. 19
0
 /**
  * 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 '';
         }
     }
 }