/** * Executes index action * * @param sfRequest $request A request object */ public function executeIndex(sfWebRequest $request) { $user = PcUserPeer::getLoggedInUser(); $this->getUser()->setCulture($user->getPreferredLanguage()); // {{{ START: is this the first login? // We need to do this before calling refreshLastLogin() if ($user->getLastLogin('U') < mktime(0, 0, 0)) { $this->getUser()->setAttribute('user_first_login_of_the_day', 1); } else { $this->getUser()->setAttribute('user_first_login_of_the_day', 0); } // }}} END: is this the first login? $user->refreshLastLogin()->save(); if (!$user->getHasDesktopAppBeenLoaded()) { $this->getUser()->setAttribute('user_still_to_load_desktop_app', 1); } // the action we are in is not called by the mobile app, but must by the desktop app $user->setHasDesktopAppBeenLoaded(true)->save(); $this->updateAvailable = false; // check whether one day has passed from the last check $lastCheckForUpdates = PcUtils::getValue('last_check_for_updates', time()); if (time() - $lastCheckForUpdates > 86400) { // time to do a new check // // we access the version file directly (and not the config value) to avoid cache $urlFriendlySiteVersion = str_replace('.', '-', file_get_contents(sfConfig::get('sf_root_dir') . '/version')); $updatesUrl = sfConfig::get('app_site_urlForUpdates') . '/' . $urlFriendlySiteVersion; // $updatesUrl may be something like this: http://updates.plancake.com/updates/1.8.6 $updates = PcUtils::getFileContentOverInternet($updatesUrl, true); // $updates may be something like this: // 1--|--ffb524e371203966974750bf5c3a9a77--|--Reminder: Plancake will be down for maintenance in a few hours--|--http://tinyurl.com/34vwsq5 $updatesParts = explode(sfConfig::get('app_site_updatesStringDivider'), $updates); $newReleaseAvailable = isset($updatesParts[0]) ? $updatesParts[0] : ''; $lastUpdateSignature = isset($updatesParts[1]) ? $updatesParts[1] : ''; $lastUpdateDescription = isset($updatesParts[2]) ? $updatesParts[2] : ''; $lastUpdateLink = isset($updatesParts[3]) ? $updatesParts[3] : ''; // we use this also in the hosted version (even if it is meant for installations) // to spot problems easily $this->updateAvailable = (bool) $newReleaseAvailable; if (defined('PLANCAKE_PUBLIC_RELEASE')) { // check whether the update is already in the system if (!is_object(PcUpdatePeer::retrieveBySignature($lastUpdateSignature))) { $update = new PcUpdate(); $update->setUrl($lastUpdateLink)->setDescription($lastUpdateDescription)->setSignature($lastUpdateSignature)->setCreatedAt(time())->save(); PcUtils::broadcastUpdate($lastUpdateDescription, $lastUpdateLink); } } PcUtils::setValue('last_check_for_updates', time()); } }