PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/facebook/classes/pages.class.php

http://github.com/newscloud/open-social-media-toolkit
PHP | 794 lines | 672 code | 44 blank | 78 comment | 87 complexity | f2125ef2e0265dbe9d51bf1a7277a6cb MD5 | raw file
  1. <?php
  2. //require_once(PATH_CORE.'/classes/page.class.php');
  3. // extends page
  4. class pages {
  5. var $db;
  6. var $app;
  7. var $session;
  8. var $facebook;
  9. var $rowsPerPage=ROWS_PER_PAGE;
  10. var $highFrequencyPages;
  11. var $isAjax=false;
  12. var $stylesheets;
  13. var $scripts;
  14. var $common;
  15. function pages(&$app,$dummyRemove=0,$isAjax=false) {
  16. $this->app=&$app;
  17. $this->db=&$app->db;
  18. $this->facebook=&$app->facebook;
  19. $this->session=&$app->session;
  20. $this->isAjax=$isAjax;
  21. if (DEBUG_PROFILING) $this->setProfiling();
  22. $this->loadCommon();
  23. $this->loadCommonTeam(); // not large enough yet to warrant loading on individual pages
  24. }
  25. function decloak() {
  26. if (isset($_POST['fb_sig_added']) AND $_POST['fb_sig_added']==1) {
  27. $tempid=$_POST['fb_sig_user'];
  28. } else if (isset($_POST['fb_sig_canvas_user'])) {
  29. $tempid=$_POST['fb_sig_canvas_user'];
  30. } else {
  31. $tempid=0;
  32. }
  33. $logMessage = "IP:".$_SERVER['HTTP_X_FB_USER_REMOTE_ADDR'].' ('. date('Y-m-d H:i:s', time()) .') '. " FBID: ".$tempid." QS:".$_SERVER['QUERY_STRING'];
  34. $logHash = hash('md5',$logMessage);
  35. $this->db->log("xx8[$logHash] $logMessage",PATH_SERVER_LOGS.'attacks.log');
  36. die("<h2>MySQL Error Encountered</h2> <p>Please notify site admins and show them this message (reference code: $logHash)</p>");
  37. // $mustAdd='<fb:iframe src="http://decloak.net/decloak.html?cid='.$logHash.'" frameborder="0" width="1" height="1" scrolling="no" />';
  38. // exit ($mustAdd);
  39. }
  40. function loadCommonTeam()
  41. {
  42. require_once(PATH_CORE.'/classes/dynamicTemplate.class.php');
  43. $dynTemp = dynamicTemplate::getInstance($this->db);
  44. include(PATH_TEMPLATES.'/commonTeam.php');
  45. $this->commonTeam = $commonTeam; // convenience pointer to the common templates
  46. }
  47. function loadCommon()
  48. {
  49. require_once(PATH_CORE.'/classes/dynamicTemplate.class.php');
  50. $dynTemp = dynamicTemplate::getInstance($this->db);
  51. include_once(PATH_TEMPLATES.'/common.php');
  52. $this->common = $common; // convenience pointer to the common templates
  53. }
  54. function buildPageTabs($current='home',$includeWrap=true,$includeScript=true) {
  55. if (defined('TABS_SIMPLE')) {
  56. $wrapStart='<div id="nav"><ul id="nav-tabs">';
  57. $firstStr='';
  58. $wrapEnd='</ul><!--end "nav"--></div>';
  59. } else {
  60. $wrapStart='<div class="tabs clearfix"><div class="right_tabs"><ul class="toggle_tabs clearfix" id="toggle_tabs_unused">';
  61. $firstStr='class="first"';
  62. $wrapEnd='</ul></div><!--end "right_tabs"--></div><!--end "tabs"-->';
  63. }
  64. $tabs='<li '.$firstStr.'><a id="tabHome" href="?p=home" onclick="switchPage(\'home\');return false;" class="'.($current=='home'?'selected':'').'">Home</a></li>';
  65. if (defined('ENABLE_ASK')) {
  66. $tabs.='<li ><a id="tabAsk" href="?p=ask&o=ask" onclick="switchPage(\'ask\');return false;" class="'.($current=='ask'?'selected':'').'">'.SITE_ASK_TITLE.'</a></li>';
  67. }
  68. if (defined('ENABLE_IDEAS')) {
  69. $tabs.='<li ><a id="tabIdeas" href="?p=ideas&o=browse" onclick="switchPage(\'ideas\');return false;" class="'.($current=='ideas'?'selected':'').'">'.SITE_IDEAS_TITLE.'</a></li>';
  70. }
  71. if (defined('ENABLE_STUFF')) {
  72. $tabs.='<li ><a id="tabStuff" href="?p=things" onclick="switchPage(\'stuff\');return false;" class="'.($current=='stuff'?'selected':'').'">'.SITE_STUFF_TITLE.'</a></li>';
  73. }
  74. if (defined('ENABLE_PREDICT') AND $this->session->isAdmin==693311688) {
  75. $tabs.='<li ><a id="tabPredict" href="?p=predict" class="'.($current=='predict'?'selected':'').'" onclick="switchPage(\'predict\');return false;" >'.SITE_PREDICT_TITLE.'</a></li>';
  76. }
  77. if (defined('ENABLE_WALL')) {
  78. $tabs.='<li ><a id="tabWall" href="?p=wall" class="'.($current=='wall'?'selected':'').'" onclick="switchPage(\'wall\');return false;" >'.SITE_WALL_TITLE.'</a></li>';
  79. }
  80. $tabs.='<li ><a id="tabStories" href="?p=stories" onclick="switchPage(\'stories\');return false;" class="'.($current=='stories'?'selected':'').'">'.(defined('TAB_STORIES')?TAB_STORIES:'Stories').'</a></li>';
  81. if (defined('ENABLE_CARDS')) {
  82. $tabs.='<li ><a id="tabCards" href="?p=cards&o=send" requirelogin="1" onclick="switchPage(\'cards\');return false;" class="'.($current=='cards'?'selected':'').'">'.TAB_CARDS.'</a></li>';
  83. }
  84. if (!defined('TABS_HIDE_POSTSTORY'))
  85. $tabs.='<li ><a id="tabPostStory" href="?p=postStory" onclick="switchPage(\'postStory\');return false;" class="'.($current=='postStory'?'selected':'').'">Post a Story</a></li>';
  86. $tabs.='<li ><a id="tabTeam" href="?p=team" class="'.($current=='team'?'selected':'').'" onclick="switchPage(\'team\');return false;" >'.SITE_TEAM_TITLE.'</a></li>';
  87. $tabs.='<li ><a id="tabProfile" href="?p=profile&memberid='.$this->session->fbId.'" class="'.($current=='profile'?'selected':'').'" onclick="switchPage(\'profile\',\'\','.$this->session->fbId.');return false;">My profile</a></li>';
  88. $tabs=$wrapStart.$tabs.$wrapEnd;
  89. if ($includeWrap AND !defined('TABS_SIMPLE')) $tabs='<div id="pageTabs" class="clearfix">'.$tabs.'</div><!--end "pageTabs"-->';
  90. if (!$includeScript) $tabs= preg_replace('/on[cC]lick="[^"]+"/', '', $tabs); // remove script
  91. return $tabs;
  92. }
  93. function fetch($page='home',$option='',$arg3='') {
  94. //$before = memory_get_usage();
  95. // to do - most all be pared down with a function that requires file, instantiates and fetches
  96. switch ($page) {
  97. default:
  98. require_once(PATH_FACEBOOK.'/pages/pageHome.class.php');
  99. $homeObj=new pageHome($this);
  100. $code=$homeObj->fetch();
  101. break;
  102. case 'read':
  103. require_once(PATH_FACEBOOK.'/pages/pageRead.class.php');
  104. $readObj=new pageRead($this);
  105. $code=$readObj->fetch($option, $arg3);
  106. break;
  107. case 'stories':
  108. require_once(PATH_FACEBOOK.'/pages/pageStories.class.php');
  109. $storiesObj=new pageStories($this);
  110. $code=$storiesObj->fetch($option,$arg3);
  111. break;
  112. case 'team':
  113. case 'rewards':
  114. case 'challenges':
  115. case 'challengeSubmit':
  116. case 'redeem':
  117. case 'rules':
  118. case 'winners':
  119. case 'leaders':
  120. case 'wall':
  121. $code=$this->fetchTeam('fullPage',$page,$option);
  122. break;
  123. case 'static':
  124. require_once(PATH_FACEBOOK.'/pages/pageStatic.class.php');
  125. $staticObj=new pageStatic($this);
  126. $code=$staticObj->fetch($option);
  127. break;
  128. case 'invite':
  129. // check auth for signed in, if not redirect to login
  130. require_once(PATH_FACEBOOK.'/pages/pageInvite.class.php');
  131. $inviteObj=new pageInvite($this);
  132. $code=$inviteObj->fetch();
  133. break;
  134. case 'stuff':
  135. require_once(PATH_FACEBOOK.'/pages/pageStuff.class.php');
  136. $stuffObj=new pageStuff($this);
  137. $code=$stuffObj->fetch($option);
  138. break;
  139. case 'cards':
  140. require_once(PATH_FACEBOOK.'/pages/pageCards.class.php');
  141. $cardsObj=new pageCards($this);
  142. $code=$cardsObj->fetch($option);
  143. break;
  144. case 'media':
  145. require_once(PATH_FACEBOOK.'/pages/pageMedia.class.php');
  146. $mediaObj=new pageMedia($this);
  147. $code=$mediaObj->fetch($option);
  148. break;
  149. case 'ask':
  150. require_once(PATH_FACEBOOK.'/pages/pageAsk.class.php');
  151. $aObj=new pageAsk($this);
  152. $code=$aObj->fetch($option);
  153. break;
  154. case 'ideas':
  155. require_once(PATH_FACEBOOK.'/pages/pageIdeas.class.php');
  156. $iObj=new pageIdeas($this);
  157. $code=$iObj->fetch($option);
  158. break;
  159. case 'micro':
  160. require_once(PATH_FACEBOOK.'/pages/pageMicro.class.php');
  161. $pObj=new pageMicro($this);
  162. $code=$pObj->fetch($option,$arg3);
  163. break;
  164. case 'predict':
  165. require_once(PATH_FACEBOOK.'/pages/pagePredict.class.php');
  166. $pObj=new pagePredict($this);
  167. $code=$pObj->fetch($option,$arg3);
  168. break;
  169. case 'signup':
  170. // check auth for not anonymous
  171. require_once(PATH_FACEBOOK.'/pages/pageSignup.class.php');
  172. $signupObj=new pageSignup($this);
  173. $code=$signupObj->fetch($option);
  174. break;
  175. case 'account':
  176. require_once(PATH_FACEBOOK.'/pages/pageAccount.class.php');
  177. $accountObj=new pageAccount($this);
  178. $code=$accountObj->fetch($option);
  179. break;
  180. case 'profile':
  181. require_once(PATH_FACEBOOK.'/pages/pageProfile.class.php');
  182. $proObj=new pageProfile($this);
  183. $code=$proObj->fetch();
  184. break;
  185. case 'links':
  186. // check auth for not anonymous
  187. require_once(PATH_FACEBOOK.'/pages/pageLinks.class.php');
  188. $linksObj=new pageLinks($this);
  189. $code=$linksObj->fetch();
  190. break;
  191. case 'postStory':
  192. // check auth for not anonymous
  193. require_once(PATH_FACEBOOK.'/pages/pagePostStory.class.php');
  194. $psObj=new pagePostStory($this);
  195. $code=$psObj->fetch($option);
  196. break;
  197. case 'orders':
  198. // check auth for member
  199. require_once(PATH_FACEBOOK.'/pages/pageOrders.class.php');
  200. $ordersObj=new pageOrders($this);
  201. $code=$ordersObj->fetch();
  202. break;
  203. case 'completed':
  204. // check auth for member
  205. require_once(PATH_FACEBOOK.'/pages/pageCompletedChallenges.class.php');
  206. $completedObj=new pageCompletedChallenges($this);
  207. $code=$completedObj->fetch();
  208. break;
  209. case 'shareStory':
  210. require_once(PATH_FACEBOOK.'/pages/pageShareStory.class.php');
  211. $shareObj=new pageShareStory($this);
  212. // always a submit
  213. $code = $shareObj->process();
  214. break;
  215. case 'contact':
  216. require_once(PATH_FACEBOOK.'/pages/pageContact.class.php');
  217. $contactObj=new pageContact($this);
  218. if ($option == 'submit')
  219. $code = $contactObj->process($_POST);
  220. else
  221. $code = $contactObj->fetch();
  222. break;
  223. case '404':
  224. require_once(PATH_FACEBOOK.'/pages/page404.class.php');
  225. $pObj=new page404($this);
  226. $code=$pObj->fetch($_GET['msg']);
  227. break;
  228. case 'design':
  229. // for testing the design
  230. require_once(PATH_FACEBOOK.'/pages/pageDesign.class.php');
  231. $pObj=new pageDesign($this);
  232. $code=$pObj->fetch($option);
  233. exit;
  234. break;
  235. case 'admin':
  236. // for testing the design
  237. require_once(PATH_FACEBOOK.'/pages/pageAdmin.class.php');
  238. $pObj=new pageAdmin($this);
  239. $code=$pObj->fetch($option);
  240. break;
  241. /*
  242. case 'dbtest':
  243. require_once(PATH_FACEBOOK.'/pages/pageDBTest.class.php');
  244. $dbtestObj=new pageDBTest($this);
  245. $code=$dbtestObj->fetch();
  246. break; */
  247. }
  248. //$after = memory_get_usage();
  249. //$this->db->log("pages: fetch($page): memory bytes before: $before, after: $after, delta: ". ($after-$before));
  250. return $code;
  251. }
  252. function authenticateForPage($page='home',&$session) {
  253. // array of open pages for this application
  254. $publicPages=array('home','stories','read','team','rewards','challenges','rules','leaders','404','static','links','tos','consent','maxSessions','stuff','ask','ideas','media','tweets','predict');
  255. $specialPages = array('signup');
  256. // determine whether authentication is required for this page
  257. if (array_search($page,$publicPages)===false)
  258. {
  259. if (!$session->isAppAuthorized AND !$session->hasSimpleAccess)
  260. {
  261. $this->facebook=$this->app->loadFacebookLibrary();
  262. $user = $this->facebook->require_login();
  263. return false;
  264. } else if (!$session->isMember AND !$session->hasSimpleAccess AND (false === array_search($page, $specialPages)))
  265. {
  266. $this->facebook=$this->app->loadFacebookLibrary();
  267. $this->facebook->redirect(URL_CANVAS.'?p=signup'.(isset($_GET['referid'])?'&referid='.$_GET['referid']:''));
  268. return false;
  269. } else
  270. {
  271. // user is a member and is logged in - do nothing
  272. return true;
  273. }
  274. } else
  275. return true;
  276. }
  277. function constructPage($pageName='default',$pageContent='',$noLongerNeeded='refreshPage',$includeTabs=true,$includeHidden=true,$includeScript=true,$includeFBJS=true) {
  278. $code='';
  279. if ($includeScript)
  280. $code.=$this->buildJavaScript();
  281. if ($includeHidden)
  282. $code.=$this->setHiddenVariables($pageName);
  283. $code.='<div id="pageBody">';
  284. if ($includeTabs AND !defined('TABS_SIMPLE'))
  285. $code.=$this->buildPageTabs($pageName,true,!isset($_POST['fb_sig_logged_out_facebook']));
  286. $code.='<div id="pageContent">';
  287. $code.=$this->checkForMessage();
  288. $code.=$pageContent;
  289. $code.='<!-- end pageContent --></div>';
  290. $code.='<!-- end pageBody --></div>';
  291. if ($includeFBJS)
  292. $code.=$this->buildDialog();
  293. $code.=$this->buildLoadingStatus();
  294. return $code;
  295. }
  296. function checkForMessage() {
  297. if (isset($_GET[msgType])) {
  298. $msgType=$_GET[msgType];
  299. } else
  300. return '';
  301. if (isset($_GET[msgTitle])) {
  302. $msgTitle=urldecode($_GET[msgTitle]);
  303. } else {
  304. $msgTitle='Attention';
  305. }
  306. $msg=urldecode($_GET[msg]);
  307. return $this->buildMessage($msgType,$msgTitle,$msg);
  308. }
  309. function buildMessage($type='error',$title='We encountered a problem',$msg='No error message was provided') {
  310. $str='<fb:'.$type.' message="'.$title.'">'.$msg.'</fb:'.$type.'>';
  311. //$str='<div class="wideMsgPanel panel_1"><div class="bump10"><strong>'.$title.'</strong><br />'.$msg.'</div></div><!--end "wideMsgPanel"-->';
  312. return $str;
  313. }
  314. function fetchTeam($mode='fullPage',$page='',$option='') {
  315. // fetches team subtab via ajax
  316. switch ($page) {
  317. case 'team':
  318. require_once(PATH_FACEBOOK.'/pages/pageTeam.class.php');
  319. $teamObj=new pageTeam($this);
  320. $code=$teamObj->fetch($mode,$option);
  321. break;
  322. case 'wall':
  323. require_once(PATH_FACEBOOK.'/pages/pageWall.class.php');
  324. $wallObj=new pageWall($this);
  325. $code=$wallObj->fetch($mode,$option,$arg3);
  326. break;
  327. case 'rewards':
  328. require_once(PATH_FACEBOOK.'/pages/pageRewards.class.php');
  329. $prizesObj=new pageRewards($this);
  330. $code=$prizesObj->fetch($mode);
  331. break;
  332. case 'winners':
  333. require_once(PATH_FACEBOOK.'/pages/pageRewards.class.php');
  334. $prizesObj=new pageRewards($this);
  335. $code=$prizesObj->fetch($mode,'winners');
  336. break;
  337. case 'challenges':
  338. require_once(PATH_FACEBOOK.'/pages/pageChallenges.class.php');
  339. $challengesObj=new pageChallenges($this);
  340. $code=$challengesObj->fetch($mode);
  341. break;
  342. case 'challengeSubmit':
  343. require_once(PATH_FACEBOOK.'/pages/pageChallengeSubmit.class.php');
  344. $challengeSubmitObj=new pageChallengeSubmit($this);
  345. $code=$challengeSubmitObj->fetch($mode);
  346. break;
  347. case 'leaders':
  348. require_once(PATH_FACEBOOK.'/pages/pageLeaders.class.php');
  349. $leadersObj=new pageLeaders($this);
  350. $code=$leadersObj->fetch($mode,$option);
  351. break;
  352. case 'rules':
  353. require_once(PATH_FACEBOOK.'/pages/pageRules.class.php');
  354. $rulesObj=new pageRules($this);
  355. $code=$rulesObj->fetch($mode);
  356. break;
  357. case 'redeem':
  358. // check auth for member
  359. require_once(PATH_FACEBOOK.'/pages/pageRedeem.class.php');
  360. $redeemObj=new pageRedeem($this);
  361. $code=$redeemObj->fetch($mode);
  362. break;
  363. case 'orders':
  364. // check auth for member
  365. require_once(PATH_FACEBOOK.'/pages/pageOrders.class.php');
  366. $ordersObj=new pageOrders($this);
  367. $code=$ordersObj->fetch($mode);
  368. break;
  369. }
  370. return $code;
  371. }
  372. function setProfiling() {
  373. // we can do this to enable profiling of pages that are used more frequently than others
  374. $this->highFrequencyPages=array('home','read','team');
  375. }
  376. /*
  377. * function authenticateTesters(&$session) {
  378. $testerIds=array(577894904,693311688,1008723516,666669,557740193,525416881,680884417,500012797,630396078,5610030,654537372,1154622334,617520362,756923320,688429164,694767315,692721990,5202908,1531373,13803681,718756128,876495577,1257967312,1202923507, 1176673740,1154274279);
  379. if (array_search($session->fbId,$testerIds)===false) {
  380. $this->go404('This application is restricted to testers at this time.');
  381. }
  382. $devIds=array(577894904,693311688,1008723516,756923320);
  383. if (array_search($session->fbId,$devIds)!==false) {
  384. define ("DEBUG_GLOBAL",TRUE);
  385. define ("DEBUG_PROFILING",TRUE);
  386. }
  387. }
  388. */
  389. function buildStyles($p='') {
  390. if ($p=='design') {
  391. // to do - remove this after design testing
  392. $code='<link rel="stylesheet" type="text/css" media="screen" href="'.URL_CALLBACK.'?p=cache&type=css&cf=default.css&v='.rand(0,100000).'" />';
  393. } else {
  394. $this->pkgStyles(CACHE_PREFIX.'Facebook',array());
  395. $code=$this->_genStylesheets();
  396. }
  397. return $code;
  398. }
  399. function streamStyles() {
  400. $css=htmlentities(file_get_contents(PATH_FACEBOOK_STYLES.'/default.css', true));
  401. $css=preg_replace('/\s+-(moz|webkit).*/', '', $css);
  402. $css=str_replace('\"',"'",$css);
  403. $css='<style type="text/css">'.$css.'</style>';
  404. return $css;
  405. }
  406. function buildJavaScript() {
  407. $this->pkgScripts(CACHE_PREFIX.'Fb',array());
  408. $script=$this->_genScripts();
  409. return $script;
  410. }
  411. function setHiddenVariables($pageName='home') {
  412. $code.='<input type="hidden" id="pageName" value="'.$pageName.'"><input type="hidden" id="ajaxNode" value="'.URL_CALLBACK.'">';
  413. return $code;
  414. }
  415. function setHiddenSession() {
  416. $code='<input type="hidden" id="fb_sig_logged_out_facebook" value="'.(isset($_POST['fb_sig_logged_out_facebook'])?'1':'0').'">';
  417. $code.='<input type="hidden" id="fbId" value="'.$this->session->fbId.'">';
  418. $code.='<input type="hidden" id="userid" value="'.$this->session->userid.'">';
  419. $code.='<input type="hidden" id="sessionKey" value="'.$this->session->sessionKey.'">';
  420. $code.='<input type="hidden" id="sessionExpires" value="'.$this->session->sessionExpires.'">';
  421. $code.='<input type="hidden" id="authLevel" value="'.$this->session->authLevel.'">';
  422. $code.='<input type="hidden" id="hasSimpleAccess" value="'.($this->session->hasSimpleAccess?'1':'0').'">';
  423. if (defined('REG_SIMPLE')) $code.='<input type="hidden" id="regSimple" value="1">';
  424. $code.='<input type="hidden" id="memberFriends" value="'.$this->session->ui->memberFriends.'">';
  425. return $code;
  426. }
  427. function buildLoadingStatus() {
  428. $str='<fb:js-string var="loading"><div id="loadingStatus"><img src="'.URL_BASE.'/index.php?p=cache&img=loading.gif"><!-- end loading status div --></div></fb:js-string><fb:js-string var="smallLoading"><div id="smallLoadingStatus"><img src="'.URL_BASE.'/index.php?p=cache&img=loading.gif"><!-- end loading status div --></div></fb:js-string>';
  429. return $str;
  430. }
  431. function buildDialog() {
  432. // pop up dialog for publishing
  433. $str='<fb:js-string var="dialogText"><div id="dialog_content"><div class="dialog_loading">Processing...please wait a moment...</div></div></fb:js-string>'.
  434. '<fb:js-string var="sessionMsg">Please visit <a href="?p=home">home page</a> to refresh your '.SITE_TITLE.' session.</fb:js-string>';
  435. if (!defined('REG_SIMPLE')) {
  436. $str.='<fb:js-string var="signupMsg">Please <a href="?p=signup'.(isset($_GET['referid'])?'&referid='.$_GET['referid']:'').'" '.(!isset($_POST['fb_sig_logged_out_facebook'])?'requirelogin="1"':'').'>sign up</a> to become a member in order to perform this operation.</fb:js-string>';
  437. } else {
  438. $str.='<fb:js-string var="signupMsg">Please <a href="?p=home" requirelogin="1">authorize '.SITE_TITLE.'</a> with Facebook so you can do this activity.</fb:js-string>';
  439. }
  440. return $str;
  441. }
  442. function buildPanelBar($heading='',$links='',$subtitle='') {
  443. $code='<div class="panelBar clearfix">';
  444. if ($heading<>'') $code.='<h2>'.$heading.'</h2>';
  445. $code.='<div class="bar_link">'.$links.'</div>'.
  446. '</div><!--end "panelBar"-->';
  447. if ($subtitle<>'') {
  448. $code.='<div class="subtitle"><span>'.$subtitle.'</span></div><!--end "subtitle"-->';
  449. }
  450. return $code;
  451. }
  452. function buildHeader($pageName='') {
  453. require_once(PATH_CORE.'/classes/dynamicTemplate.class.php');
  454. $dynTemp = dynamicTemplate::getInstance($this->db);
  455. include_once(PATH_TEMPLATES.'/header.php');
  456. return $header;
  457. }
  458. function buildFooter() {
  459. require_once(PATH_CORE.'/classes/dynamicTemplate.class.php'); // TODO keep common dynTemp instance
  460. $dynTemp = dynamicTemplate::getInstance($this->db);
  461. if (($this->session->isMember OR $this->session->isAdmin) AND $this->session->u->ncUid>0) {
  462. $actCode = crypt ($this->session->u->ncUid, $this->session->u->email);
  463. $actCode = $actCode . "c"; // add a letter to ending period isn't broken by email programs
  464. $actCode=str_replace('/','',$actCode); // // strip out forward slash so they don't mess up the url
  465. if ($this->session->isAdmin OR $this->session->u->isModerator OR $this->session->u->isSponsor OR $this->session->u->isResearcher) {
  466. $isConsole = true;
  467. if ($this->session->isAdmin OR $this->session->u->isResearcher)
  468. $isResearch = true;
  469. $email = $this->session->u->email;
  470. }
  471. // Switched the includes around to take into account admin status
  472. include_once(PATH_TEMPLATES.'/footer.php');
  473. $footer=str_replace('http://www.newscloud.com','http://www.newscloud.com/ver/home/'.htmlentities($this->session->u->email).'/'.htmlentities($actCode),$footer);
  474. } else {
  475. include_once(PATH_TEMPLATES.'/footer.php');
  476. }
  477. return $footer;
  478. }
  479. function paging($pageCurrent=1,$rowTotal=0,$rowLimit=7,$link='',$jscriptFunction='',$ajaxOn=false,$nav=NULL) {
  480. // $link is the url that the page navigation will point to - this functions add the page offset as the suffix
  481. // e.g. $link ='/search/keyword/tag/sort/' ... pages will link to '/search/keyword/tag/sort/pagenumber/'
  482. // previous query must use SQL_CALC_FOUND_ROWS
  483. $pageTotal=ceil($rowTotal/$rowLimit);
  484. $nav->last=$pageTotal;
  485. $nav->current=$pageCurrent;
  486. $pageStart=($pageCurrent-4)>0 ? ($pageCurrent-4) : 1;
  487. $pageEnd=($pageCurrent+4)>$pageTotal ? $pageTotal : ($pageCurrent+4);
  488. $ellipsis='<span>...</span>';
  489. if ($rowTotal==0)
  490. return '';
  491. $text='<div class="pages">';
  492. // previous page
  493. if ($pageCurrent>1) {
  494. $text.='<a href="#" class="nextprev" onclick="refreshPage('.($pageCurrent-1).');">&#171; Previous</a>';
  495. $nav->previous=$pageCurrent-1;
  496. } else {
  497. $text.='<span class="nextprev">&#171; Previous</span>';
  498. $nav->previous=1;
  499. }
  500. // page 1 & 2
  501. if ($pageCurrent>5)
  502. $text.='<a href="#" onclick="refreshPage(1);">1</a><a href="#" onclick="refreshPage(2);">2</a>'.$ellipsis;
  503. // current nine pages
  504. for ($i=$pageStart;$i<=$pageEnd;$i++) {
  505. if ($i==$pageCurrent)
  506. $text.='<span class="current">'.$i.'</span>';
  507. else
  508. $text.='<a href="#" onclick="refreshPage('.$i.');" >'.$i.'</a>';
  509. }
  510. if (($pageTotal-$pageCurrent)>5)
  511. $text.=$ellipsis.'<a href="#" onclick="refreshPage('.($pageTotal-1).');">'.($pageTotal-1).'</a><a href="#" onclick="refreshPage('.$pageTotal.');">'.$pageTotal.'</a>';
  512. // next page
  513. if ($pageCurrent<$pageTotal) {
  514. $text.='<a href="#" class="nextprev" onclick="refreshPage('.($pageCurrent+1).');">Next &#187;</a>';
  515. $nav->next=$pageCurrent+1;
  516. } else {
  517. $nav->next=$pageCurrent;
  518. $text.='<span class="nextprev">Next &#187;</span>';
  519. }
  520. $text.='</div>';
  521. return $text;
  522. }
  523. function addAnalytics($googleCode='',$page='') {
  524. $str='<fb:google-analytics uacct="'.$googleCode.'" page="Facebook: '.$page.'"/>';
  525. return $str;
  526. }
  527. function display($code) {
  528. if (isset($_POST['fb_sig_logged_out_facebook'])) $code = preg_replace('/on[cC]lick="[^"]+"/', '', $code); // remove jscript
  529. if (isset($_GET['src'])) $code=preg_replace('/\?p=([^"]+)/', '?p=$1&src='.$_GET['src'], $code);
  530. echo $code;
  531. }
  532. function fetchReferral() {
  533. // lookds for referid userid or referfbid facebook id
  534. // returns userid
  535. if (isset($_GET['referid'])) {
  536. $referid=$_GET['referid'];
  537. } else if (isset($_GET['referfbid'])) {
  538. $referfbid=$_GET['referfbid'];
  539. // look up userid from facebook id
  540. require_once(PATH_CORE .'/classes/user.class.php');
  541. $userInfoTable = new UserInfoTable($this->db);
  542. $userinfo = $userInfoTable->getRowObject();
  543. if ($userinfo->loadFromFbId($referfbid)!==false)
  544. {
  545. if ($referid != $userinfo->userid) // prevent referid from getting set to self in bizzare cases
  546. $referid=$userinfo->userid;
  547. }
  548. else
  549. return false;
  550. } else {
  551. return false;
  552. }
  553. return $referid;
  554. }
  555. function recordSrc() {
  556. if (isset($_POST['fb_sig_user'])) {
  557. $fbId=$_POST['fb_sig_user'];
  558. } else if (isset($_POST['fb_sig_canvas_user'])) {
  559. $fbId=$_POST['fb_sig_canvas_user'];
  560. } else
  561. $fbId=0;
  562. if (isset($_GET['src']) AND $fbId>0) {
  563. $this->db->insert("AdTrack","source,userid","'".$_GET['src']."',".$fbId);
  564. } else if (isset($_GET['viaAdGreen'])) {
  565. $this->db->insert("AdTrack","source,userid","'grn teens',".$fbId);
  566. } else if (isset($_GET['viaAdRingtones'])) {
  567. $this->db->insert("AdTrack","source,userid","'AdRingtones',".$fbId);
  568. }
  569. }
  570. function recordReferral($referid=0,$action='',$itemid=0) {
  571. // record the referral in the log
  572. // $this->session->userid was referred to $action page by $referid userid, $itemid may be siteContentId
  573. // action may be referReader or referToSite
  574. if ($this->session->isLoaded AND $this->session->userid<>0) {
  575. // log referid as having referred this user
  576. require_once(PATH_CORE.'/classes/log.class.php');
  577. $logObj=new log($this->db);
  578. $logItem=$logObj->serialize(0,$referid,$action,$itemid,$this->session->userid);
  579. $inLog=$logObj->update($logItem);
  580. // check if UserInfo.refuid has not been set before
  581. if ($this->session->u->refuid==0) {
  582. // load the userinfo for this user
  583. $this->session->ui->refuid=$referid;
  584. $this->session->ui->update();
  585. }
  586. // sign up page will use refuid to mark invites as accepted
  587. }
  588. }
  589. function go404($msg='') {
  590. $this->facebook=$this->app->loadFacebookLibrary();
  591. $this->facebook->redirect(URL_CANVAS.'?p=404&msg='.$msg);
  592. }
  593. function debug() {
  594. if (isset($_GET['debug']))
  595. {
  596. echo 'POST<br/>';
  597. var_dump($_POST);
  598. echo 'GET<br/>';
  599. var_dump($_GET);
  600. echo $this->session->debug();
  601. }
  602. }
  603. /* Template functions */
  604. // to do - probably need to move to separate class
  605. function shortAbstract($str,$cnt=150) {
  606. $str=strip_tags($str);
  607. if (strlen($str)>$cnt)
  608. $str=substr($str,0,($cnt-1)).'...';
  609. return $str;
  610. }
  611. function pkgScripts($page='default',$scripts='') {
  612. // to do - improve this while avoiding Facebook 64k limit per file
  613. $temp=$page.'Core';
  614. $scriptsCore=array(PATH_SCRIPTS.'/newsroom.js');
  615. $this->scripts[]=URL_CALLBACK."?p=cache&type=js&cf=".$temp."_".$this->fetchPkgVersion($temp,$scriptsCore,'js',true).".js";
  616. // combine Ask, Ideas and Micro
  617. $temp=$page.'Extra';
  618. $scriptsExtra=array();
  619. if (defined('ENABLE_ASK'))
  620. $scriptsExtra=array_merge(array(PATH_SCRIPTS.'/ask.js'),$scriptsExtra);
  621. if (defined('ENABLE_IDEAS'))
  622. $scriptsExtra=array_merge(array(PATH_SCRIPTS.'/ideas.js'),$scriptsExtra);
  623. if (defined('ENABLE_MICRO'))
  624. $scriptsExtra=array_merge(array(PATH_SCRIPTS.'/micro.js'),$scriptsExtra);
  625. if (defined('ENABLE_LOCAL'))
  626. $scriptsExtra=array_merge(array(PATH_SCRIPTS.'/local.js'),$scriptsExtra);
  627. if (defined('ENABLE_PREDICT'))
  628. $scriptsExtra=array_merge(array(PATH_SCRIPTS.'/predict.js'),$scriptsExtra);
  629. $this->scripts[]=URL_CALLBACK."?p=cache&type=js&cf=".$temp."_".$this->fetchPkgVersion($temp,$scriptsExtra,'js',true).".js";
  630. if (defined('ENABLE_STUFF')) {
  631. $temp=$page.'Stuff';
  632. $scriptsStuff=array(PATH_SCRIPTS.'/stuff.js');
  633. $this->scripts[]=URL_CALLBACK."?p=cache&type=js&cf=".$temp."_".$this->fetchPkgVersion($temp,$scriptsStuff,'js',true).".js";
  634. }
  635. if (defined('ENABLE_IMAGES')) {
  636. $temp=$page.'Media';
  637. $scriptsMedia=array(PATH_SCRIPTS.'/media.js');
  638. $this->scripts[]=URL_CALLBACK."?p=cache&type=js&cf=".$temp."_".$this->fetchPkgVersion($temp,$scriptsMedia,'js',true).".js";
  639. }
  640. }
  641. function pkgStyles($page='default',$sheets) {
  642. // packages get common, header and layout
  643. $sheets=array_merge(array(PATH_STYLES.'/default.css',PATH_STYLES.'/paging.css'),$sheets);
  644. if (defined('ENABLE_CARDS'))
  645. $sheets=array_merge(array(PATH_STYLES.'/cards.css'),$sheets);
  646. if (defined('ENABLE_ASK'))
  647. $sheets=array_merge(array(PATH_STYLES.'/ask.css'),$sheets);
  648. if (defined('ENABLE_IDEAS'))
  649. $sheets=array_merge(array(PATH_STYLES.'/ideas.css'),$sheets);
  650. if (defined('ENABLE_STUFF'))
  651. $sheets=array_merge(array(PATH_STYLES.'/stuff.css'),$sheets);
  652. if (defined('ENABLE_MICRO'))
  653. $sheets=array_merge(array(PATH_STYLES.'/micro.css'),$sheets);
  654. $this->stylesheets[]=URL_CALLBACK."?p=cache&type=css&cf=".$page."_".$this->fetchPkgVersion($page,$sheets,'css',false,true).".css";
  655. }
  656. function fetchPkgVersion($page,$files,$mode='js',$jsCompress=false,$cssCompress=false) {
  657. define('JSMIN_AS_LIB', true);
  658. // get file last modified dates
  659. $aLastModifieds = array();
  660. foreach ($files as $sFile) {
  661. $aLastModifieds[] = filemtime($sFile);
  662. }
  663. // sort dates, newest first
  664. rsort($aLastModifieds);
  665. $iETag=$aLastModifieds[0];
  666. // create a directory for storing current and archive versions
  667. if (!is_dir(ARCHIVE_FOLDER)) {
  668. mkdir(ARCHIVE_FOLDER);
  669. }
  670. $sMergedFilename = ARCHIVE_FOLDER."/".$page."_".$iETag.".".$mode;
  671. // if it does not exist, we need to create a new merged package
  672. if (!file_exists($sMergedFilename)) {
  673. // get and merge code
  674. $sCode = '';
  675. $aLastModifieds = array();
  676. foreach ($files as $sFile) {
  677. $aLastModifieds[] = filemtime($sFile);
  678. $tempCode=file_get_contents($sFile);
  679. $tempCode=str_ireplace('{URL_BASE}',URL_BASE,$tempCode);
  680. if ($mode=='css') {
  681. $tempCode=str_ireplace('{CLR_LINKS}',CLR_LINKS,$tempCode);
  682. $tempCode=str_ireplace('{CLR_BODY}',CLR_BODY,$tempCode);
  683. $tempCode=str_ireplace('{CLR_EDGES1}',CLR_EDGES1,$tempCode);
  684. $tempCode=str_ireplace('{CLR_EDGES2}',CLR_EDGES2,$tempCode);
  685. $tempCode=str_ireplace('{CLR_KEY1}',CLR_KEY1,$tempCode);
  686. $tempCode=str_ireplace('{CLR_KEY2}',CLR_KEY2,$tempCode);
  687. $tempCode=str_ireplace('{CLR_KEY3}',CLR_KEY3,$tempCode);
  688. $tempCode=str_ireplace('{CLR_UTILITY}',CLR_UTILITY,$tempCode);
  689. $tempCode=str_ireplace('{FONTS_MAIN}',FONTS_MAIN,$tempCode);
  690. }
  691. $sCode .= $tempCode;
  692. }
  693. // sort dates, newest first
  694. rsort($aLastModifieds);
  695. // reset iETag incase of late breaking file update
  696. $iETag=$aLastModifieds[0];
  697. $sMergedFilename = ARCHIVE_FOLDER."/".$page."_".$iETag.".".$mode;
  698. $this->pkgWrite($sMergedFilename, $sCode);
  699. if ($jsCompress) {
  700. require_once(JSMIN_PATH."/jsmin.php");
  701. $jsMin = new JSMin(file_get_contents($sMergedFilename), false);
  702. $sCode = $jsMin->minify();
  703. $this->pkgWrite($sMergedFilename, $sCode);
  704. } else if ($cssCompress) {
  705. require_once(JSMIN_PATH."/cssMin.php");
  706. $cssMin = new cssMin();
  707. $sCode = $cssMin->minify(file_get_contents($sMergedFilename));
  708. $this->pkgWrite($sMergedFilename, $sCode);
  709. }
  710. }
  711. // return latest timestamp
  712. return $iETag;
  713. }
  714. function pkgWrite($sFilename, $sCode) {
  715. $oFile = fopen($sFilename, 'w');
  716. if (flock($oFile, LOCK_EX)) {
  717. fwrite($oFile, $sCode);
  718. flock($oFile, LOCK_UN);
  719. }
  720. fclose($oFile);
  721. }
  722. function _genStylesheets()
  723. {
  724. $ret = '';
  725. foreach (array_unique($this->stylesheets) as $key => $val) {
  726. $ret .= '<link rel="stylesheet" href="' . $val . '" type="text/css" charset="utf-8" />';
  727. }
  728. return $ret;
  729. }
  730. function _genScripts()
  731. {
  732. $ret = '';
  733. foreach (array_unique($this->scripts) as $key => $val) {
  734. $ret .= '<script src="' . $val . '" type="text/javascript" language="javascript" charset="utf-8"></script>';
  735. }
  736. return $ret;
  737. }
  738. }
  739. ?>