1<?php 2/** 3 * My Page page allows a logged in user the abilty 4 * to keep bookmarks, see a list of upcoming events, etc. 5 * 6 * webtrees: Web based Family History software 7 * Copyright (C) 2010 webtrees development team. 8 * 9 * Derived from PhpGedView 10 * Copyright (C) 2002 to 2009 PGV Development Team. All rights reserved. 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License as published by 14 * the Free Software Foundation; either version 2 of the License, or 15 * (at your option) any later version. 16 * 17 * This program is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 * GNU General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public License 23 * along with this program; if not, write to the Free Software 24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 25 * 26 * @package webtrees 27 * @subpackage Display 28 * @version $Id$ 29 */ 30 31define('WT_SCRIPT_NAME', 'index.php'); 32require './includes/session.php'; 33require_once WT_ROOT.'includes/index_cache.php'; 34require_once WT_ROOT.'includes/functions/functions_print_facts.php'; //--needed for the expand url function in some of the blocks 35 36if (isset($_REQUEST['action'])) $action = $_REQUEST['action']; 37if (isset($_REQUEST['ctype'])) $ctype = $_REQUEST['ctype']; 38$message_id = safe_GET('message_id'); 39$gid = safe_POST("gid"); 40$favnote = safe_POST("favnote"); 41$favtype = safe_POST("favtype"); 42$url = safe_POST("url", WT_REGEX_URL); 43$favtitle = safe_POST("favtitle"); 44$fv_id = safe_GET("fv_id"); 45$news_id = safe_GET("news_id"); 46 47/** 48 * Block definition array 49 * 50 * The following block definition array defines the 51 * blocks that can be used to customize the portals 52 * their names and the function to call them 53 * "name" is the name of the block in the lists 54 * "descr" is a description of this block 55 * "type" the options are "user" or "gedcom" or undefined 56 * - The type determines which lists the block is available in. 57 * - Leaving the type undefined allows it to be on both the user and gedcom portal 58 * @global $WT_BLOCKS 59 */ 60 61/** 62 * Load List of Blocks in blocks directory (unchanged) 63 */ 64$WT_BLOCKS = array(); 65$d = dir("blocks"); 66while (false !== ($entry = $d->read())) { 67 if (($entry!=".") && ($entry!="..") && ($entry!="CVS") && (preg_match("/\.php$/", $entry)>0)) { 68 require_once WT_ROOT.'blocks/'.$entry; 69 } 70} 71$d->close(); 72/** 73 * End loading list of Blocks in blocks directory 74 * 75 * Load List of Blocks in modules/XX/blocks directories 76 */ 77if (file_exists(WT_ROOT.'modules')) { 78 $dir=dir(WT_ROOT.'modules'); 79 while (false !== ($entry = $dir->read())) { 80 if (!strstr($entry,".") && ($entry!="..") && ($entry!="CVS")&& !strstr($entry, "svn")) { 81 $path = WT_ROOT.'modules/' . $entry.'/blocks'; 82 if (is_readable($path)) { 83 $d=dir($path); 84 while (false !== ($entry = $d->read())) { 85 if (($entry!=".") && ($entry!="..") && ($entry!="CVS")&& !strstr($entry, "svn")&&(preg_match("/\.php$/", $entry)>0)) { 86 $p=$path.'/'.$entry; 87 require_once $p; 88 } 89 } 90 } 91 } 92 } 93} 94/** 95 * End loading list of Blocks in modules/XX/blocks directories 96*/ 97 98$time = client_time(); 99 100if (!isset($action)) $action=""; 101 102// Visitors should see any links to a user page, but they may be 103// following a link after an inactivity logout. 104if (!WT_USER_ID) { 105 if (!empty($ctype) && $ctype=='user') { 106 header('Location: login.php&url=index.php?ctype=user'); 107 exit; 108 } else { 109 $ctype = 'gedcom'; 110 } 111} 112 113if (empty($ctype)) { 114 if ($PAGE_AFTER_LOGIN == 'welcome') $ctype = 'gedcom'; 115 else $ctype = 'user'; 116} 117 118if (WT_USER_ID) { 119 //-- add favorites action 120 if ($action=="addfav" && !empty($gid)) { 121 $gid = strtoupper($gid); 122 $indirec = find_gedcom_record($gid, WT_GED_ID); 123 $ct = preg_match("/0 @(.*)@ (.*)/", $indirec, $match); 124 if ($indirec && $ct>0) { 125 $favorite = array(); 126 if (empty($favtype)) { 127 if ($ctype=="user") $favtype = "user"; 128 else $favtype = "gedcom"; 129 } 130 if ($favtype=="gedcom") { 131 $favtype = $GEDCOM; 132 $_SESSION['clearcache'] = true; 133 } 134 else $favtype=WT_USER_NAME; 135 $favorite["username"] = $favtype; 136 $favorite["gid"] = $gid; 137 $favorite["type"] = trim($match[2]); 138 $favorite["file"] = $GEDCOM; 139 $favorite["url"] = ""; 140 $favorite["note"] = $favnote; 141 $favorite["title"] = ""; 142 addFavorite($favorite); 143 } 144 } 145 if (($action=="addfav")&&(!empty($url))) { 146 if (empty($favtitle)) $favtitle = $url; 147 $favorite = array(); 148 if (!isset($favtype)) { 149 if ($ctype=="user") $favtype = "user"; 150 else $favtype = "gedcom"; 151 } 152 if ($favtype=="gedcom") { 153 $favtype = $GEDCOM; 154 $_SESSION['clearcache'] = true; 155 } 156 else $favtype=WT_USER_NAME; 157 $favorite["username"] = $favtype; 158 $favorite["gid"] = ""; 159 $favorite["type"] = "URL"; 160 $favorite["file"] = $GEDCOM; 161 $favorite["url"] = $url; 162 $favorite["note"] = $favnote; 163 $favorite["title"] = $favtitle; 164 addFavorite($favorite); 165 } 166 if (($action=="deletefav")&&(!empty($fv_id))) { 167 deleteFavorite($fv_id); 168 if ($ctype=="gedcom") $_SESSION['clearcache'] = true; 169 } 170 else if ($action=="deletemessage") { 171 if (isset($message_id)) { 172 if (!is_array($message_id)) deleteMessage($message_id); 173 else { 174 foreach($message_id as $indexval => $mid) { 175 if (isset($mid)) deleteMessage($mid); 176 } 177 } 178 if ($ctype=="gedcom") $_SESSION['clearcache'] = true; 179 } 180 } 181 else if (($action=="deletenews")&&(isset($news_id))) { 182 deleteNews($news_id); 183 if ($ctype=="gedcom") $_SESSION['clearcache'] = true; 184 } 185} 186 187//-- get the blocks list 188if ($ctype=="user") { 189 $ublocks = getBlocks(WT_USER_NAME); 190 if ((count($ublocks["main"])==0) && (count($ublocks["right"])==0)) { 191 $ublocks["main"][] = array("print_todays_events", ""); 192 $ublocks["main"][] = array("print_user_messages", ""); 193 $ublocks["main"][] = array("print_user_favorites", ""); 194 195 $ublocks["right"][] = array("print_welcome_block", ""); 196 $ublocks["right"][] = array("print_random_media", ""); 197 $ublocks["right"][] = array("print_upcoming_events", ""); 198 $ublocks["right"][] = array("print_logged_in_users", ""); 199 } 200} 201else { 202 $ublocks = getBlocks($GEDCOM); 203 if ((count($ublocks["main"])==0) && (count($ublocks["right"])==0)) { 204 $ublocks["main"][] = array("print_gedcom_stats", ""); 205 $ublocks["main"][] = array("print_gedcom_news", ""); 206 $ublocks["main"][] = array("print_gedcom_favorites", ""); 207 $ublocks["main"][] = array("review_changes_block", ""); 208 209 $ublocks["right"][] = array("print_gedcom_block", ""); 210 $ublocks["right"][] = array("print_random_media", ""); 211 $ublocks["right"][] = array("print_todays_events", ""); 212 $ublocks["right"][] = array("print_logged_in_users", ""); 213 } 214} 215 216//-- Set some behaviour controls that depend on which blocks are selected 217$welcome_block_present = false; 218$gedcom_block_present = false; 219$top10_block_present = false; 220$login_block_present = false; 221foreach($ublocks["right"] as $block) { 222 if ($block[0]=="print_welcome_block") $welcome_block_present = true; 223 if ($block[0]=="print_gedcom_block") $gedcom_block_present = true; 224 if ($block[0]=="print_block_name_top10") $top10_block_present = true; 225 if ($block[0]=="print_login_block") $login_block_present = true; 226} 227foreach($ublocks["main"] as $block) { 228 if ($block[0]=="print_welcome_block") $welcome_block_present = true; 229 if ($block[0]=="print_gedcom_block") $gedcom_block_present = true; 230 if ($block[0]=="print_block_name_top10") $top10_block_present = true; 231 if ($block[0]=="print_login_block") $login_block_present = true; 232} 233 234//-- clear the GEDCOM cache files 235if (!empty($_SESSION['clearcache'])) { 236 $_SESSION['clearcache'] = false; 237 clearCache(); 238} 239 240// We have finished writing to $_SESSION, so release the lock 241session_write_close(); 242 243//-- handle block AJAX calls 244/** 245 * In order for a block to make an AJAX call the following request parameters must be set 246 * block = the method name of the block to call (e.g. 'print_random_media') 247 * side = the side of the page the block is on (e.g. 'main' or 'right') 248 * bindex = the number of the block on that side, first block = 0 249 */ 250if ($action=="ajax") { 251 header('Content-Type: text/html; charset=UTF-8'); 252 //-- if a block wasn't sent then exit with nothing 253 if (!isset($_REQUEST['block'])) { 254 print "Block not sent"; 255 exit; 256 } 257 $block = $_REQUEST['block']; 258 //-- set which side the block is on 259 $side = "main"; 260 if (isset($_REQUEST['side'])) $side = $_REQUEST['side']; 261 //-- get the block number 262 if (isset($_REQUEST['bindex'])) { 263 if (isset($ublocks[$side][$_REQUEST['bindex']])) { 264 $blockval = $ublocks[$side][$_REQUEST['bindex']]; 265 if ($blockval[0]==$block && array_key_exists($blockval[0], $WT_BLOCKS)) { 266 if ($side=="main") { 267 $param1 = "false"; 268 } else { 269 $param1 = "true"; 270 } 271 if (array_key_exists($blockval[0], $WT_BLOCKS) && !loadCachedBlock($blockval, $side.$_REQUEST['bindex'])) { 272 ob_start(); 273 eval($blockval[0]."($param1, \$blockval[1], \"$side\", ".$_REQUEST['bindex'].");"); 274 $content = ob_get_contents(); 275 saveCachedBlock($blockval, $side.$_REQUEST['bindex'], $content); 276 ob_end_flush(); 277 } 278 if (WT_DEBUG) { 279 echo execution_stats(); 280 } 281 if (WT_DEBUG_SQL) { 282 echo WT_DB::getQueryLog(); 283 } 284 exit; 285 } 286 } 287 } 288 289 //-- not sure which block to call so call the first one we find 290 foreach($ublocks["main"] as $bindex=>$blockval) { 291 if ($blockval[0]==$block && array_key_exists($blockval[0], $WT_BLOCKS)) { 292 eval($blockval[0]."(false, \$blockval[1], \"main\", $bindex);"); 293 } 294 } 295 foreach($ublocks["right"] as $bindex=>$blockval) { 296 if ($blockval[0]==$block && array_key_exists($blockval[0], $WT_BLOCKS)) { 297 eval($blockval[0]."(true, \$blockval[1], \"right\", $bindex);"); 298 } 299 } 300 exit; 301} 302//-- end of ajax call handler 303 304if ($ctype=="user") { 305 $helpindex = "index_myged_help"; 306 print_header(i18n::translate('My Page')); 307} else { 308 print_header(get_gedcom_setting(WT_GED_ID, 'title')); 309} 310 311if (WT_USE_LIGHTBOX) { 312 require WT_ROOT.'modules/lightbox/lb_defaultconfig.php'; 313 require WT_ROOT.'modules/lightbox/functions/lb_call_js.php'; 314} 315 316echo WT_JS_START; 317?> 318 function refreshpage() { 319 window.location = 'index.php?ctype=<?php print $ctype; ?>'; 320 } 321 function addnews(uname) { 322 window.open('editnews.php?username='+uname, '_blank', 'top=50,left=50,width=600,height=500,resizable=1,scrollbars=1'); 323 } 324 function editnews(news_id) { 325 window.open('editnews.php?news_id='+news_id, '_blank', 'top=50,left=50,width=600,height=500,resizable=1,scrollbars=1'); 326 } 327 var pastefield; 328 function paste_id(value) { 329 pastefield.value=value; 330 } 331/** 332 * blocks may use this JS function to update themselves using AJAX technology 333 * @param string targetId the id of the block to target the results too 334 * @param string block the method name of the block to call (e.g. 'print_random_media') 335 * @param string side the side of the page the block is on (e.g. 'main' or 'right') 336 * @param int bindex the number of the block on that side, first block = 0 337 * @param string ctype shows whether block is on Welcome or My Page ('gedcom' or 'user') 338 * @param boolean loading Whether or not to show the loading message 339 */ 340 function ajaxBlock(targetId, block, side, bindex, ctype, loading) { 341 target = document.getElementById(targetId); 342 if (!target) return false; 343 344 target.style.height = (target.offsetHeight) + "px"; 345 if (loading) target.innerHTML = "<br /><br /><?php print i18n::translate('Loading...'); ?><br /><br />"; 346 347 var oXmlHttp = createXMLHttp(); 348 link = "index.php?action=ajax&block="+block+"&side="+side+"&bindex="+bindex+"&ctype="+ctype; 349 oXmlHttp.open("get", link, true); 350 oXmlHttp.onreadystatechange=function() 351 { 352 if (oXmlHttp.readyState==4) 353 { 354 target.innerHTML = oXmlHttp.responseText; 355 target.style.height = 'auto'; 356 } 357 }; 358 oXmlHttp.send(null); 359 return false; 360 } 361<?php 362echo WT_JS_END; 363//-- start of main content section 364print "<table width=\"100%\"><tr><td>"; // This is needed so that page footers print in the right place 365if ($ctype=="user") { 366 print "<div align=\"center\" style=\"width: 99%;\">"; 367 print "<h1>".i18n::translate('My Page')."</h1>"; 368 print i18n::translate('My Page allows you to keep bookmarks of your favorite people, track upcoming events, and collaborate with other webtrees users.'); 369 print "<br /><br /></div>"; 370} 371if (count($ublocks["main"])!=0) { 372 if (count($ublocks["right"])!=0) { 373 print "<div id=\"index_main_blocks\">"; 374 } else { 375 print "<div id=\"index_full_blocks\">"; 376 } 377 echo '<script src="js/jquery/jquery.min.js" type="text/javascript"></script>'; 378 echo '<script type="text/javascript">jQuery.noConflict();</script>'; 379 foreach($ublocks["main"] as $bindex=>$block) { 380 if (WT_DEBUG) { 381 echo execution_stats(); 382 } 383 if (array_key_exists($block[0], $WT_BLOCKS) && !loadCachedBlock($block, "main".$bindex)) { 384 $url="index.php?action=ajax&block={$block[0]}&side=main&bindex={$bindex}&ctype={$ctype}"; 385 if ($SEARCH_SPIDER || WT_DEBUG) { 386 // Search spiders get the blocks directly 387 ob_start(); 388 eval($block[0]."(false, \$block[1], \"main\", $bindex);"); 389 $content = ob_get_contents(); 390 $temp = $SEARCH_SPIDER; 391 $SEARCH_SPIDER = false; 392 saveCachedBlock($block, "main".$bindex, $content); 393 $SEARCH_SPIDER = $temp; 394 ob_end_flush(); 395 } else { 396 // Interactive users get the blocks via ajax 397 echo '<div id="block_main_', $bindex, '"><img src="images/loading.gif" alt="', htmlspecialchars(i18n::translate('Loading...')), '"/></div>'; 398 echo WT_JS_START, "jQuery('#block_main_{$bindex}').load('{$url}');", WT_JS_END; 399 } 400 } 401 } 402 print "</div>"; 403} 404//-- end of main content section 405 406//-- start of blocks section 407if (count($ublocks["right"])!=0) { 408 if (count($ublocks["main"])!=0) { 409 print "<div id=\"index_small_blocks\">"; 410 } else { 411 print "<div id=\"index_full_blocks\">"; 412 } 413 foreach($ublocks["right"] as $bindex=>$block) { 414 if (WT_DEBUG) { 415 echo execution_stats(); 416 } 417 if (array_key_exists($block[0], $WT_BLOCKS) && !loadCachedBlock($block, "right".$bindex)) { 418 $url="index.php?action=ajax&block={$block[0]}&side=right&bindex={$bindex}&ctype={$ctype}"; 419 if ($SEARCH_SPIDER || WT_DEBUG) { 420 // Search spiders get the blocks directly 421 ob_start(); 422 eval($block[0]."(true, \$block[1], \"right\", $bindex);"); 423 $content = ob_get_contents(); 424 saveCachedBlock($block, "right".$bindex, $content); 425 ob_end_flush(); 426 } else { 427 // Interactive users get the blocks via ajax 428 echo '<div id="block_right_', $bindex, '"><img src="images/loading.gif" alt="', htmlspecialchars(i18n::translate('Loading...')), '"/></div>'; 429 echo WT_JS_START, "jQuery('#block_right_{$bindex}').load('{$url}');", WT_JS_END; 430 } 431 } 432 } 433 print "</div>"; 434} 435//-- end of blocks section 436 437print "</td></tr></table><br />"; // Close off that table 438 439if ($ctype=="user" && !$welcome_block_present) { 440 print "<div align=\"center\" style=\"width: 99%;\">"; 441 print "<a href=\"javascript:;\" onclick=\"window.open('index_edit.php?name=".WT_USER_NAME."&ctype=user', '_blank', 'top=50,left=10,width=600,height=500,scrollbars=1,resizable=1');\">".i18n::translate('Customize My Page')."</a>"; 442 echo help_link('mygedview_customize'); 443 print "</div>"; 444} 445if ($ctype=="gedcom" && !$gedcom_block_present) { 446 if (WT_USER_IS_ADMIN) { 447 print "<div align=\"center\" style=\"width: 99%;\">"; 448 print "<a href=\"javascript:;\" onclick=\"window.open('".encode_url("index_edit.php?name={$GEDCOM}&ctype=gedcom", false)."', '_blank', 'top=50,left=10,width=600,height=500,scrollbars=1,resizable=1');\">".i18n::translate('Customize this GEDCOM Home Page')."</a>"; 449 print "</div>"; 450 } 451} 452 453print_footer(); 454?> 455