| [ Index ] |
|
Code source de GeekLog 1.4.1 |
1 <?php 2 3 /* Reminder: always indent with 4 spaces (no tabs). */ 4 // +---------------------------------------------------------------------------+ 5 // | Geeklog 1.4 | 6 // +---------------------------------------------------------------------------+ 7 // | trackback.php | 8 // | | 9 // | Admin functions handle Trackback, Pingback, and Ping | 10 // +---------------------------------------------------------------------------+ 11 // | Copyright (C) 2005-2006 by the following authors: | 12 // | | 13 // | Author: Dirk Haun - dirk AT haun-online DOT de | 14 // +---------------------------------------------------------------------------+ 15 // | | 16 // | This program is free software; you can redistribute it and/or | 17 // | modify it under the terms of the GNU General Public License | 18 // | as published by the Free Software Foundation; either version 2 | 19 // | of the License, or (at your option) any later version. | 20 // | | 21 // | This program is distributed in the hope that it will be useful, | 22 // | but WITHOUT ANY WARRANTY; without even the implied warranty of | 23 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 24 // | GNU General Public License for more details. | 25 // | | 26 // | You should have received a copy of the GNU General Public License | 27 // | along with this program; if not, write to the Free Software Foundation, | 28 // | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 29 // | | 30 // +---------------------------------------------------------------------------+ 31 // 32 // $Id: trackback.php,v 1.43 2006/08/19 13:59:28 dhaun Exp $ 33 34 require_once ('../lib-common.php'); 35 36 /** 37 * Security check to ensure user even belongs on this page 38 */ 39 require_once ('auth.inc.php'); 40 41 if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled'] && 42 !$_CONF['ping_enabled']) { 43 echo COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 44 exit; 45 } 46 47 $display = ''; 48 49 if (!SEC_hasRights ('story.ping')) { 50 $display .= COM_siteHeader ('menu', $MESSAGE[30]); 51 $display .= COM_startBlock ($MESSAGE[30], '', 52 COM_getBlockTemplate ('_msg_block', 'header')); 53 $display .= $MESSAGE[34]; 54 $display .= COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer')); 55 $display .= COM_siteFooter (); 56 COM_accessLog("User {$_USER['username']} tried to illegally access the trackback administration screen."); 57 echo $display; 58 exit; 59 } 60 61 require_once ($_CONF['path_system'] . 'lib-trackback.php'); 62 require_once ($_CONF['path_system'] . 'lib-pingback.php'); 63 require_once ($_CONF['path_system'] . 'lib-story.php'); 64 65 /** 66 * Display trackback comment submission form. 67 * 68 * @param string $target URL to send the trackback comment to 69 * @param string $url URL of our entry 70 * @param string $title title of our entry 71 * @param string $excerpt excerpt of our entry 72 * @param string $blog name of our site 73 * @return string HTML for the trackback comment editor 74 * 75 */ 76 function trackback_editor ($target = '', $url = '', $title = '', $excerpt = '', $blog = '') 77 { 78 global $_CONF, $LANG_TRB; 79 80 $retval = ''; 81 82 // show preview if we have at least the URL 83 if (!empty ($url)) { 84 // filter them for the preview 85 $p_title = TRB_filterTitle ($title); 86 $p_excerpt = TRB_filterExcerpt ($excerpt); 87 $p_blog = TRB_filterBlogname ($blog); 88 89 // MT and other weblogs will shorten the excerpt like this 90 if (MBYTE_strlen ($p_excerpt) > 255) { 91 $p_excerpt = MBYTE_substr ($p_excerpt, 0, 252) . '...'; 92 } 93 94 $retval .= COM_startBlock ($LANG_TRB['preview']); 95 96 $preview = new Template ($_CONF['path_layout'] . 'trackback'); 97 $preview->set_file (array ('comment' => 'trackbackcomment.thtml')); 98 $comment = TRB_formatComment ($url, $p_title, $p_blog, $p_excerpt); 99 $preview->set_var ('formatted_comment', $comment); 100 $preview->parse ('output', 'comment'); 101 $retval .= $preview->finish ($preview->get_var ('output')); 102 103 $retval .= COM_endBlock (); 104 } 105 106 if (empty ($url) && empty ($blog)) { 107 $blog = htmlspecialchars ($_CONF['site_name']); 108 } 109 $title = htmlspecialchars ($title); 110 $excerpt = htmlspecialchars ($excerpt, ENT_NOQUOTES); 111 112 $retval .= COM_startBlock ($LANG_TRB['editor_title'], $_CONF['site_url'] 113 . '/docs/trackback.html#trackback', 114 COM_getBlockTemplate ('_admin_block', 'header')); 115 116 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 117 $template->set_file (array ('editor' => 'trackbackeditor.thtml')); 118 119 $template->set_var ('site_url', $_CONF['site_url']); 120 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 121 $template->set_var ('layout_url', $_CONF['layout_url']); 122 $template->set_var ('php_self', $_CONF['site_admin_url'] 123 . '/trackback.php'); 124 125 if (empty ($url) || empty ($title)) { 126 $template->set_var ('lang_explain', $LANG_TRB['editor_intro_none']); 127 } else { 128 $template->set_var ('lang_explain', 129 sprintf ($LANG_TRB['editor_intro'], $url, $title)); 130 } 131 $template->set_var ('lang_trackback_url', $LANG_TRB['trackback_url']); 132 $template->set_var ('lang_entry_url', $LANG_TRB['entry_url']); 133 $template->set_var ('lang_title', $LANG_TRB['entry_title']); 134 $template->set_var ('lang_blog_name', $LANG_TRB['blog_name']); 135 $template->set_var ('lang_excerpt', $LANG_TRB['excerpt']); 136 $template->set_var ('lang_excerpt_truncated', 137 $LANG_TRB['truncate_warning']); 138 $template->set_var ('lang_send', $LANG_TRB['button_send']); 139 $template->set_var ('lang_preview', $LANG_TRB['button_preview']); 140 141 $template->set_var ('max_url_length', 255); 142 $template->set_var ('target_url', $target); 143 $template->set_var ('url', $url); 144 $template->set_var ('title', $title); 145 $template->set_var ('blog_name', $blog); 146 $template->set_var ('excerpt', $excerpt); 147 148 $template->parse ('output', 'editor'); 149 $retval .= $template->finish ($template->get_var ('output')); 150 151 $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); 152 153 return $retval; 154 } 155 156 /** 157 * Deletes a trackback comment. Checks if the current user has proper 158 * permissions first. 159 * 160 * @param int $id ID of the trackback comment to delete 161 * @return string HTML redirect 162 * 163 */ 164 function deleteTrackbackComment ($id) 165 { 166 global $_TABLES; 167 168 $cid = addslashes ($id); 169 $result = DB_query ("SELECT sid,type FROM {$_TABLES['trackback']} WHERE cid = '$cid'"); 170 list ($sid, $type) = DB_fetchArray ($result); 171 $url = getItemInfo ($type, $sid, 'url'); 172 173 if (TRB_allowDelete ($sid, $type)) { 174 TRB_deleteTrackbackComment ($id); 175 if ($type == 'article') { 176 DB_query ("UPDATE {$_TABLES['stories']} SET trackbacks = trackbacks - 1 WHERE (sid = '$sid')"); 177 } 178 $msg = 62; 179 } else { 180 $msg = 63; 181 } 182 if (strpos ($url, '?') === false) { 183 $url .= '?msg=' . $msg; 184 } else { 185 $url .= '&msg=' . $msg; 186 } 187 188 return COM_refresh ($url); 189 } 190 191 /** 192 * Show an error or warning message 193 * 194 * @param string $title block title 195 * @param string $message the actual message 196 * @return string HTML for the message block 197 * 198 */ 199 function showTrackbackMessage ($title, $message) 200 { 201 $retval = ''; 202 203 $retval .= COM_startBlock ($title, '', 204 COM_getBlockTemplate ('_msg_block', 'header')) 205 . $message 206 . COM_endBlock (COM_getBlockTemplate ('_msg_block', 'footer')); 207 208 return $retval; 209 } 210 211 /** 212 * Send a Pingback to all the links in our entry 213 * 214 * @param string $type type of entry we're advertising ('article' = story) 215 * @param string $id ID of that entry 216 * @return string pingback results 217 * 218 */ 219 function sendPingbacks ($type, $id) 220 { 221 global $_CONF, $LANG_TRB; 222 223 $retval = ''; 224 225 list ($url, $text) = getItemInfo ($type, $id, 'url,description'); 226 227 // extract all links from the text 228 preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, 229 $matches); 230 $numlinks = count ($matches[0]); 231 if ($numlinks > 0) { 232 $links = array (); 233 for ($i = 0; $i < $numlinks; $i++) { 234 $links[$matches[2][$i]] = $matches[1][$i]; 235 } 236 $links = array_unique ($links); 237 238 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 239 $template->set_file (array ('list' => 'pingbacklist.thtml', 240 'item' => 'pingbackitem.thtml')); 241 $template->set_var ('site_url', $_CONF['site_url']); 242 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 243 $template->set_var ('layout_url', $_CONF['layout_url']); 244 $template->set_var ('lang_resend', $LANG_TRB['resend']); 245 $template->set_var ('lang_results', $LANG_TRB['pingback_results']); 246 247 $counter = 1; 248 foreach ($links as $key => $URLtoPing) { 249 $result = PNB_sendPingback ($url, $URLtoPing); 250 $resend = ''; 251 if (empty ($result)) { 252 $result = '<b>' . $LANG_TRB['pingback_success'] . '</b>'; 253 } else if ($result != $LANG_TRB['no_pingback_url']) { 254 $result = '<span class="warningsmall">' . $result . '</span>'; 255 // TBD: $resend = '...'; 256 } 257 $parts = parse_url ($URLtoPing); 258 259 $template->set_var ('url_to_ping', $URLtoPing); 260 $template->set_var ('link_text', $key); 261 $template->set_var ('host_name', $parts['host']); 262 $template->set_var ('pingback_result', $result); 263 $template->set_var ('resend', $resend); 264 $template->set_var ('alternate_row', 265 ($counter % 2) == 0 ? 'row-even' : 'row-odd'); 266 $template->set_var ('cssid', ($i % 2) + 1); 267 $template->parse ('pingback_results', 'item', true); 268 $counter++; 269 } 270 $template->parse ('output', 'list'); 271 $retval .= $template->finish ($template->get_var ('output')); 272 273 } else { 274 $retval = '<p>' . $LANG_TRB['no_links_pingback'] . '</p>'; 275 } 276 277 return $retval; 278 } 279 280 function pingbackForm ($targetUrl = '') 281 { 282 global $_CONF, $LANG_TRB; 283 284 $retval = ''; 285 $retval .= COM_startBlock ($LANG_TRB['pingback_button'], 286 $_CONF['site_url'] . '/docs/trackback.html', 287 COM_getBlockTemplate ('_admin_block', 'header')); 288 289 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 290 $template->set_file (array ('list' => 'pingbackform.thtml')); 291 $template->set_var ('site_url', $_CONF['site_url']); 292 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 293 $template->set_var ('layout_url', $_CONF['layout_url']); 294 295 $template->set_var ('lang_explain', $LANG_TRB['pingback_explain']); 296 $template->set_var ('lang_pingback_url', $LANG_TRB['pingback_url']); 297 $template->set_var ('lang_site_url', $LANG_TRB['site_url']); 298 $template->set_var ('lang_send', $LANG_TRB['button_send']); 299 300 $template->set_var ('target_url', $targetUrl); 301 302 $template->parse ('output', 'list'); 303 $retval .= $template->finish ($template->get_var ('output')); 304 305 $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); 306 307 return $retval; 308 } 309 310 /** 311 * Ping weblog directory services 312 * 313 * @param string $type type of entry we're advertising ('article' = story) 314 * @param string $id ID of that entry 315 * @return string result of the pings 316 * 317 */ 318 function sendPings ($type, $id) 319 { 320 global $_CONF, $_TABLES, $LANG_TRB; 321 322 $retval = ''; 323 324 list ($itemurl,$feedurl) = getItemInfo ($type, $id, 'url,feed'); 325 326 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 327 $template->set_file (array ('list' => 'pinglist.thtml', 328 'item' => 'pingitem.thtml')); 329 $template->set_var ('site_url', $_CONF['site_url']); 330 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 331 $template->set_var ('layout_url', $_CONF['layout_url']); 332 $template->set_var ('lang_resend', $LANG_TRB['resend']); 333 $template->set_var ('lang_results', $LANG_TRB['ping_results']); 334 335 $result = DB_query ("SELECT ping_url,method,name,site_url FROM {$_TABLES['pingservice']} WHERE is_enabled = 1"); 336 $services = DB_numRows ($result); 337 if ($services > 0) { 338 for ($i = 0; $i < $services; $i++) { 339 $A = DB_fetchArray ($result); 340 $resend = ''; 341 if ($A['method'] == 'weblogUpdates.ping') { 342 $pinged = PNB_sendPing ($A['ping_url'], $_CONF['site_name'], 343 $_CONF['site_url'], $itemurl); 344 } else if ($A['method'] == 'weblogUpdates.extendedPing') { 345 $pinged = PNB_sendExtendedPing ($A['ping_url'], 346 $_CONF['site_name'], $_CONF['site_url'], $itemurl, 347 $feedurl); 348 } else { 349 $pinged = $LANG_TRB['unknown_method'] . ': ' . $A['method']; 350 } 351 if (empty ($pinged)) { 352 $pinged = '<b>' . $LANG_TRB['ping_success'] . '</b>'; 353 } else { 354 $pinged = '<span class="warningsmall">' . $pinged . '</span>'; 355 } 356 357 $template->set_var ('service_name', $A['name']); 358 $template->set_var ('service_url', $A['site_url']); 359 $template->set_var ('service_ping_url', $A['ping_url']); 360 $template->set_var ('ping_result', $pinged); 361 $template->set_var ('resend', $resend); 362 $template->set_var ('alternate_row', 363 (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); 364 $template->set_var ('cssid', ($i % 2) + 1); 365 $template->parse ('ping_results', 'item', true); 366 } 367 } else { 368 $template->set_var ('ping_results', '<tr><td colspan="2">' . 369 $LANG_TRB['no_services'] . '</td></tr>'); 370 } 371 $template->parse ('output', 'list'); 372 $retval .= $template->finish ($template->get_var ('output')); 373 374 return $retval; 375 } 376 377 /** 378 * Prepare a list of all links in a story/item so that we can ask the user 379 * which one to send the trackback to. 380 * 381 * @param string $type type of entry ('article' = story, etc.) 382 * @param string $id ID of that entry 383 * @param string $text text of that entry, to get the links from 384 * @return string formatted list of links 385 * 386 */ 387 function prepareAutodetect ($type, $id, $text) 388 { 389 global $_CONF, $LANG_TRB; 390 391 $retval = ''; 392 393 $baseurl = $_CONF['site_admin_url'] 394 . '/trackback.php?mode=autodetect&id=' . $id; 395 if ($type != 'article') { 396 $baseurl .= '&type' . $type; 397 } 398 399 // extract all links from the text 400 preg_match_all ("/<a[^>]*href=[\"']([^\"']*)[\"'][^>]*>(.*?)<\/a>/i", $text, 401 $matches); 402 $numlinks = count ($matches[0]); 403 if ($numlinks == 1) { 404 // skip the link selection when there's only one link in the story 405 $url = urlencode ($matches[1][0]); 406 $link = $baseurl .= '&url=' . $url; 407 408 echo COM_refresh ($link); 409 exit; 410 } else if ($numlinks > 0) { 411 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 412 $template->set_file (array ('list' => 'autodetectlist.thtml', 413 'item' => 'autodetectitem.thtml')); 414 $template->set_var ('site_url', $_CONF['site_url']); 415 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 416 $template->set_var ('layout_url', $_CONF['layout_url']); 417 418 $url = $_CONF['site_admin_url'] . '/trackback.php?mode=new&id=' . $id; 419 if ($type != 'article') { 420 $url .= '&type=' . $type; 421 } 422 $template->set_var ('lang_trackback_explain', 423 sprintf ($LANG_TRB['trackback_explain'], $url)); 424 425 for ($i = 0; $i < $numlinks; $i++) { 426 $url = urlencode ($matches[1][$i]); 427 $link = $baseurl .= '&url=' . $url; 428 429 $template->set_var ('autodetect_link', $link); 430 $template->set_var ('link_text', $matches[2][$i]); 431 $template->set_var ('link_url', $matches[1][$i]); 432 $template->set_var ('alternate_row', 433 (($i + 1) % 2) == 0 ? 'row-even' : 'row-odd'); 434 $template->set_var ('cssid', ($i % 2) + 1); 435 $template->parse ('autodetect_items', 'item', true); 436 } 437 $template->parse ('output', 'list'); 438 $retval .= $template->finish ($template->get_var ('output')); 439 } else { 440 $retval .= $LANG_TRB['no_links_trackback']; 441 } 442 443 return $retval; 444 } 445 446 /** 447 * Wrapper for STORY_getItemInfo / PLG_getItemInfo to keep things readable 448 * 449 * @param string $type type of entry ('article' = story, else plugin) 450 * @param string $id ID of that entry 451 * @param string $what info requested 452 * @return mixed requested info, as a string or array of strings 453 * 454 */ 455 function getItemInfo ($type, $id, $what) 456 { 457 if ($type == 'article') { 458 return STORY_getItemInfo ($id, $what); 459 } else { 460 return PLG_getItemInfo ($type, $id, $what); 461 } 462 } 463 464 /** 465 * Display a list of all weblog directory services in the system 466 * 467 * @return string HTML for the list 468 * 469 */ 470 function listServices () 471 { 472 global $LANG_ADMIN, $LANG_TRB, $_CONF, $_IMAGE_TYPE, $_TABLES; 473 require_once( $_CONF['path_system'] . 'lib-admin.php' ); 474 $retval = ''; 475 476 $header_arr = array( # display 'text' and use table field 'field' 477 array('text' => $LANG_ADMIN['edit'], 'field' => 'edit', 'sort' => false), 478 array('text' => $LANG_TRB['service'], 'field' => 'name', 'sort' => true), 479 array('text' => $LANG_TRB['ping_method'], 'field' => 'method', 'sort' => true), 480 array('text' => $LANG_TRB['service_ping_url'], 'field' => 'ping_url', 'sort' => true), 481 array('text' => $LANG_ADMIN['enabled'], 'field' => 'is_enabled', 'sort' => false)); 482 483 $defsort_arr = array('field' => 'name', 'direction' => 'asc'); 484 485 $menu_arr = array ( 486 array('url' => $_CONF['site_admin_url'] . '/trackback.php?mode=editservice', 487 'text' => $LANG_ADMIN['create_new']), 488 array('url' => $_CONF['site_admin_url'], 489 'text' => $LANG_ADMIN['admin_home'])); 490 491 $text_arr = array('has_menu' => true, 492 'has_extras' => true, 493 'title' => $LANG_TRB['services_headline'], 494 'instructions' => $LANG_TRB['service_explain'], 495 'icon' => $_CONF['layout_url'] . '/images/icons/trackback.' 496 . $_IMAGE_TYPE, 497 'form_url' => $_CONF['site_admin_url'] . "/trackback.php", 498 'help_url' => $_CONF['site_url'] . '/docs/trackback.html#ping'); 499 500 $query_arr = array('table' => 'pingservice', 501 'sql' => "SELECT * FROM {$_TABLES['pingservice']} WHERE 1=1", 502 'query_fields' => array('name', 'ping_url'), 503 'default_filter' => "", 504 'no_data' => $LANG_TRB['no_services']); 505 506 $retval .= ADMIN_list ("pingservice", "ADMIN_getListField_trackback", $header_arr, $text_arr, 507 $query_arr, $menu_arr, $defsort_arr); 508 509 510 if ($_CONF['trackback_enabled']) { 511 $retval .= freshTrackback (); 512 } 513 if ($_CONF['pingback_enabled']) { 514 $retval .= freshPingback (); 515 } 516 return $retval; 517 } 518 519 /** 520 * Display weblog directory service editor 521 * 522 * @param int $pid ID of the service or 0 for new service 523 * @param string $msg an error message to display 524 * @param string $new_name name of the service 525 * @param string $new_site_url URL of the service's site 526 * @param string $new_ping_url URL to ping at the service 527 * @param string $new_method ping method to use 528 * @param int $new_enabled service is enabled (1) / disabled (0) 529 * @return string HTML for the editor 530 * 531 */ 532 function editServiceForm ($pid, $msg = '', $new_name = '', $new_site_url = '', $new_ping_url = '', $new_method = '', $new_enabled = -1) 533 { 534 global $_CONF, $_TABLES, $LANG_TRB, $LANG_ADMIN, $MESSAGE; 535 536 $retval = ''; 537 538 if ($pid > 0) { 539 $result = DB_query ("SELECT * FROM {$_TABLES['pingservice']} WHERE pid = '$pid'"); 540 $A = DB_fetchArray ($result); 541 } else { 542 $A['is_enabled'] = 1; 543 $A['method'] = 'weblogUpdates.ping'; 544 } 545 546 if (!empty ($new_name)) { 547 $A['name'] = $new_name; 548 } 549 if (!empty ($new_site_url)) { 550 $A['site_url'] = $new_site_url; 551 } 552 if (!empty ($new_ping_url)) { 553 $A['ping_url'] = $new_ping_url; 554 } 555 if (!empty ($new_method)) { 556 $A['method'] = $new_method; 557 } 558 if ($new_enabled >= 0) { 559 $A['is_enabled'] = $new_enabled; 560 } 561 562 $retval .= COM_siteHeader ('menu', $LANG_TRB['edit_service']); 563 564 if (!empty ($msg)) { 565 $retval .= showTrackbackMessage ('Error', $msg); 566 } 567 568 $retval .= COM_startBlock ($LANG_TRB['edit_service'], $_CONF['site_url'] 569 . '/docs/trackback.html#ping', 570 COM_getBlockTemplate ('_admin_block', 'header')); 571 572 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 573 $template->set_file (array ('editor' => 'serviceeditor.thtml')); 574 $template->set_var ('site_url', $_CONF['site_url']); 575 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 576 $template->set_var ('layout_url', $_CONF['layout_url']); 577 $template->set_var ('max_url_length', 255); 578 $template->set_var ('method_ping', 'weblogUpdates.ping'); 579 $template->set_var ('method_ping_extended', 'weblogUpdates.extendedPing'); 580 581 $template->set_var ('lang_name', $LANG_TRB['service']); 582 $template->set_var ('lang_site_url', $LANG_TRB['service_website']); 583 $template->set_var ('lang_ping_url', $LANG_TRB['service_ping_url']); 584 $template->set_var ('lang_enabled', $LANG_ADMIN['enabled']); 585 $template->set_var ('lang_method', $LANG_TRB['ping_method']); 586 $template->set_var ('lang_method_standard', $LANG_TRB['ping_standard']); 587 $template->set_var ('lang_method_extended', $LANG_TRB['ping_extended']); 588 $template->set_var ('lang_save', $LANG_ADMIN['save']); 589 $template->set_var ('lang_cancel', $LANG_ADMIN['cancel']); 590 591 if ($pid > 0) { 592 $delbutton = '<input type="submit" value="' . $LANG_ADMIN['delete'] 593 . '" name="servicemode[2]"%s>'; 594 $jsconfirm = ' onclick="return confirm(\'' . $MESSAGE[76] . '\');"'; 595 $template->set_var ('delete_option', 596 sprintf ($delbutton, $jsconfirm)); 597 $template->set_var ('delete_option_no_confirmation', 598 sprintf ($delbutton, '')); 599 } else { 600 $template->set_var ('delete_option', ''); 601 } 602 603 if (isset ($A['pid'])) { 604 $template->set_var ('service_id', $A['pid']); 605 } else { 606 $template->set_var ('service_id', ''); 607 } 608 if (isset ($A['name'])) { 609 $template->set_var ('service_name', $A['name']); 610 } else { 611 $template->set_var ('service_name', ''); 612 } 613 if (isset ($A['site_url'])) { 614 $template->set_var ('service_site_url', $A['site_url']); 615 } else { 616 $template->set_var ('service_site_url', ''); 617 } 618 if (isset ($A['ping_url'])) { 619 $template->set_var ('service_ping_url', $A['ping_url']); 620 } else { 621 $template->set_var ('service_ping_url', ''); 622 } 623 if ($A['is_enabled'] == 1) { 624 $template->set_var ('is_enabled', 'checked="checked"'); 625 } else { 626 $template->set_var ('is_enabled', ''); 627 } 628 if ($A['method'] == 'weblogUpdates.ping') { 629 $template->set_var ('standard_is_checked', 'checked="checked"'); 630 $template->set_var ('extended_is_checked', ''); 631 } else { 632 $template->set_var ('standard_is_checked', ''); 633 $template->set_var ('extended_is_checked', 'checked="checked"'); 634 } 635 636 $template->parse ('output', 'editor'); 637 $retval .= $template->finish ($template->get_var ('output')); 638 639 $retval .= COM_endBlock (COM_getBlockTemplate ('_admin_block', 'footer')); 640 $retval .= COM_siteFooter (); 641 642 return $retval; 643 } 644 645 /** 646 * Save information of a weblog directory service 647 * 648 * @param int $pid ID of service or 0 for new entry 649 * @param string $name name of the service 650 * @param string $site_url Homepage URL of the service 651 * @param string $ping_url URL to ping at the service 652 * @param string $method method used for the ping 653 * @param string $enabled 'on' when enabled 654 * @return string HTML redirect or service editor 655 * 656 */ 657 function saveService ($pid, $name, $site_url, $ping_url, $method, $enabled) 658 { 659 global $_CONF, $_TABLES, $LANG_TRB; 660 661 $enabled = ($enabled == 'on' ? 1 : 0); 662 if ($method == 'extended') { 663 $method = 'weblogUpdates.extendedPing'; 664 } else { 665 $method = 'weblogUpdates.ping'; 666 } 667 668 $name = strip_tags (COM_stripslashes ($name)); 669 $site_url = strip_tags (COM_stripslashes ($site_url)); 670 $ping_url = strip_tags (COM_stripslashes ($ping_url)); 671 672 $errormsg = ''; 673 if (empty ($name)) { 674 $errormsg = $LANG_TRB['error_site_name']; 675 } else { 676 // all URLs must start with http: or https: 677 $parts = explode (':', $site_url); 678 if (($parts[0] != 'http') && ($parts[0] != 'https')) { 679 $errormsg = $LANG_TRB['error_site_url']; 680 } else { 681 $parts = explode (':', $ping_url); 682 if (($parts[0] != 'http') && ($parts[0] != 'https')) { 683 $errormsg = $LANG_TRB['error_ping_url']; 684 } 685 } 686 } 687 688 if (!empty ($errormsg)) { 689 return editServiceForm ($pid, $errormsg, $name, $site_url, $ping_url, 690 $method, $enabled); 691 } 692 693 $name = addslashes ($name); 694 $site_url = addslashes ($site_url); 695 $ping_url = addslashes ($ping_url); 696 697 if ($pid > 0) { 698 DB_save ($_TABLES['pingservice'], 699 'pid,name,site_url,ping_url,method,is_enabled', 700 "'$pid','$name','$site_url','$ping_url','$method','$enabled'"); 701 } else { 702 DB_save ($_TABLES['pingservice'], 703 'name,site_url,ping_url,method,is_enabled', 704 "'$name','$site_url','$ping_url','$method','$enabled'"); 705 } 706 707 return COM_refresh ($_CONF['site_admin_url'] 708 . '/trackback.php?mode=listservice&msg=65'); 709 } 710 711 /** 712 * Toggle status of a ping service from enabled to disabled and back 713 * 714 * @param int $pid ID of the service 715 * @return void 716 * 717 */ 718 function changeServiceStatus ($pid) 719 { 720 global $_TABLES; 721 722 $pid = addslashes (COM_applyFilter ($pid, true)); 723 if (!empty ($pid)) { 724 $is_enabled = 1; 725 if (DB_getItem ($_TABLES['pingservice'], 'is_enabled', "pid = '$pid'")) { 726 $is_enabled = 0; 727 } 728 DB_query ("UPDATE {$_TABLES['pingservice']} SET is_enabled = '$is_enabled' WHERE pid = '$pid'"); 729 } 730 } 731 732 /** 733 * Display a note about how trackbacks are supposed to be used 734 * 735 */ 736 function freshTrackback () 737 { 738 global $_CONF, $LANG_TRB; 739 740 $retval = ''; 741 742 $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=fresh'; 743 744 $retval .= COM_startBlock ($LANG_TRB['trackback'], 745 $_CONF['site_url'] . '/docs/trackback.html', 746 COM_getBlockTemplate ('_admin_block', 'header')); 747 $retval .= sprintf ($LANG_TRB['trackback_note'], $freshurl); 748 $retval .= COM_endBlock (); 749 750 return $retval; 751 } 752 753 /** 754 * Display a note about how pingbacks are supposed to be used 755 * 756 */ 757 function freshPingback () 758 { 759 global $_CONF, $LANG_TRB; 760 761 $retval = ''; 762 763 $freshurl = $_CONF['site_admin_url'] . '/trackback.php?mode=freepb'; 764 765 $retval .= COM_startBlock ($LANG_TRB['pingback'], 766 $_CONF['site_url'] . '/docs/trackback.html', 767 COM_getBlockTemplate ('_admin_block', 'header')); 768 $retval .= sprintf ($LANG_TRB['pingback_note'], $freshurl); 769 $retval .= COM_endBlock (); 770 771 return $retval; 772 } 773 774 775 // MAIN 776 $display = ''; 777 $mode = ''; 778 if ($_CONF['ping_enabled'] && isset ($_POST['serviceChange'])) { 779 changeServiceStatus ($_POST['serviceChange']); 780 } 781 782 if (isset ($_POST['mode']) && is_array ($_POST['mode'])) { 783 $mode = $_POST['mode']; 784 if (isset ($mode[0])) { 785 $mode = 'send'; 786 } else if (isset ($mode[1])) { 787 $mode = 'preview'; 788 } else if (isset ($mode[2])) { 789 $mode = 'sendpingback'; 790 } else { 791 $mode = ''; 792 } 793 } else if (isset ($_POST['servicemode']) && is_array ($_POST['servicemode'])) { 794 $mode = $_POST['servicemode']; 795 if (isset ($mode[0])) { 796 $mode = 'saveservice'; 797 } else if (isset ($mode[2])) { 798 $mode = 'deleteservice'; 799 } else { // $mode[1], Cancel 800 $mode = ''; 801 } 802 } else { 803 if (isset($_REQUEST['mode'])) { 804 $mode = COM_applyFilter ($_REQUEST['mode']); 805 } 806 807 } 808 809 // sanity check for modes, depending on enabled features ... 810 if (!$_CONF['ping_enabled']) { 811 if (($mode == 'deleteservice') || ($mode == 'saveservice') || 812 ($mode == 'editservice')) { 813 $mode = ''; 814 } 815 } 816 if (!$_CONF['trackback_enabled']) { 817 if (($mode == 'send') || ($mode == 'new') || ($mode == 'pretrackback') || 818 ($mode == 'autodetect') || ($mode == 'preview')) { 819 $mode = ''; 820 } 821 } 822 if (!$_CONF['pingback_enabled']) { 823 if ($mode == 'pingback') { 824 $mode = ''; 825 } 826 } 827 if (!$_CONF['trackback_enabled'] && !$_CONF['pingback_enabled']) { 828 if ($mode == 'delete') { 829 $mode = ''; 830 } 831 } 832 833 // default action depends on which features are enabled ... 834 if (empty ($mode)) { 835 if ($_CONF['ping_enabled']) { 836 $mode = 'listservice'; 837 } else if ($_CONF['trackback_enabled']) { 838 $mode = 'fresh'; 839 } else if ($_CONF['pinback_enabled']) { 840 $mode = 'freepb'; 841 } 842 } 843 844 if ($mode == 'delete') { 845 $cid = COM_applyFilter ($_REQUEST['cid'], true); 846 if ($cid > 0) { 847 $display = deleteTrackbackComment ($cid); 848 } else { 849 $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 850 } 851 } else if ($mode == 'send') { 852 $target = COM_applyFilter ($_POST['target']); 853 $url = COM_applyFilter ($_POST['url']); 854 $title = COM_stripslashes ($_POST['title']); 855 $excerpt = COM_stripslashes ($_POST['excerpt']); 856 $blog = COM_stripslashes ($_POST['blog_name']); 857 858 if (empty ($target)) { 859 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']); 860 $display .= showTrackbackMessage ($LANG_TRB['target_missing'], 861 $LANG_TRB['target_required']); 862 $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); 863 } else if (empty ($url)) { 864 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']); 865 $display .= showTrackbackMessage ($LANG_TRB['url_missing'], 866 $LANG_TRB['url_required']); 867 $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); 868 } else { 869 // prepare for send 870 $send_title = TRB_filterTitle ($title); 871 $send_excerpt = TRB_filterExcerpt ($excerpt); 872 $send_blog = TRB_filterBlogname ($blog); 873 874 $result = TRB_sendTrackbackPing ($target, $url, $send_title, 875 $send_excerpt, $send_blog); 876 877 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']); 878 if ($result === true) { 879 $display .= COM_showMessage (64); 880 $display .= trackback_editor (); 881 } else { 882 $message = '<p>' . $LANG_TRB['send_error_details'] . '<br>' 883 . '<span class="warningsmall">' 884 . htmlspecialchars ($result) . '</span></p>'; 885 $display .= showTrackbackMessage ($LANG_TRB['send_error'], $message); 886 887 // display editor with the same contents again 888 $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); 889 } 890 } 891 $display .= COM_siteFooter (); 892 } else if ($mode == 'new') { 893 $type = COM_applyFilter ($_REQUEST['type']); 894 if (empty ($type)) { 895 $type = 'article'; 896 } 897 $id = COM_applyFilter ($_REQUEST['id']); 898 if (!empty ($id)) { 899 list ($url, $title, $excerpt) = getItemInfo ($type, $id, 900 'url,title,excerpt'); 901 $excerpt = trim (strip_tags ($excerpt)); 902 $blog = TRB_filterBlogname ($_CONF['site_name']); 903 904 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']) 905 . trackback_editor ($target, $url, $title, $excerpt, $blog) 906 . COM_siteFooter (); 907 } else { 908 $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 909 } 910 } else if ($mode == 'pingback') { 911 $type = COM_applyFilter ($_REQUEST['type']); 912 if (empty ($type)) { 913 $type = 'article'; 914 } 915 $id = COM_applyFilter ($_REQUEST['id']); 916 if (!empty ($id)) { 917 $display .= COM_siteHeader ('menu', $LANG_TRB['pingback']) 918 . COM_startBlock ($LANG_TRB['pingback_results']) 919 . sendPingbacks ($type, $id) 920 . COM_endBlock () 921 . COM_siteFooter (); 922 } else { 923 $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 924 } 925 } else if ($mode == 'sendall') { 926 $id = COM_applyFilter ($_REQUEST['id']); 927 if (empty ($id)) { 928 echo COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 929 exit; 930 } 931 $type = ''; 932 if (isset ($_REQUEST['type'])) { 933 $type = COM_applyFilter ($_REQUEST['type']); 934 } 935 if (empty ($type)) { 936 $type = 'article'; 937 } 938 939 $pingback_sent = isset ($_REQUEST['pingback_sent']); 940 $ping_sent = isset ($_REQUEST['ping_sent']); 941 $trackback_sent = isset ($_REQUEST['trackback_sent']); 942 943 $pingresult = ''; 944 if (isset ($_POST['what']) && is_array ($_POST['what'])) { 945 $what = $_POST['what']; 946 if (isset ($what[0])) { // Pingback 947 $pingresult = sendPingbacks ($type, $id); 948 $pingback_sent = true; 949 } else if (isset ($what[1])) { // Ping 950 $pingresult = sendPings ($type, $id); 951 $ping_sent = true; 952 } else if (isset ($what[2])) { // Trackback 953 $url = $_CONF['site_admin_url'] 954 . '/trackback.php?mode=pretrackback&id=' . $id; 955 if ($type != 'article') { 956 $url .= '&type=' . $type; 957 } 958 echo COM_refresh ($url); 959 exit; 960 } 961 } 962 963 $title = getItemInfo ($type, $id, 'title'); 964 965 $display .= COM_siteHeader ('menu', $LANG_TRB['send_pings']); 966 $display .= COM_startBlock (sprintf ($LANG_TRB['send_pings_for'], $title)); 967 968 $template = new Template ($_CONF['path_layout'] . 'admin/trackback'); 969 $template->set_file (array ('form' => 'pingform.thtml')); 970 $template->set_var ('site_url', $_CONF['site_url']); 971 $template->set_var ('site_admin_url', $_CONF['site_admin_url']); 972 $template->set_var ('layout_url', $_CONF['layout_url']); 973 $template->set_var ('php_self', $_CONF['site_admin_url'] 974 . '/trackback.php'); 975 $template->set_var ('lang_may_take_a_while', $LANG_TRB['may_take_a_while']); 976 $template->set_var ('lang_ping_explain', $LANG_TRB['ping_all_explain']); 977 978 $template->set_var ('ping_results', $pingresult); 979 980 if ($_CONF['pingback_enabled']) { 981 if (!$pingback_sent) { 982 $template->set_var ('lang_pingback_button', 983 $LANG_TRB['pingback_button']); 984 $template->set_var ('lang_pingback_short', 985 $LANG_TRB['pingback_short']); 986 $button = '<input type="submit" name="what[0]" value="' 987 . $LANG_TRB['pingback_button'] . '">'; 988 $template->set_var ('pingback_button', $button); 989 } 990 } else { 991 $template->set_var ('pingback_button', $LANG_TRB['pingback_disabled']); 992 } 993 if ($_CONF['ping_enabled']) { 994 if (!$ping_sent) { 995 $template->set_var ('lang_ping_button', $LANG_TRB['ping_button']); 996 $template->set_var ('lang_ping_short', $LANG_TRB['ping_short']); 997 $button = '<input type="submit" name="what[1]" value="' 998 . $LANG_TRB['ping_button'] . '">'; 999 $template->set_var ('ping_button', $button); 1000 } 1001 } else { 1002 $template->set_var ('ping_button', $LANG_TRB['ping_disabled']); 1003 } 1004 if ($_CONF['trackback_enabled']) { 1005 if (!$trackback_sent) { 1006 $template->set_var ('lang_trackback_button', 1007 $LANG_TRB['trackback_button']); 1008 $template->set_var ('lang_trackback_short', 1009 $LANG_TRB['trackback_short']); 1010 $button = '<input type="submit" name="what[2]" value="' 1011 . $LANG_TRB['trackback_button'] . '">'; 1012 $template->set_var ('trackback_button', $button); 1013 } 1014 } else { 1015 $template->set_var ('trackback_button', $LANG_TRB['trackback_disabled']); 1016 } 1017 1018 $hidden = ''; 1019 if ($pingback_sent) { 1020 $hidden .= '<input type="hidden" name="pingback_sent" value="1">'; 1021 } 1022 if ($ping_sent) { 1023 $hidden .= '<input type="hidden" name="ping_sent" value="1">'; 1024 } 1025 if ($trackback_sent) { 1026 $hidden .= '<input type="hidden" name="trackback_sent" value="1">'; 1027 } 1028 $hidden .= '<input type="hidden" name="id" value="' . $id . '">'; 1029 $hidden .= '<input type="hidden" name="type" value="' . $type . '">'; 1030 $hidden .= '<input type="hidden" name="mode" value="sendall">'; 1031 $template->set_var ('hidden_input_fields', $hidden); 1032 1033 $template->parse ('output', 'form'); 1034 $display .= $template->finish ($template->get_var ('output')); 1035 1036 $display .= COM_endBlock (); 1037 $display .= COM_siteFooter (); 1038 } else if ($mode == 'pretrackback') { 1039 $id = COM_applyFilter ($_REQUEST['id']); 1040 if (empty ($id)) { 1041 echo COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 1042 exit; 1043 } 1044 $type = ''; 1045 if (isset ($_REQUEST['type'])) { 1046 $type = COM_applyFilter ($_REQUEST['type']); 1047 } 1048 if (empty ($type)) { 1049 $type = 'article'; 1050 } 1051 1052 $fulltext = getItemInfo ($type, $id, 'description'); 1053 1054 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']) 1055 . COM_startBlock ($LANG_TRB['select_url'], $_CONF['site_url'] 1056 . '/docs/trackback.html#trackback') 1057 . prepareAutodetect ($type, $id, $fulltext) 1058 . COM_endBlock () 1059 . COM_siteFooter (); 1060 } else if ($mode == 'autodetect') { 1061 $id = COM_applyFilter ($_REQUEST['id']); 1062 $url = $_REQUEST['url']; 1063 if (empty ($id) || empty ($url)) { 1064 echo COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 1065 exit; 1066 } 1067 $type = ''; 1068 if (isset ($_REQUEST['type'])) { 1069 $type = COM_applyFilter ($_REQUEST['type']); 1070 } 1071 if (empty ($type)) { 1072 $type = 'article'; 1073 } 1074 1075 $trackbackUrl = TRB_detectTrackbackUrl ($url); 1076 1077 list ($url, $title, $excerpt) = getItemInfo ($type, $id, 1078 'url,title,excerpt'); 1079 $excerpt = trim (strip_tags ($excerpt)); 1080 $blog = TRB_filterBlogname ($_CONF['site_name']); 1081 1082 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']); 1083 if ($trackbackUrl === false) { 1084 $display .= showTrackbackMessage ($LANG_TRB['not_found'], 1085 $LANG_TRB['autodetect_failed']); 1086 } 1087 $display .= trackback_editor ($trackbackUrl, $url, $title, $excerpt, $blog) 1088 . COM_siteFooter (); 1089 } else if (($mode == 'fresh') || ($mode == 'preview')) { 1090 $display .= COM_siteHeader ('menu', $LANG_TRB['trackback']); 1091 1092 if (isset ($_REQUEST['msg'])) { 1093 $msg = COM_applyFilter ($_REQUEST['msg'], true); 1094 if ($msg > 0) { 1095 $display .= COM_showMessage ($msg); 1096 } 1097 } 1098 1099 $target = ''; 1100 if (isset ($_REQUEST['target'])) { 1101 $target = COM_applyFilter ($_REQUEST['target']); 1102 } 1103 $url = ''; 1104 if (isset ($_REQUEST['url'])) { 1105 $url = COM_applyFilter ($_REQUEST['url']); 1106 } 1107 $title = ''; 1108 if (isset ($_REQUEST['title'])) { 1109 $title = COM_stripslashes ($_REQUEST['title']); 1110 } 1111 $excerpt = ''; 1112 if (isset ($_REQUEST['excerpt'])) { 1113 $excerpt = COM_stripslashes ($_REQUEST['excerpt']); 1114 } 1115 $blog = ''; 1116 if (isset ($_REQUEST['blog_name'])) { 1117 $blog = COM_stripslashes ($_REQUEST['blog_name']); 1118 } 1119 1120 if (isset ($_REQUEST['id']) && isset ($_REQUEST['type'])) { 1121 $id = COM_applyFilter ($_REQUEST['id']); 1122 $type = COM_applyFilter ($_REQUEST['type']); 1123 if (!empty ($id) && !empty ($type)) { 1124 list ($newurl, $newtitle, $newexcerpt) = 1125 getItemInfo ($type, $id, 'url,title,excerpt'); 1126 $newexcerpt = trim (strip_tags ($newexcerpt)); 1127 1128 if (empty ($url) && !empty ($newurl)) { 1129 $url = $newurl; 1130 } 1131 if (empty ($title) && !empty ($newtitle)) { 1132 $title = $newtitle; 1133 } 1134 if (empty ($newexcerpt) && !empty ($newexcerpt)) { 1135 $excerpt = $newexcerpt; 1136 } 1137 1138 if (empty ($blog)) { 1139 $blog = TRB_filterBlogname ($_CONF['site_name']); 1140 } 1141 } 1142 } 1143 1144 if (($mode == 'preview') && empty ($url)) { 1145 $display .= showTrackbackMessage ($LANG_TRB['url_missing'], 1146 $LANG_TRB['url_required']); 1147 } 1148 1149 $display .= trackback_editor ($target, $url, $title, $excerpt, $blog); 1150 1151 $display .= COM_siteFooter (); 1152 } else if ($mode == 'deleteservice') { 1153 $pid = COM_applyFilter ($_POST['service_id'], true); 1154 if ($pid > 0) { 1155 DB_delete ($_TABLES['pingservice'], 'pid', $pid); 1156 $display = COM_refresh ($_CONF['site_admin_url'] 1157 . '/trackback.php?mode=listservice&msg=66'); 1158 } else { 1159 $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 1160 } 1161 } else if ($mode == 'saveservice') { 1162 $display .= saveService (COM_applyFilter ($_POST['service_id'], true), 1163 $_POST['service_name'], $_POST['service_site_url'], 1164 $_POST['service_ping_url'], $_POST['method'], 1165 $_POST['is_enabled']); 1166 1167 } else if ($mode == 'editservice') { 1168 $service_id = 0; 1169 if (isset ($_GET['service_id'])) { 1170 $service_id = COM_applyFilter ($_GET['service_id'], true); 1171 } 1172 $pid = COM_applyFilter ($service_id, true); 1173 1174 $display .= editServiceForm ($pid); 1175 } else if ($mode == 'listservice') { 1176 $display .= COM_siteHeader ('menu', $LANG_TRB['services_headline']); 1177 if (isset ($_REQUEST['msg'])) { 1178 $display .= COM_showMessage (COM_applyFilter ($_REQUEST['msg'], true)); 1179 } 1180 $display .= listServices (); 1181 $display .= COM_siteFooter(); 1182 } else if ($mode == 'freepb') { 1183 $display .= COM_siteHeader ('menu', $LANG_TRB['pingback']); 1184 $display .= pingbackForm (); 1185 $display .= COM_siteFooter(); 1186 } else if ($mode == 'sendpingback') { 1187 $target = COM_applyFilter ($_POST['target']); 1188 $display .= COM_siteHeader ('menu', $LANG_TRB['pingback']); 1189 if (empty ($target)) { 1190 $display .= showTrackbackMessage ($LANG_TRB['pbtarget_missing'], 1191 $LANG_TRB['pbtarget_required']); 1192 } else { 1193 $result = PNB_sendPingback ($_CONF['site_url'], $target); 1194 if (empty ($result)) { 1195 $display .= COM_showMessage (74); 1196 $target = ''; 1197 } else { 1198 $message = '<p>' . $LANG_TRB['pb_error_details'] . '<br>' 1199 . '<span class="warningsmall">' 1200 . htmlspecialchars ($result) . '</span></p>'; 1201 $display .= showTrackbackMessage ($LANG_TRB['send_error'], $message); 1202 } 1203 } 1204 $display .= pingbackForm ($target); 1205 $display .= COM_siteFooter (); 1206 } else { 1207 $display = COM_refresh ($_CONF['site_admin_url'] . '/index.php'); 1208 } 1209 1210 echo $display; 1211 1212 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Wed Nov 21 12:27:40 2007 | par Balluche grâce à PHPXref 0.7 |
|