public function build($runData) { $site = $runData->getTemp("site"); $settings = $site->getSettings(); $runData->contextAdd("siteDomain", $site->getDomain()); $openIdServices = array(array('pattern' => '^[a-z0-9\\.\\-]+\\.myopenid\\.com\\/?$', 'server' => 'http://www.myopenid.com/server'), array('pattern' => '^[a-z0-9\\.\\-]+\\.getopenid\\.com\\/?$', 'server' => 'https://getopenid.com/server'), array('pattern' => '^[a-z0-9\\.\\-]+\\.livejournal\\.com\\/?$', 'server' => 'http://www.livejournal.com/openid/server.bml'), array('pattern' => '^[a-z0-9\\.\\-]+\\.vox\\.com\\/?$', 'server' => 'http://www.vox.com/openid/server'), array('pattern' => '^[a-z0-9\\.\\-]+\\.verisignlabs\\.com\\/?$', 'server' => 'https://pip.verisignlabs.com/server'), array('pattern' => '^[a-z0-9\\.\\-]+\\.openid\\.pl\\/?$', 'server' => 'http://openid.pl/server'), array('pattern' => '^myid\\.pl\\/id\\/', 'server' => 'http://myid.pl/auth')); $json = new JSONService(); $os = $json->encode($openIdServices); $runData->contextAdd("openIdServices", $os); // current settings $runData->contextAdd("enabled", $settings->getOpenidEnabled()); $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("page_id", null); $ooroot = DB_OpenidEntryPeer::instance()->selectOne($c); $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("page_id", null, "!="); $oos = DB_OpenidEntryPeer::instance()->select($c); $runData->contextAdd("openIdRoot", $ooroot); $runData->contextAdd("openIds", $oos); }
public function saveOpenIDEvent($runData) { $pl = $runData->getParameterList(); $site = $runData->getTemp("site"); $settings = $site->getSettings(); $openIdEnabled = $pl->getParameterValue("enableOpenID") == "true"; $json = new JSONService(SERVICES_JSON_LOOSE_TYPE); $vals = $json->decode($pl->getParameterValue("vals")); $affectedPages = array(); $outdater = new Outdater(); $db = Database::connection(); $db->begin(); $settings->setOpenidEnabled($openIdEnabled); $settings->save(); // get the already assigned openids $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $oldOpenIDs = DB_OpenidEntryPeer::instance()->select($c); $rootProcessed = false; $oldOpenIDs2 = $oldOpenIDs; foreach ($vals as $val) { $pageId = null; $page = null; if ($val['page']) { // not a root page $page = DB_PagePeer::instance()->selectByName($site->getSiteId(), $val['page']); if (!$page) { throw new ProcessException(sprintf(_("The page %s can not be found"), $vals['page'])); } $pageId = $page->getPageId(); } elseif (!$rootProcessed) { $rootProcessed = true; } elseif ($rootProcessed) { continue; } // validate the data $url = $val['identityUrl']; $serverUrl = $val['serverUrl']; if (!$url) { continue; } if (!preg_match(';^[a-z0-9\\-\\./#]+$;i', $url)) { throw new ProcessException(sprintf("Identity URL %s is not valid.", $url)); } if (!preg_match(';^https?://[a-z0-9\\-\\./#]+$;i', $serverUrl)) { throw new ProcessException(sprintf("Server URL %s is not valid.", $serverUrl)); } // check if the entry already exists $entry = null; foreach ($oldOpenIDs as $oo) { if ($oo->getPageId() === $pageId) { $entry = $oo; foreach ($oldOpenIDs2 as $oo2key => &$oo2) { if ($oo2->getPageId() === $pageId) { $ookey = $oo2key; break; } } unset($oldOpenIDs2[$ookey]); break; } } if (!$entry) { $entry = new DB_OpenidEntry(); $entry->setSiteId($site->getSiteId()); $entry->setPageId($pageId); } $entry->setUrl('http://' . $url); $entry->setServerUrl($serverUrl); // save the entry $entry->save(); // outdate caches if ($page) { $outdater->outdatePageCache($page); } else { $outdater->outdatePageCache($site->getDefaultPage()); } } // remove unused entries foreach ($oldOpenIDs2 as $oo) { DB_OpenidEntryPeer::instance()->deleteByPrimaryKey($oo->getOpenidId()); // outdate caches $pageId = $oo->getPageId(); if ($pageId) { $page = DB_PagePeer::instance()->selectByPrimaryKey($pageId); } else { $page = $site->getDefaultPage(); } $outdater->outdatePageCache($page); } $db->commit(); }
public function render($runData) { // get site $site = $runData->getTemp("site"); $runData->contextAdd("site", $site); $this->handleNotifications($runData); $pl = $runData->getParameterList(); $wikiPage = $pl->getParameterValue("wiki_page"); $privateAccessGranted = true; // check if the site is private if ($site->getPrivate()) { $user = $runData->getUser(); if ($user && !$user->getSuperAdmin() && !$user->getSuperModerator()) { // check if member $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("user_id", $user->getUserId()); $mem = DB_MemberPeer::instance()->selectOne($c); if (!$mem) { // check if a viewer $c = new Criteria(); $c->add("site_id", $site->getSiteId()); $c->add("user_id", $user->getUserId()); $vi = DB_SiteViewerPeer::instance()->selectOne($c); if (!$vi) { $user = null; } } } if ($user == null) { $wikiPage = $site->getSettings()->getPrivateLandingPage(); $privateAccessGranted = false; } } if ($wikiPage == "") { $wikiPage = $site->getDefaultPage(); } $wikiPage = WDStringUtils::toUnixName($wikiPage); $runData->setTemp("pageUnixName", $wikiPage); $memcache = Ozone::$memcache; if ($runData->getAction() == null && $runData->getRequestMethod() == "GET" && $privateAccessGranted) { // try to get content from the memorycache server $mcKey = 'page..' . $site->getUnixName() . '..' . $wikiPage; if (strpos($wikiPage, ":") != false) { $tmp0 = explode(':', $wikiPage); $categoryName = $tmp0[0]; } else { $categoryName = "_default"; } $aKey = 'category_lc..' . $site->getUnixName() . '..' . $categoryName; $changeTime = $memcache->get($aKey); $cachedPage = $memcache->get($mcKey); if ($cachedPage !== false && $changeTime && $changeTime <= $cachedPage['timestamp']) { $runData->setTemp("page", $cachedPage['page']); $GLOBALS['page'] = $cachedPage['page']; $out = $cachedPage['content']; if ($this->vars['notificationsDialog']) { $out = preg_replace(';<div id="account-notifications-dummy" style="display:none"></div>;', '<div id="notifications-dialog" style="display:none">' . $this->vars['notificationsDialog'] . '</div>', $out, 1); } return $out; } else { $storeLater = true; } } $runData->contextAdd("wikiPageName", $wikiPage); $settings = $site->getSettings(); // get wiki page from the database $page = DB_PagePeer::instance()->selectByName($site->getSiteId(), $wikiPage); if ($page == null) { $runData->contextAdd("pageNotExists", true); // get category based on suggested page name if (strpos($wikiPage, ":") != false) { $tmp0 = explode(':', $wikiPage); $categoryName = $tmp0[0]; } else { $categoryName = "_default"; } $category = DB_CategoryPeer::instance()->selectByName($categoryName, $site->getSiteId()); if ($category == null) { $category = DB_CategoryPeer::instance()->selectByName('_default', $site->getSiteId()); } $runData->setTemp("category", $category); } else { // page exists!!! wooo!!! $runData->setTemp("page", $page); $GLOBALS['page'] = $page; $compiled = $page->getCompiled(); $runData->contextAdd("wikiPage", $page); $runData->contextAdd("pageContent", $compiled->getText()); $category = $page->getCategory(); $runData->setTemp("category", $category); // show options? $showPageOptions = true; $runData->contextAdd("showPageoptions", $showPageOptions); // get the tags $c = new Criteria(); $c->add("page_id", $page->getPageId()); $c->addOrderAscending("tag"); $tags = DB_PageTagPeer::instance()->select($c); $t2 = array(); foreach ($tags as $t) { $t2[] = $t->getTag(); } $runData->contextAdd("tags", $t2); // has discussion? if ($page->getThreadId() !== null) { $thread = DB_ForumThreadPeer::instance()->selectByPrimaryKey($page->getThreadId()); if ($thread == null) { $page->setThreadId(null); $page->save(); } else { $page->setTemp("numberPosts", $thread->getNumberPosts()); } } // look for parent pages (and prepare breadcrumbs) if ($page->getParentPageId()) { $breadcrumbs = array(); $ppage = DB_PagePeer::instance()->selectByPrimaryKey($page->getParentPageId()); array_unshift($breadcrumbs, $ppage); $bcount = 0; while ($ppage->getParentPageId() && $bcount <= 4) { $ppage = DB_PagePeer::instance()->selectByPrimaryKey($ppage->getParentPageId()); array_unshift($breadcrumbs, $ppage); $bcount++; } $runData->contextAdd("breadcrumbs", $breadcrumbs); } } $runData->contextAdd("category", $category); // GET THEME for the category $theme = $category->getTheme(); $runData->contextAdd("theme", $theme); // GET LICENSE for the category $licenseText = $category->getLicenseText(); $runData->contextAdd("licenseText", $licenseText); // show nav elements? if ($privateAccessGranted || !$settings->getHideNavigationUnauthorized()) { if ($theme->getUseSideBar()) { $sideBar1 = $category->getSidePage(); if ($sideBar1 !== null) { $sideBar1Compiled = $sideBar1->getCompiled(); $ccc = $sideBar1Compiled->getText(); $ccc = preg_replace('/id="[^"]*"/', '', $ccc); $runData->contextAdd("sideBar1Content", $ccc); } } if ($theme->getUseTopBar()) { $topBar = $category->getTopPage(); if ($topBar !== null) { $topBarCompiled = $topBar->getCompiled(); $ccc = $topBarCompiled->getText(); $ccc = preg_replace('/id="[^"]*"/', '', $ccc); $runData->contextAdd("topBarContent", $ccc); } } } // OpenID stuff now !!! if ($settings->getOpenidEnabled() && $page) { // find a page $c = new Criteria(); $c->add("site_id", $site->getSiteId()); if ($_SERVER['REQUEST_URI'] == "/") { $c->add("page_id", null); } else { $c->add("page_id", $page->getPageId()); } $oentry = DB_OpenidEntryPeer::instance()->selectOne($c); if ($oentry) { $openId = array(); $openId['enabled'] = true; $openId['identity'] = $oentry->getUrl(); $openId['server'] = $oentry->getServerUrl(); $runData->contextAdd("openId", $openId); } } // check wether to include a special JS file for custom domains or a special JS file for private files //if (preg_match('/^([a-zA-Z0-9\-]+)\.' . GlobalProperties::$URL_DOMAIN_PREG . '$/',$_SERVER["HTTP_HOST"], $matches) !==1) { // $runData->contextAdd("useCustomDomainScript", true); //} $smarty = Ozone::getSmarty(); // put context into context $context = $runData->getContext(); if ($context !== null) { foreach ($context as $key => $value) { $smarty->assign($key, $value); } } $templateFile = PathManager::screenTemplate("wiki/WikiScreen"); $screenContent = $smarty->fetch($templateFile); $smarty->assign("screen_placeholder", $screenContent); $layoutFile = PathManager::layoutTemplate("WikiLayout"); $out = $smarty->fetch($layoutFile); if ($storeLater) { $now = time(); if (!$changeTime) { $memcache->set($aKey, $now, 0, 864000); } $memcache->set($mcKey, array("page" => $page, "content" => $out, "timestamp" => $now), 0, 864000); } if ($this->vars['notificationsDialog']) { $out = preg_replace(';<div id="account-notifications-dummy" style="display:none"></div>;', '<div id="notifications-dialog" style="display:none">' . $this->vars['notificationsDialog'] . '</div>', $out, 1); } return $out; }