[ Index ] |
PHP Cross Reference of phpwcms V1.5.0 _r431 (28.01.12) |
[Summary view] [Print] [Text view]
1 <?php 2 /************************************************************************************* 3 Copyright notice 4 5 (c) 2002-2012 Oliver Georgi <oliver@phpwcms.de> // All rights reserved. 6 7 This script is part of PHPWCMS. The PHPWCMS web content management system is 8 free software; you can redistribute it and/or modify it under the terms of 9 the GNU General Public License as published by the Free Software Foundation; 10 either version 2 of the License, or (at your option) any later version. 11 12 The GNU General Public License can be found at http://www.gnu.org/copyleft/gpl.html 13 A copy is found in the textfile GPL.txt and important notices to the license 14 from the author is found in LICENSE.txt distributed with these scripts. 15 16 This script is distributed in the hope that it will be useful, but WITHOUT ANY 17 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 18 PARTICULAR PURPOSE. See the GNU General Public License for more details. 19 20 This copyright notice MUST APPEAR in all copies of the script! 21 *************************************************************************************/ 22 23 // ---------------------------------------------------------------- 24 // obligate check for phpwcms constants 25 if (!defined('PHPWCMS_ROOT')) { 26 die("You Cannot Access This Script Directly, Have a Nice Day."); 27 } 28 // ---------------------------------------------------------------- 29 30 31 // Teaser (link article) content part 32 33 $content['alink'] = @unserialize($crow["acontent_form"]); 34 35 if(!isset($content['alink']['alink_id'])) { 36 37 $content['alink']['alink_id'] = explode(':', $crow['acontent_alink']); 38 39 } 40 41 if((is_array($content['alink']['alink_id']) && count($content['alink']['alink_id'])) || (!empty($content['alink']['alink_type']) && ((is_array($content['alink']['alink_level']) && count($content['alink']['alink_level'])) || (isset($content['alink']['alink_category']) && count($content['alink']['alink_category']))))) { 42 43 if(!isset($content['UNIQUE_ALINK'])) { 44 $content['UNIQUE_ALINK'] = array(); 45 } 46 47 if(!empty($content['alink']['alink_template']) && is_file(PHPWCMS_TEMPLATE.'inc_cntpart/teaser/'.$content['alink']['alink_template'])) { 48 49 $content['alink']['alink_template'] = render_device( @file_get_contents(PHPWCMS_TEMPLATE.'inc_cntpart/teaser/'.$content['alink']['alink_template']) ); 50 51 } elseif(is_file(PHPWCMS_TEMPLATE.'inc_default/teaser.tmpl')) { 52 53 $content['alink']['alink_template'] = render_device( @file_get_contents(PHPWCMS_TEMPLATE.'inc_default/teaser.tmpl') ); 54 55 } else { 56 57 $content['alink']['alink_template'] = '<!--TEASER_HEAD_START//--><ul{LINK_ARTICLE_CLASS}><!--TEASER_HEAD_END//-->'; 58 $content['alink']['alink_template'] .= '<!--TEASER_ENTRY_START//--><li><a href="{ARTICLELINK}">{TITLE}</a></li><!--TEASER_ENTRY_END//-->'; 59 $content['alink']['alink_template'] .= '<!--TEASER_ENTRY_SPACER_START//--><!--TEASER_ENTRY_SPACER_END//-->'; 60 $content['alink']['alink_template'] .= '<!--TEASER_ROW_SPACER_START//--><!--TEASER_ROW_SPACER_END//-->'; 61 $content['alink']['alink_template'] .= '<!--TEASER_FOOTER_START//--></ul><!--TEASER_FOOTER_END//-->'; 62 $content['alink']['alink_template'] .= '<!--TEASER_COLUMN_OVERWRITE_START//--><!--TEASER_COLUMN_OVERWRITE_END//-->'; 63 64 } 65 66 67 $content['alink']['tags_group_by'] = ''; 68 $content['alink']['tags_where'] = ''; 69 $content['alink']['date_basis'] = 'article_date'; 70 $content['alink']['alink_categoryalias'] = empty($content['alink']['alink_categoryalias']) ? 0 : 1; 71 72 $alink_sql = "SELECT ar.*, UNIX_TIMESTAMP(ar.article_tstamp) AS article_date FROM ".DB_PREPEND."phpwcms_article ar "; 73 74 75 // select by category 76 if(!empty($content['alink']['alink_category']) && count($content['alink']['alink_category'])) { 77 78 $content['alink']['tags_sql'] = array(); 79 80 // and/or/not mode 81 switch($content['alink']['alink_andor']) { 82 83 case 'AND': $content['alink']['alink_andor'] = ' AND '; 84 $content['alink']['alink_compare'] = '='; 85 break; 86 87 case 'NOT': $content['alink']['alink_andor'] = ' AND '; 88 $content['alink']['alink_compare'] = '!='; 89 break; 90 91 default: //OR 92 $content['alink']['alink_andor'] = ' OR '; 93 $content['alink']['alink_compare'] = '='; 94 } 95 96 foreach($content['alink']['alink_category'] as $value) { 97 98 $content['alink']['tags_sql'][] = 'pcat.cat_name' . $content['alink']['alink_compare'] . "'" . aporeplace($value) . "'"; 99 100 } 101 102 // JOIN with tags/categories for articles 103 $alink_sql .= "LEFT JOIN ".DB_PREPEND."phpwcms_categories pcat ON (pcat.cat_type='article' AND pcat.cat_pid=ar.article_id) "; 104 $content['alink']['tags_where'] = 'AND (' . implode($content['alink']['alink_andor'], $content['alink']['tags_sql']) . ') '; 105 106 // group by article ID 107 $content['alink']['tags_group_by'] = ' GROUP BY ar.article_id'; 108 109 } 110 111 112 $alink_sql .= "WHERE ar.article_public=1 AND ar.article_aktiv=1 AND ar.article_deleted=0 "; 113 $alink_sql .= "AND ar.article_begin < NOW() AND ar.article_end > NOW() "; 114 115 // add possible WHERE clauses when tags/categories are used 116 $alink_sql .= $content['alink']['tags_where']; 117 118 if(empty($content['alink']['alink_type'])) { 119 120 if(!empty($content['alink']['alink_unique']) && count($content['UNIQUE_ALINK'])) { 121 122 $content['alink']['alink_id'] = array_diff($content['alink']['alink_id'], $content['UNIQUE_ALINK']); 123 $alink_sql .= count($content['alink']['alink_id']) ? 'AND ar.article_id IN ('.implode(',', $content['alink']['alink_id']) . ')' : ' AND 0 '; 124 125 } else { 126 $alink_sql .= 'AND ar.article_id IN ('.implode(',', $content['alink']['alink_id']) . ')'; 127 } 128 129 // group by - when used with categories/tags 130 $alink_sql .= $content['alink']['tags_group_by']; 131 132 } else { 133 134 if(is_array($content['alink']['alink_level']) && count($content['alink']['alink_level'])) { 135 136 $alink_sql .= 'AND ar.article_cid IN ('.implode(',', $content['alink']['alink_level']) . ')'; 137 if(!empty($content['alink']['alink_unique']) && count($content['UNIQUE_ALINK'])) { 138 $alink_sql .= ' AND ar.article_id NOT IN ('.implode(',', $content['UNIQUE_ALINK']) . ')'; 139 } 140 } 141 142 // group by - when used with categories/tags 143 $alink_sql .= $content['alink']['tags_group_by']; 144 145 // don't use SQL UNION 146 $sql_union = ''; 147 148 // add prio sorting value 149 if(empty($content['alink']['alink_prio'])) { 150 $sql_prio = ''; 151 $sql_union_prio = ''; 152 } else { 153 $sql_prio = 'ar.article_priorize DESC, '; 154 $sql_union_prio = 'article_priorize DESC, '; 155 } 156 157 switch($content['alink']['alink_type']) { 158 159 case 1: // create date, DESC 160 $content['alink']['date_basis'] = 'article_created'; 161 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_created DESC"; break; 162 163 case 2: // create date, ASC 164 $content['alink']['date_basis'] = 'article_created'; 165 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_created ASC"; break; 166 167 case 3: // change date, DESC 168 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_tstamp DESC"; break; 169 170 case 4: // change date, ASC 171 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_tstamp ASC"; break; 172 173 case 5: // live date, DESC 174 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_begin DESC"; break; 175 176 case 6: // live date, ASC 177 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_begin ASC"; break; 178 179 case 7: // kill date, DESC 180 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_end DESC"; break; 181 182 case 8: // kill date, ASC 183 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_end ASC"; break; 184 185 case 18: // article title, DESC 186 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_title DESC"; break; 187 188 case 19: // article title, ASC 189 $alink_sql .= " ORDER BY ".$sql_prio."ar.article_title ASC"; break; 190 191 192 case 9: // random 193 $alink_sql .= " ORDER BY RAND()"; break; 194 195 case 10: // random, create date, DESC 196 $alink_sql .= " ORDER BY RAND()"; 197 $sql_union .= " ORDER BY ".$sql_union_prio."article_created DESC"; break; 198 199 case 11: // random, create date, ASC 200 $alink_sql .= " ORDER BY RAND()"; 201 $sql_union .= " ORDER BY ".$sql_union_prio."article_created ASC"; break; 202 203 case 12: // random, change date, DESC 204 $alink_sql .= " ORDER BY RAND()"; 205 $sql_union .= " ORDER BY ".$sql_union_prio."article_tstamp DESC"; break; 206 207 case 13: // random, change date, ASC 208 $alink_sql .= " ORDER BY RAND()"; 209 $sql_union .= " ORDER BY ".$sql_union_prio."article_tstamp ASC"; break; 210 211 case 14: // random, live date, DESC 212 $alink_sql .= " ORDER BY RAND()"; 213 $sql_union .= " ORDER BY ".$sql_union_prio."article_begin DESC"; break; 214 215 case 15: // random, live date, ASC 216 $alink_sql .= " ORDER BY RAND()"; 217 $sql_union .= " ORDER BY ".$sql_union_prio."article_begin ASC"; break; 218 219 case 16: // random, kill date, DESC 220 $alink_sql .= " ORDER BY RAND()"; 221 $sql_union .= " ORDER BY ".$sql_union_prio."article_end DESC"; break; 222 223 case 17: // random, kill date, ASC 224 $alink_sql .= " ORDER BY RAND()"; 225 $sql_union .= " ORDER BY ".$sql_union_prio."article_end ASC"; break; 226 227 case 20: // random, kill date, DESC 228 $alink_sql .= " ORDER BY RAND()"; 229 $sql_union .= " ORDER BY ".$sql_union_prio."article_title DESC"; break; 230 231 case 21: // random, kill date, ASC 232 $alink_sql .= " ORDER BY RAND()"; 233 $sql_union .= " ORDER BY ".$sql_union_prio."article_title ASC"; break; 234 235 } 236 237 if(!empty($content['alink']['alink_max']) && intval($content['alink']['alink_max'])) { 238 $alink_sql .= " LIMIT ".intval($content['alink']['alink_max']); 239 } 240 241 if($sql_union != '') { 242 243 $alink_sql = '('.$alink_sql.') UNION DISTINCT ('.$alink_sql.')'.$sql_union; 244 if(!empty($content['alink']['alink_max']) && intval($content['alink']['alink_max'])) { 245 $alink_sql .= " LIMIT ".intval($content['alink']['alink_max']); 246 } 247 248 } 249 250 } 251 252 $content['alink']['tr'] = array(); 253 254 $content['alink']['alink_template_head'] = get_tmpl_section('TEASER_HEAD', $content['alink']['alink_template']); 255 $content['alink']['alink_template_footer'] = get_tmpl_section('TEASER_FOOTER', $content['alink']['alink_template']); 256 $content['alink']['alink_template_entry'] = get_tmpl_section('TEASER_ENTRY', $content['alink']['alink_template']); 257 $content['alink']['alink_template_space'] = get_tmpl_section('TEASER_ENTRY_SPACER', $content['alink']['alink_template']); 258 $content['alink']['alink_template_row'] = get_tmpl_section('TEASER_ROW_SPACER', $content['alink']['alink_template']); 259 $content['alink']['alink_template_column'] = trim( get_tmpl_section('TEASER_COLUMN_OVERWRITE', $content['alink']['alink_template']) ); 260 261 $content['alink']['alink_template_head'] = str_replace('{LINK_ARTICLE_CLASS}', get_class_attrib($template_default["article"]["link_article_class"]), $content['alink']['alink_template_head']); 262 263 $content['alink']['result'] = _dbQuery($alink_sql); 264 265 if(isset($content['alink']['result'][0])) { 266 267 // lets handle columns and rows 268 if($content['alink']['alink_template_column'] !== '') { 269 $content['alink']['alink_columns'] = abs(intval($content['alink']['alink_template_column'])); 270 } elseif(empty($content['alink']['alink_columns'])) { 271 $content['alink']['alink_columns'] = 0; 272 } else { 273 $content['alink']['alink_columns'] = $content['alink']['alink_columns']; 274 } 275 276 $content['alink']['column'] = 1; 277 $content['alink']['row'] = 1; 278 $content['alink']['row_space'] = false; 279 280 // before finding a faster solution... 281 if(!empty($content['alink']['alink_type'])) { 282 $content['alink']['alink_id'] = array(); 283 foreach($content['alink']['result'] as $value) { 284 $content['alink']['alink_id'][] = $value['article_id']; 285 } 286 } 287 288 // Max teaser items 289 $content['alink']['max_items'] = count($content['alink']['alink_id']); 290 291 foreach($content['alink']['alink_id'] as $key => $value) { 292 293 $content['UNIQUE_ALINK'][$value] = $value; //save UNIQUE Teaser ID 294 295 foreach($content['alink']['result'] as $row) { 296 297 if($value == $row['article_id'] && isset($content['struct'][ $row['article_cid'] ])) { 298 299 // enable frontend edit link 300 $content['alink']['tr'][$key] = getFrontendEditLink('summary', $row["article_id"]); 301 302 // set columns/row class 303 if($content['alink']['alink_columns'] > 0) { 304 305 // check if the current teaser will be on a new row 306 if($content['alink']['row_space'] && $content['alink']['alink_template_row']) { 307 $content['alink']['tr'][$key] .= render_cnt_template($content['alink']['alink_template_row'], 'ROW', $content['alink']['row']); 308 } 309 310 $row['column'] = array( 311 'teaser-row'.$content['alink']['row'], 312 'teaser-col'.$content['alink']['column'] 313 ); 314 315 $row['column'] = implode(' ', $row['column']); 316 317 // now make the tests 318 if($content['alink']['column'] % $content['alink']['alink_columns']) { 319 // New column 320 $content['alink']['column']++; 321 $content['alink']['row_space'] = false; 322 } else { 323 // New row 324 $content['alink']['column'] = 1; 325 $content['alink']['row']++; 326 $content['alink']['row_space'] = true; 327 } 328 329 } else { 330 331 $row['column'] = ''; 332 } 333 334 $content['alink']['tr'][$key] .= $content['alink']['alink_template_entry']; 335 336 $content['alink']['tr'][$key] = str_replace('{ARTICLEID}', $row['article_id'], $content['alink']['tr'][$key]); 337 $content['alink']['tr'][$key] = str_replace('{CATEGORYID}', $row['article_cid'], $content['alink']['tr'][$key]); 338 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'MENUTITLE', html_specialchars($row['article_menutitle'])); 339 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'TITLE', html_specialchars($row['article_title'])); 340 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUBTITLE', html_specialchars($row['article_subtitle'])); 341 $content['alink']['tr'][$key] = render_cnt_date($content['alink']['tr'][$key], $row[ $content['alink']['date_basis'] ], phpwcms_strtotime($row['article_begin']), phpwcms_strtotime($row['article_end'])); 342 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'PRIO', empty($row['article_priorize']) ? '' : $row['article_priorize']); 343 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'COLUMN', $row['column']); 344 345 $row['article_image'] = @unserialize( $row['article_image'] ); 346 347 // article list image 348 if(strpos($content['alink']['tr'][$key], 'IMAGE') !== false) { 349 350 $row['article_image'] = setArticleSummaryImageData( $row['article_image'] ); 351 352 $img_thumb_name = ''; 353 $img_thumb_rel = ''; 354 $img_thumb_abs = ''; 355 $img_thumb_width = 0; 356 $img_thumb_height = 0; 357 $img_thumb_id = empty($row['article_image']['list_id']) ? '' : $row['article_image']['list_id']; 358 $img_thumb_hash = ''; 359 $img_thumb_crop = 0; 360 361 // check if image available 362 if($img_thumb_id) { 363 364 if(!empty($content['alink']['alink_width'])) { 365 $row['article_image']['list_width'] = $content['alink']['alink_width']; 366 $img_thumb_width = $row['article_image']['list_width']; 367 } 368 if(!empty($content['alink']['alink_height'])) { 369 $row['article_image']['list_height'] = $content['alink']['alink_height']; 370 $img_thumb_height = $row['article_image']['list_height']; 371 } 372 373 // build image/image link 374 $content['alink']['poplink'] = ''; 375 $thumb_image = false; 376 $thumb_img = ''; 377 $img_thumb_hash = empty($row['article_image']['list_hash']) ? '' : $row['article_image']['list_hash']; 378 $img_thumb_crop = empty($content['alink']['alink_crop']) ? 0 : 1; 379 $content['alink']['caption'] = getImageCaption($row['article_image']['list_caption']); 380 $row['article_image']['list_caption'] = $content['alink']['caption'][0]; // caption text 381 382 if(strpos($content['alink']['tr'][$key], 'cmsimage.php') !== false && $img_thumb_hash) { 383 384 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', $img_thumb_hash); 385 386 } elseif($img_thumb_hash) { 387 388 $thumb_image = get_cached_image( 389 array( "target_ext" => $row['article_image']['list_ext'], 390 "image_name" => $row['article_image']['list_hash'] . '.' . $row['article_image']['list_ext'], 391 "max_width" => $row['article_image']['list_width'], 392 "max_height" => $row['article_image']['list_height'], 393 "thumb_name" => md5( $row['article_image']['list_hash']. 394 $row['article_image']['list_width']. 395 $row['article_image']['list_height']. 396 $GLOBALS['phpwcms']['sharpen_level']. 397 $img_thumb_crop 398 ), 399 'crop_image' => $img_thumb_crop 400 )); 401 402 if($thumb_image != false) { 403 404 $content['alink']['caption'][3] = empty($content['alink']['caption'][3]) ? '' : ' title="'.html_specialchars($content['alink']['caption'][3]).'"'; 405 $content['alink']['caption'][1] = html_specialchars($content['alink']['caption'][1]); 406 407 $thumb_img = '<img src="'.PHPWCMS_IMAGES . $thumb_image[0] .'" border="0" '.$thumb_image[3].' alt="'.$content['alink']['caption'][1].'"'.$content['alink']['caption'][3].' />'; 408 409 $img_thumb_name = $thumb_image[0]; 410 $img_thumb_rel = PHPWCMS_IMAGES.$thumb_image[0]; 411 $img_thumb_abs = PHPWCMS_URL.PHPWCMS_IMAGES.$thumb_image[0]; 412 $img_thumb_width = $thumb_image[1]; 413 $img_thumb_height = $thumb_image[2]; 414 } 415 } 416 417 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', $thumb_img); 418 419 } else { 420 421 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'IMAGE', ''); 422 423 } 424 425 // replace thumbnail and zoom image information 426 $content['alink']['tr'][$key] = str_replace( 427 array( '{THUMB_NAME}', '{THUMB_REL}', '{THUMB_ABS}', '{THUMB_WIDTH}', '{THUMB_HEIGHT}', '{THUMB_ID}', '{THUMB_HASH}', '{THUMB_CROP}' ), 428 array( $img_thumb_name, $img_thumb_rel, $img_thumb_abs, $img_thumb_width, $img_thumb_height, $img_thumb_id, $img_thumb_hash, $img_thumb_crop ), 429 $content['alink']['tr'][$key] 430 ); 431 432 // Image Caption 433 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'CAPTION', empty($row['article_image']['list_caption']) ? '' : html_specialchars($row['article_image']['list_caption'])); 434 435 } 436 437 // article summary 438 if(strpos($content['alink']['tr'][$key], 'SUMMARY_RAW') !== false) { 439 440 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUMMARY_RAW', $row['article_summary']); 441 442 } 443 if(strpos($content['alink']['tr'][$key], 'SUMMARY') !== false) { 444 445 if(empty($content['alink']['alink_wordlimit']) && !empty($row['article_image']['list_maxwords'])) { 446 $content['alink']['alink_wordlimit'] = $row['article_image']['list_maxwords']; 447 } 448 $row['article_summary'] = empty($content['alink']['alink_allowedtags']) ? strip_tags($row['article_summary']) : strip_tags($row['article_summary'], $content['alink']['alink_allowedtags']); 449 if(!empty($content['alink']['alink_wordlimit'])) { 450 $row['article_summary'] = getCleanSubString($row['article_summary'], $content['alink']['alink_wordlimit'], $template_default['ellipse_sign'], 'word'); 451 } 452 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'SUMMARY', $row['article_summary']); 453 } 454 455 // $content['struct'][ $row['article_cid'] ]['acat_articlecount'] 456 // count the articles per category and decide where to link on that basis 457 // store it if used once 458 if($content['alink']['alink_categoryalias'] && ($row['article_structalias'] = get_structurelevel_single_article_alias($row['article_cid']))) { 459 460 $row['article_alias'] = $row['article_structalias']; 461 462 } 463 464 // link to article detail 465 //$content['alink']['tr'][$key] = str_replace('{ARTICLELINK}', , $content['alink']['tr'][$key]); 466 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'ARTICLELINK', $row['article_morelink'] ? 'index.php?'.setGetArticleAid($row) : ''); 467 468 // article category 469 $content['alink']['tr'][$key] = render_cnt_template($content['alink']['tr'][$key], 'CATEGORY', html_specialchars($content['struct'][ $row['article_cid'] ]['acat_name'])); 470 471 break; 472 473 } 474 475 } 476 } 477 478 } 479 480 // combine all teaser items 481 if(count($content['alink']['tr'])) { 482 $content['alink']['tr'] = implode($content['alink']['alink_template_space'], $content['alink']['tr']); 483 $content['alink']['teaser'] = ' '; 484 } else { 485 $content['alink']['tr'] = ''; 486 $content['alink']['teaser'] = ''; 487 } 488 489 // put all template and content into one 490 $content['alink']['alink_template'] = LF . $content['alink']['alink_template_head'] . $content['alink']['tr'] . $content['alink']['alink_template_footer'] . LF; 491 492 // render teaser elements - throw everything between [TEASER]...[/TEASER] 493 $content['alink'] = render_cnt_template($content['alink']['alink_template'], 'TEASER', $content['alink']['teaser']); 494 495 // render title 496 $content['alink'] = render_cnt_template($content['alink'], 'TITLE', html_specialchars($crow['acontent_title'])); 497 $content['alink'] = render_cnt_template($content['alink'], 'SUBTITLE', html_specialchars($crow['acontent_subtitle'])); 498 499 $CNT_TMP .= $content['alink']; 500 501 502 } 503 504 505 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Jan 29 16:31:14 2012 | Cross-referenced by PHPXref 0.7.1 |