public function __construct($calling_from_hook = FALSE)
 {
     $this->EE =& get_instance();
     // load dependencies - make sure the package path is available in case the class is being called statically
     $this->EE->load->add_package_path(PATH_THIRD . 'stash/', TRUE);
     $this->EE->lang->loadfile('stash');
     $this->EE->load->model('stash_model');
     // default site id
     $this->site_id = $this->EE->config->item('site_id');
     // config defaults
     $this->path = $this->EE->config->item('stash_file_basepath') ? $this->EE->config->item('stash_file_basepath') : APPPATH . 'stash/';
     $this->file_sync = $this->EE->config->item('stash_file_sync') ? $this->EE->config->item('stash_file_sync') : FALSE;
     $this->stash_cookie = $this->EE->config->item('stash_cookie') ? $this->EE->config->item('stash_cookie') : 'stashid';
     $this->stash_cookie_expire = $this->EE->config->item('stash_cookie_expire') ? $this->EE->config->item('stash_cookie_expire') : 0;
     $this->default_scope = $this->EE->config->item('stash_default_scope') ? $this->EE->config->item('stash_default_scope') : 'user';
     $this->limit_bots = $this->EE->config->item('stash_limit_bots') ? $this->EE->config->item('stash_limit_bots') : FALSE;
     // permitted file extensions for Stash embeds
     $this->file_extensions = $this->EE->config->item('stash_file_extensions') ? $this->EE->config->item('stash_file_extensions') : array('html', 'md', 'css', 'js', 'rss', 'xml');
     // initialise tag parameters
     if (FALSE === $calling_from_hook) {
         $this->init();
     }
     // fetch the stash session id
     if (!isset($this->EE->session->cache['stash']['_session_id'])) {
         // do we have a stash cookie?
         if ($cookie_data = $this->_get_stash_cookie()) {
             // YES - restore session
             $this->EE->session->cache['stash']['_session_id'] = $cookie_data['id'];
             $last_activity = $cookie_data['dt'];
             if ($last_activity + 300 < $this->EE->localize->now) {
                 // refresh cookie
                 $this->_set_stash_cookie($cookie_data['id']);
                 // prune variables with expiry date older than right now
                 $this->EE->stash_model->prune_keys();
             }
         } else {
             if ($this->limit_bots) {
                 // Is the user a human? Legitimate bots don't set cookies so will end up here every page load
                 // Humans who accept cookies only get checked when the cookie is first set
                 self::$_is_human = $this->_is_bot() ? FALSE : TRUE;
             }
             // NO - let's generate a unique id
             $unique_id = $this->EE->functions->random();
             // add to stash array
             $this->EE->session->cache['stash']['_session_id'] = $unique_id;
             // create a cookie; store the creation date in the cookie itself
             $this->_set_stash_cookie($unique_id);
         }
     }
     // create a reference to the session id
     $this->_session_id =& $this->EE->session->cache['stash']['_session_id'];
 }
Ejemplo n.º 2
0
 public function __construct($calling_from_hook = FALSE)
 {
     $this->EE =& get_instance();
     // load dependencies - make sure the package path is available in case the class is being called statically
     $this->EE->load->add_package_path(PATH_THIRD . 'stash/', TRUE);
     $this->EE->lang->loadfile('stash');
     $this->EE->load->model('stash_model');
     // default site id
     $this->site_id = $this->EE->config->item('site_id');
     // config defaults
     $this->path = $this->EE->config->item('stash_file_basepath') ? $this->EE->config->item('stash_file_basepath') : APPPATH . 'stash/';
     $this->file_sync = $this->_get_boolean_config_item('stash_file_sync', FALSE);
     // default = FALSE
     $this->stash_cookie = $this->EE->config->item('stash_cookie') ? $this->EE->config->item('stash_cookie') : 'stashid';
     $this->stash_cookie_expire = $this->EE->config->item('stash_cookie_expire') ? $this->EE->config->item('stash_cookie_expire') : 0;
     $this->stash_cookie_enabled = $this->_get_boolean_config_item('stash_cookie_enabled');
     // default = TRUE
     $this->default_scope = $this->EE->config->item('stash_default_scope') ? $this->EE->config->item('stash_default_scope') : 'user';
     $this->default_refresh = $this->EE->config->item('stash_default_refresh') ? $this->EE->config->item('stash_default_refresh') : 0;
     // minutes
     $this->limit_bots = $this->_get_boolean_config_item('stash_limit_bots', FALSE);
     // default = FALSE
     // cache pruning can cache stampede mitigation defaults
     $this->prune = $this->_get_boolean_config_item('stash_prune_enabled');
     // default = TRUE
     $this->prune_probability = $this->EE->config->item('stash_prune_probability') ? $this->EE->config->item('stash_prune_probability') : 0.4;
     // percent
     $this->invalidation_period = $this->EE->config->item('stash_invalidation_period') ? $this->EE->config->item('stash_invalidation_period') : 0;
     // seconds
     // permitted file extensions for Stash embeds
     $this->file_extensions = $this->EE->config->item('stash_file_extensions') ? (array) $this->EE->config->item('stash_file_extensions') : array('html', 'md', 'css', 'js', 'rss', 'xml');
     // Support {if var1 IN (var2) }...{/if} style conditionals in Stash templates / tagdata?
     $this->parse_if_in = $this->EE->config->item('stash_parse_if_in') ? $this->EE->config->item('stash_parse_if_in') : FALSE;
     // include query string when using the @URI context (full page caching)?
     $this->include_query_str = $this->EE->config->item('stash_query_strings') ? $this->EE->config->item('stash_query_strings') : FALSE;
     // initialise tag parameters
     if (FALSE === $calling_from_hook) {
         $this->init();
     }
     // fetch the stash session id
     if ($this->stash_cookie_enabled) {
         if (!isset($this->EE->session->cache['stash']['_session_id'])) {
             // do we have a stash cookie?
             if ($cookie_data = $this->_get_stash_cookie()) {
                 // YES - restore session
                 $this->EE->session->cache['stash']['_session_id'] = $cookie_data['id'];
                 // shall we prune expired variables?
                 if ($this->prune) {
                     // probability that pruning occurs
                     $prune_chance = 100 / $this->prune_probability;
                     // trigger pruning every 1 chance out of $prune_chance
                     if (mt_rand(0, $prune_chance - 1) === 0) {
                         // prune variables with expiry date older than right now
                         $this->EE->stash_model->prune_keys();
                     }
                 }
             } else {
                 if ($this->limit_bots) {
                     // Is the user a human? Legitimate bots don't set cookies so will end up here every page load
                     // Humans who accept cookies only get checked when the cookie is first set
                     self::$_is_human = $this->_is_bot() ? FALSE : TRUE;
                 }
                 // NO - let's generate a unique id
                 $unique_id = $this->EE->functions->random();
                 // add to stash array
                 $this->EE->session->cache['stash']['_session_id'] = $unique_id;
                 // create a cookie; store the creation date in the cookie itself
                 $this->_set_stash_cookie($unique_id);
             }
         }
         // create a reference to the session id
         $this->_session_id =& $this->EE->session->cache['stash']['_session_id'];
     } else {
         $this->_session_id = '_global';
     }
 }