/** * Returns a singleton instance * * @return object * @access public * @static */ function &getInstance() { return SECache::getInstance(); /* static $instance = array(); if (!$instance) { $instance[0] =& new Cache(); } return $instance[0]; * */ }
function get($callback, $args, $id = FALSE) { if (!$id) { // Generate an ID $id = $this->_makeId($callback, $args); } // Get the storage handler and get callback cache data by id and group $data = parent::get($id); if ($data !== false) { $data = unserialize($data); } else { $data = call_user_func_array($callback, $args); $this->store(serialize($data), $id); } return $data; }
function &getSettings() { static $url_settings; if (!is_array($url_settings)) { $cache = SECache::getInstance(); // Get from cache if (is_object($cache)) { $url_settings = $cache->get('site_url_settings'); } // Get from database if (!is_array($url_settings)) { $database = SEDatabase::getInstance(); $resource = $database->database_query("SELECT url_file, url_regular, url_subdirectory FROM se_urls"); $url_settings = $database->database_load_all_assoc('url_file'); // Special case -_- $url_settings['profile'] = array('url_regular' => 'profile.php?user=$user', 'url_subdirectory' => '$user/'); // Store in cache if (is_object($cache)) { $cache->store($url_settings, 'site_url_settings'); } } } return $url_settings; }
function friends_birthdays() { global $setting, $database, $user; $birthdays = NULL; // CACHING $cache_object = SECache::getInstance('serial'); if (is_object($cache_object)) { $birthdays = $cache_object->get('friends_birthdays_user_' . $user->user_info['user_id']); } // RETRIEVAL //if( !is_array($birthdays) || empty($birthdays) ) if (!is_array($birthdays)) { $birthdays = array(); $sql = "SELECT profilefield_id, t2.profilecat_id FROM se_profilefields LEFT JOIN se_profilecats AS t1 ON se_profilefields.profilefield_profilecat_id=t1.profilecat_id LEFT JOIN se_profilecats AS t2 ON t1.profilecat_dependency=t2.profilecat_id WHERE profilefield_special='1'"; $resource = $database->database_query($sql); if ($database->database_num_rows($resource) > 0) { // CONSTRUCT QUERY $birthdays_upcoming_query = "\r\n SELECT\r\n se_users.user_id, \r\n se_users.user_username, \r\n se_users.user_fname, \r\n se_users.user_lname,\r\n CASE\r\n "; while ($birthday_field = $database->database_fetch_assoc($resource)) { $birthdays_upcoming_query .= " WHEN se_users.user_profilecat_id='{$birthday_field['profilecat_id']}' THEN DATE_FORMAT(CONCAT(YEAR(CURDATE()), \"-\", MONTH(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`), \"-\", DAY(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`)), '%Y-%m-%d')"; $birthdays_upcoming_where[] = "(se_users.user_profilecat_id='{$birthday_field['profilecat_id']}' AND DAY(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`)<>'0' AND MONTH(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`)<>'0' AND CURDATE() <= DATE_FORMAT(CONCAT(YEAR(CURDATE()), \"-\", MONTH(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`), \"-\", DAY(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`)), '%Y-%m-%d') AND DATE_ADD(CURDATE(), INTERVAL 7 DAY) >= DATE_FORMAT(CONCAT(YEAR(CURDATE()), \"-\", MONTH(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`), \"-\", DAY(se_profilevalues.`profilevalue_{$birthday_field['profilefield_id']}`)), '%Y-%m-%d'))"; } $birthdays_upcoming_query .= " ELSE '0000-00-00' END AS birthday FROM se_friends LEFT JOIN se_users ON se_friends.friend_user_id2=se_users.user_id LEFT JOIN se_profilevalues ON se_users.user_id=se_profilevalues.profilevalue_user_id WHERE se_friends.friend_user_id1='{$user->user_info['user_id']}' AND (" . implode(" OR ", $birthdays_upcoming_where) . ") ORDER BY birthday"; $resource = $database->database_query($birthdays_upcoming_query); while ($birthday_info = $database->database_fetch_assoc($resource)) { $birthday_user = new se_user(); $birthday_user->user_info['user_id'] = $birthday_info['user_id']; $birthday_user->user_info['user_username'] = $birthday_info['user_username']; $birthday_user->user_info['user_fname'] = $birthday_info['user_fname']; $birthday_user->user_info['user_lname'] = $birthday_info['user_lname']; $birthday_user->user_displayname(); // SET BIRTHDAY $birthday_date = mktime(0, 0, 0, substr($birthday_info['birthday'], 5, 2), substr($birthday_info['birthday'], 8, 2), 1990); $birthdays[] = array('birthday_user_id' => $birthday_user->user_info['user_id'], 'birthday_user_username' => $birthday_user->user_info['user_username'], 'birthday_user_displayname' => $birthday_user->user_displayname, 'birthday_date' => $birthday_date, 'birthday_user' => &$birthday_user); unset($birthday_user); } } // CACHE if (is_object($cache_object)) { $cache_object->store($birthdays, 'friends_birthdays_user_' . $user->user_info['user_id']); } } return $birthdays; }
$config['path'] = !empty($cache_options['root']) ? $cache_options['root'] : SE_ROOT . DS . 'cache'; $config['lock'] = isset($cache_options['locking']) ? $cache_options['locking'] : false; $config['serialize'] = true; if (!defined('CACHE')) { define('CACHE', $config['path']); } } else { if ($setting['setting_cache_default'] == 'memcache') { $config['servers'] = array(); foreach ($cache_options['servers'] as $server) { $config['servers'][] = $server['host'] . ':' . $server['port']; } $config['compress'] = false; } } SECache::config('default', $config); } /* // CREATE SESSION OBJECT $session_options = ( defined('SE_SESSION_RESUME') && !empty($session_id) ? array('id' => $session_id, 'security' => array()) : array() ); $session =& SESession::getInstance($session_options); if( $session->getState() == 'expired' ) { $session->restart(); } * */ // CREATE URL CLASS $url = new se_url(); // CREATE DATETIME CLASS $datetime = new se_datetime();
function store($data, $id, $group = NULL) { $serial_data = serialize($data); parent::store($serial_data, $id, $group); }
$user_newemail = $user_email; $subnet_id = $new_subnet_id; if ($new_subnet_id != $user->user_info['user_subnet_id']) { $result = 819; } else { $result = 191; } } // UPDATE DATABASE $database->database_query("UPDATE se_users SET user_subnet_id='{$subnet_id}', user_email='{$user_email}', user_newemail='{$user_newemail}', user_username='******', user_timezone='{$user_timezone}', user_profilecat_id='{$user_profilecat_id}' WHERE user_id='{$user->user_info['user_id']}' LIMIT 1"); if (count($usersettings) > 0) { $database->database_query("UPDATE se_usersettings SET " . implode(", ", $usersettings) . " WHERE usersetting_user_id='{$user->user_info['user_id']}' LIMIT 1"); // Flush cached usersettings $usersettings_static =& SEUser::getUserSettings($user->user_info['user_id']); $usersettings_static = NULL; $cache_object = SECache::getInstance(); if (is_object($cache_object)) { $cache_object->remove('site_user_settings_' . $user->user_info['user_id']); } } // IF USERNAME HAS CHANGED, DELETE OLD RECENT ACTIVITY if ($user->user_info['user_username'] != $user_username) { $database->database_query("DELETE FROM se_actions WHERE action_user_id='{$user->user_info['user_id']}'"); } // RESET USER INFO $user = new se_user(array($user->user_info['user_id'])); // UPDATE COOKIES $user->user_setcookies(); } } // GET PROFILE CATEGORIES
function userconnection_users_information($path_array) { global $setting, $database, $user; $path = NULL; // CACHING $cache_object = SECache::getInstance('serial'); if (is_object($cache_object)) { $path = $cache_object->get('shortest_path'); } // RETRIEVAL if (!is_array($path)) { // HERE WE WILL TAKE ALL USER ID'S IN A SINGLE VARIABLE $USERS_ID $users_id = implode(",", $path_array); $id = $user->user_info['user_id']; $sql = "SELECT user_id, user_username, user_fname, user_lname, user_photo, user_lastlogindate, user_dateupdated FROM se_users WHERE ((user_verified='1' AND user_enabled='1' AND user_search='1') OR (user_id = '{$id}')) AND user_id IN ({$users_id}) "; $resource = $database->database_query($sql); $path = array(); while ($user_info = $database->database_fetch_assoc($resource)) { $shortest_user = new se_user(); $shortest_user->user_info['user_id'] = $user_info['user_id']; $shortest_user->user_info['user_username'] = $user_info['user_username']; $shortest_user->user_info['user_photo'] = $user_info['user_photo']; $shortest_user->user_info['user_fname'] = $user_info['user_fname']; $shortest_user->user_info['user_lname'] = $user_info['user_lname']; $shortest_user->user_info['user_lastlogindate'] = $user_info['user_lastlogindate']; $shortest_user->user_info['user_dateupdated'] = $user_info['user_dateupdated']; $shortest_user->user_displayname(); $path[$user_info['user_id']] =& $shortest_user; unset($shortest_user); } // foreach ($path_array as $l) { if (!empty($path[$l])) { $new_user_array[] = $path[$l]; } } // CACHE if (is_object($cache_object)) { $cache_object->store($path, 'shortest_path'); } } return $new_user_array; }
function &getSubnetworkInfo($subnet_id) { static $subnetwork_info; if (!is_array($subnetwork_info)) { $subnetwork_info = array(); } if (!isset($subnetwork_info[$subnet_id])) { $cache = SECache::getInstance('serial', array('lifetime' => 3600)); // Get from cache if (is_object($cache)) { $subnetwork_info[$subnet_id] = $cache->get('site_subnetworks_' . $subnet_id); } // Get from database if (!is_array($subnetwork_info[$subnet_id])) { $database = SEDatabase::getInstance(); $resource = $database->database_query("SELECT subnet_id, subnet_name FROM se_subnets WHERE subnet_id='{$subnet_id}' LIMIT 1"); $subnetwork_info[$subnet_id] = $database->database_fetch_assoc($resource); // Store in cache if (is_object($cache)) { $cache->store($subnetwork_info[$subnet_id], 'site_subnetworks_' . $subnet_id); } } } return $subnetwork_info[$subnet_id]; }
function &getProfileValues($user_id) { static $user_profiles; if (!is_array($user_profiles)) { $user_profiles = array(); } if (!isset($user_profiles[$user_id])) { $cache = SECache::getInstance('serial', array('lifetime' => 3600)); // Get from cache if (is_object($cache)) { $user_profiles[$user_id] = $cache->get('site_user_profiles_' . $user_id); } // Get from database if (!is_array($user_profiles[$user_id])) { $database = SEDatabase::getInstance(); $resource = $database->database_query("SELECT * FROM se_profilevalues WHERE profilevalue_user_id='{$user_id}' LIMIT 1"); $user_profiles[$user_id] = $database->database_fetch_assoc($resource); // Store in cache if (is_object($cache)) { $cache->store($user_profiles[$user_id], 'site_user_profiles_' . $user_id); } } } return $user_profiles[$user_id]; }
function actions_display($visibility = 0, $actionsperuser, $where = "", $last_action_id = false, $first_action_id = false) { global $database, $user, $owner, $setting; $actions_array = array(); // CACHING $cache_object = SECache::getInstance('serial'); $user_id = $user->user_exists ? $user->user_info['user_id'] : 0; $user_subnet_id = $user->user_exists ? $user->user_info['user_subnet_id'] : 0; $where_md5 = $where ? '_' . md5($where) : ''; $cache_id = 'he_actions_' . $visibility . '_' . (int) $last_action_id . '_' . (int) $first_action_id . '_' . $user_id . $where_md5; if (is_object($cache_object)) { $actions_array = $cache_object->get($cache_id); } // GET ACTIONS if (empty($actions_array)) { // GET CURRENT DATE $nowdate = time(); // BEGIN BUILDING QUERY $actions_query = "SELECT se_actions.*, se_actiontypes.actiontype_icon, se_actiontypes.actiontype_text, \r\n se_actiontypes.actiontype_media FROM se_actions \r\n LEFT JOIN se_actiontypes ON se_actions.action_actiontype_id=se_actiontypes.actiontype_id"; // GET USER PREFERENCES, IF USER LOGGED IN $user_pref_where = ""; if ($setting['setting_actions_preference'] == 1 && $user->user_exists) { if (empty($user->usersetting_info)) { $user->user_settings(); } $usersetting_actions_display = join(',', array_filter(explode(',', $user->usersetting_info['usersetting_actions_display']))); $user_pref_where = " se_actiontypes.actiontype_id IN ({$usersetting_actions_display}) AND"; } switch ($visibility) { // ALL ACTIONS, NO USER PREFS case 0: $actions_query .= " WHERE"; break; case 10: $actions_query .= " WHERE {$user_pref_where}"; break; // ALL REGISTERED USERS, EXCLUDING LOGGED IN USER // ALL REGISTERED USERS, EXCLUDING LOGGED IN USER case 1: $actions_query .= " WHERE se_actions.action_user_id<>'{$user_id}' AND"; $actions_query .= $user_pref_where; break; // ONLY MY FRIENDS AND EVERYONE IN MY SUBNET, EXCLUDING LOGGED IN USER // ONLY MY FRIENDS AND EVERYONE IN MY SUBNET, EXCLUDING LOGGED IN USER case 2: $actions_query .= " LEFT JOIN se_friends ON se_friends.friend_user_id2=se_actions.action_user_id \r\n AND se_friends.friend_user_id1='{$user_id}' AND se_friends.friend_status='1'"; $actions_query .= " LEFT JOIN se_users ON se_users.user_id=se_actions.action_user_id"; $actions_query .= " WHERE se_actions.action_user_id<>'{$user_id}' AND"; $actions_query .= " (se_friends.friend_id <> 'NULL' OR se_users.user_subnet_id='{$user_subnet_id}') AND"; $actions_query .= $user_pref_where; break; // ONLY MY FRIENDS, EXCLUDING LOGGED IN USER // ONLY MY FRIENDS, EXCLUDING LOGGED IN USER case 4: $actions_query .= " RIGHT JOIN se_friends ON se_friends.friend_user_id2=se_actions.action_user_id \r\n AND se_friends.friend_user_id1='{$user_id}' AND se_friends.friend_status='1'"; $actions_query .= " WHERE se_actions.action_user_id<>'{$user_id}' AND"; $actions_query .= $user_pref_where; break; } // CHECK PRIVACY $actions_query .= "\r\n CASE \r\n WHEN se_actions.action_object_owner='user' THEN\r\n CASE\r\n WHEN se_actions.action_user_id='{$user_id}'\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_REGISTERED) AND '{$user->user_exists}'<>0)\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_ANONYMOUS) AND '{$user->user_exists}'=0)\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_SELF) AND se_actions.action_object_owner_id='{$user_id}')\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_FRIEND) AND (SELECT TRUE FROM se_friends \r\n WHERE friend_user_id1=se_actions.action_object_owner_id AND friend_user_id2='{$user_id}' AND friend_status='1' LIMIT 1))\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_SUBNET) AND '{$user->user_exists}'<>0 \r\n AND (SELECT TRUE FROM se_users WHERE user_id=se_actions.action_object_owner_id AND user_subnet_id='{$user_subnet_id}' LIMIT 1))\r\n THEN TRUE\r\n WHEN ((se_actions.action_object_privacy & @SE_PRIVACY_FRIEND2) AND \r\n (SELECT TRUE FROM se_friends AS friends_primary \r\n LEFT JOIN se_users ON friends_primary.friend_user_id1=se_users.user_id \r\n LEFT JOIN se_friends AS friends_secondary ON friends_primary.friend_user_id2=friends_secondary.friend_user_id1 \r\n WHERE friends_primary.friend_user_id1=se_actions.action_object_owner_id \r\n AND friends_secondary.friend_user_id2='{$user_id}' AND se_users.user_subnet_id='{$user_subnet_id}' LIMIT 1\r\n ))\r\n THEN TRUE\r\n ELSE FALSE\r\n END\r\n "; // CALL HOOK ($hook = SE_Hook::exists('se_action_privacy')) ? SE_Hook::call($hook, array('actions_query' => &$actions_query)) : NULL; // RESUME CASE STATEMENT $actions_query .= "\r\n ELSE TRUE\r\n END AND\r\n "; // ADD WHERE CLAUSE IF NECESSARY if ($where != "") { $actions_query .= " ({$where}) AND"; } // LIMIT RESULTS TO TIME PERIOD SPECIFIED BY ADMIN $actions_query .= " se_actions.action_date > " . ($nowdate - $setting['setting_actions_showlength']); $actions_query .= $last_action_id ? " AND se_actions.action_id < " . $last_action_id : ''; $actions_query .= $first_action_id ? " AND se_actions.action_id > " . $first_action_id : ''; // ORDER BY ACTION ID DESCENDING $actions_query .= " ORDER BY action_id DESC"; $limit = $setting['setting_he_wall_actions_per_page']; // LIMIT RESULTS TO MAX NUMBER SPECIFIED BY ADMIN $actions_query .= " LIMIT {$limit}"; // GET RECENT ACTIVITY FEED $actions = $database->database_query($actions_query); $actions_array = array(); $actions_users_array = array(); while ($action = $database->database_fetch_assoc($actions)) { // ONLY DISPLAY THIS ACTION IF MAX OCCURRANCES PER USER HAS NOT YET BEEN REACHED $actions_users_array[] = $action['action_user_id']; $occurrances = array_count_values($actions_users_array); if ($occurrances[$action['action_user_id']] <= $actionsperuser) { // UNSERIALIZE VARIABLES // NOTE: I don't like mb_unserialize: it ignores the strlen param. But it works... if (($action_vars = unserialize($action['action_text'])) === FALSE) { $action_vars = mb_unserialize($action['action_text']); } // REGISTER PRELOADED TEXT SE_Language::_preload($action['actiontype_text']); // RETRIEVE MEDIA IF NECESSARY $action_media = false; if ($action['actiontype_media']) { $action_media = array(); $media = $database->database_query("SELECT * FROM se_actionmedia WHERE actionmedia_action_id='{$action['action_id']}'"); while ($media_info = $database->database_fetch_assoc($media)) { $action_media[] = $media_info; } } // ADD THIS ACTION TO OUTPUT ARRAY $actions_array[] = array('action_id' => $action['action_id'], 'action_date' => $action['action_date'], 'action_text' => $action['actiontype_text'], 'action_vars' => $action_vars, 'action_user_id' => $action['action_user_id'], 'action_icon' => $action['actiontype_icon'], 'action_media' => $action_media); } } // CACHE if (is_object($cache_object)) { $cache_object->store($actions_array, $cache_id); } } // Process actions (load language) foreach ($actions_array as $action) { SE_Language::_preload($action['action_text']); } // RETURN LIST OF ACTIONS return $actions_array; }
$sql = "\r\n UPDATE\r\n se_settings\r\n SET\r\n setting_cache_enabled='{$setting_cache_enabled}',\r\n setting_cache_default='{$setting_cache_default}',\r\n setting_cache_lifetime='{$setting_cache_lifetime}',\r\n setting_cache_file_options='{$setting_cache_file_options}',\r\n setting_cache_memcache_options='{$setting_cache_memcache_options}'\r\n "; $database->database_query($sql) or die($database->database_error()); } // Unserialize options for template/config generation if ($setting['setting_cache_file_options'] && is_string($setting['setting_cache_file_options'])) { $cache_file_options = @unserialize($setting['setting_cache_file_options']); } if ($setting['setting_cache_memcache_options'] && is_string($setting['setting_cache_memcache_options'])) { $cache_memcache_options = @unserialize($setting['setting_cache_memcache_options']); } // GET AVAILABLE STORAGE OPTIONS IF NOT SAVING if ($task != "dosave") { //var_dump($cache_file_options); $filecache_test_root = preg_replace('/^[.]/', SE_ROOT, $cache_file_options['root']); $memcache_test_servers = $cache_memcache_options['servers']; $available_storage = SECache::getStorageHandlers(); if (!is_array($available_storage)) { $available_storage = array(); } } /* // Check if enabled and display error message if( (!$setting['setting_cache_enabled'] || !in_array("file", $available_storage)) && $cache_options['storage']=="file" ) { $is_error = "Make sure the cache directory specified exists and is chmod 777"; } elseif( (!$setting['setting_cache_enabled'] || !in_array("file", $available_storage)) && $cache_options['storage']=="memcache" ) { $is_error = "Make sure the memcache extension is installed and a memcache server is running."; } */
function _loadGlobalValues($language_id, $overwrite = FALSE) { //echo " load.{$this->_load_count} "; $language_object = SELanguage::_init(); $cache_object = SECache::getInstance('serial'); if (!is_object($cache_object)) { return; } // Return if empty $global_language_values = $cache_object->get('language_globals_' . $language_id); if (empty($global_language_values)) { return; } foreach ($global_language_values as $global_languagevar_id => $global_languagevar_value) { if (!$overwrite && !empty($this->_language_variables[$global_languagevar_id])) { continue; } if (empty($global_languagevar_value)) { continue; } $this->_language_variables[$global_languagevar_id] = $global_languagevar_value; } }
function actions_allowed() { global $user, $setting, $database; if (!$setting['setting_actions_preference']) { return FALSE; } $actiontypes_array = NULL; // CACHING $cache_object = SECache::getInstance('serial'); if (is_object($cache_object)) { $actiontypes_array = $cache_object->get('actiontypes'); } // RETRIEVAL if (!is_array($actiontypes_array) || empty($actiontypes_array)) { $resource = $database->database_query("SELECT actiontype_id, actiontype_desc FROM se_actiontypes WHERE actiontype_enabled=1"); while ($actiontype = $database->database_fetch_assoc($resource)) { $actiontypes_array[] = $actiontype; } // CACHE if (is_object($cache_object)) { $cache_object->store($actiontypes_array, 'actiontypes'); } } // POST PROCESSING if (empty($user->usersetting_info)) { $user->user_settings(); } $actiontypes_display = explode(",", $user->usersetting_info['usersetting_actions_display']); foreach ($actiontypes_array as $actiontype_index => $actiontype) { SE_Language::_preload($actiontype['actiontype_desc']); // MAKE THIS ACTION TYPE SELECTED IF ITS NOT DISALLOWED BY USER $actiontypes_array[$actiontype_index]['actiontype_selected'] = in_array($actiontype['actiontype_id'], $actiontypes_display); } return $actiontypes_array; }