[ Index ] |
PHP Cross Reference of phpBB-3.2.11-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * This file is part of the phpBB Forum Software package. 5 * 6 * @copyright (c) phpBB Limited <https://www.phpbb.com> 7 * @license GNU General Public License, version 2 (GPL-2.0) 8 * 9 * For full copyright and license information, please see 10 * the docs/CREDITS.txt file. 11 * 12 */ 13 14 /** 15 * @ignore 16 */ 17 if (!defined('IN_PHPBB')) 18 { 19 exit; 20 } 21 22 /** 23 * BBCode class 24 */ 25 class bbcode 26 { 27 var $bbcode_uid = ''; 28 var $bbcode_bitfield = ''; 29 var $bbcode_cache = array(); 30 var $bbcode_template = array(); 31 32 var $bbcodes = array(); 33 34 var $template_bitfield; 35 36 /** 37 * Constructor 38 */ 39 function __construct($bitfield = '') 40 { 41 $this->bbcode_set_bitfield($bitfield); 42 } 43 44 /** 45 * Init bbcode cache entries if bitfield is specified 46 * 47 * @param string $bbcode_bitfield The bbcode bitfield 48 */ 49 function bbcode_set_bitfield($bitfield = '') 50 { 51 if ($bitfield) 52 { 53 $this->bbcode_bitfield = $bitfield; 54 $this->bbcode_cache_init(); 55 } 56 } 57 58 /** 59 * Second pass bbcodes 60 */ 61 function bbcode_second_pass(&$message, $bbcode_uid = '', $bbcode_bitfield = false) 62 { 63 if ($bbcode_uid) 64 { 65 $this->bbcode_uid = $bbcode_uid; 66 } 67 68 if ($bbcode_bitfield !== false) 69 { 70 $this->bbcode_bitfield = $bbcode_bitfield; 71 72 // Init those added with a new bbcode_bitfield (already stored codes will not get parsed again) 73 $this->bbcode_cache_init(); 74 } 75 76 if (!$this->bbcode_bitfield) 77 { 78 // Remove the uid from tags that have not been transformed into HTML 79 if ($this->bbcode_uid) 80 { 81 $message = str_replace(':' . $this->bbcode_uid, '', $message); 82 } 83 84 return; 85 } 86 87 $str = array('search' => array(), 'replace' => array()); 88 $preg = array('search' => array(), 'replace' => array()); 89 90 $bitfield = new bitfield($this->bbcode_bitfield); 91 $bbcodes_set = $bitfield->get_all_set(); 92 93 $undid_bbcode_specialchars = false; 94 foreach ($bbcodes_set as $bbcode_id) 95 { 96 if (!empty($this->bbcode_cache[$bbcode_id])) 97 { 98 foreach ($this->bbcode_cache[$bbcode_id] as $type => $array) 99 { 100 foreach ($array as $search => $replace) 101 { 102 ${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search); 103 ${$type}['replace'][] = $replace; 104 } 105 106 if (count($str['search'])) 107 { 108 $message = str_replace($str['search'], $str['replace'], $message); 109 $str = array('search' => array(), 'replace' => array()); 110 } 111 112 if (count($preg['search'])) 113 { 114 // we need to turn the entities back into their original form to allow the 115 // search patterns to work properly 116 if (!$undid_bbcode_specialchars) 117 { 118 $message = str_replace(array(':', '.'), array(':', '.'), $message); 119 $undid_bbcode_specialchars = true; 120 } 121 122 foreach ($preg['search'] as $key => $search) 123 { 124 if (is_callable($preg['replace'][$key])) 125 { 126 $message = preg_replace_callback($search, $preg['replace'][$key], $message); 127 } 128 else 129 { 130 $message = preg_replace($search, $preg['replace'][$key], $message); 131 } 132 } 133 134 $preg = array('search' => array(), 'replace' => array()); 135 } 136 } 137 } 138 } 139 140 // Remove the uid from tags that have not been transformed into HTML 141 $message = str_replace(':' . $this->bbcode_uid, '', $message); 142 } 143 144 /** 145 * Init bbcode cache 146 * 147 * requires: $this->bbcode_bitfield 148 * sets: $this->bbcode_cache with bbcode templates needed for bbcode_bitfield 149 */ 150 function bbcode_cache_init() 151 { 152 global $user, $phpbb_dispatcher, $phpbb_extension_manager, $phpbb_container, $phpbb_filesystem; 153 154 if (empty($this->template_filename)) 155 { 156 $this->template_bitfield = new bitfield($user->style['bbcode_bitfield']); 157 158 $template = new \phpbb\template\twig\twig( 159 $phpbb_container->get('path_helper'), 160 $phpbb_container->get('config'), 161 new \phpbb\template\context(), 162 new \phpbb\template\twig\environment( 163 $phpbb_container->get('config'), 164 $phpbb_container->get('filesystem'), 165 $phpbb_container->get('path_helper'), 166 $phpbb_container->getParameter('core.cache_dir'), 167 $phpbb_container->get('ext.manager'), 168 new \phpbb\template\twig\loader( 169 $phpbb_filesystem 170 ) 171 ), 172 $phpbb_container->getParameter('core.cache_dir'), 173 $phpbb_container->get('user'), 174 $phpbb_container->get('template.twig.extensions.collection'), 175 $phpbb_extension_manager 176 ); 177 178 $template->set_style(); 179 $template->set_filenames(array('bbcode.html' => 'bbcode.html')); 180 $this->template_filename = $template->get_source_file_for_handle('bbcode.html'); 181 } 182 183 $bbcode_ids = $rowset = $sql = array(); 184 185 $bitfield = new bitfield($this->bbcode_bitfield); 186 $bbcodes_set = $bitfield->get_all_set(); 187 188 foreach ($bbcodes_set as $bbcode_id) 189 { 190 if (isset($this->bbcode_cache[$bbcode_id])) 191 { 192 // do not try to re-cache it if it's already in 193 continue; 194 } 195 $bbcode_ids[] = $bbcode_id; 196 197 if ($bbcode_id > NUM_CORE_BBCODES) 198 { 199 $sql[] = $bbcode_id; 200 } 201 } 202 203 if (count($sql)) 204 { 205 global $db; 206 207 $sql = 'SELECT * 208 FROM ' . BBCODES_TABLE . ' 209 WHERE ' . $db->sql_in_set('bbcode_id', $sql); 210 $result = $db->sql_query($sql, 3600); 211 212 while ($row = $db->sql_fetchrow($result)) 213 { 214 // To circumvent replacing newlines with <br /> for the generated html, 215 // we use carriage returns here. They are later changed back to newlines 216 $row['bbcode_tpl'] = str_replace("\n", "\r", $row['bbcode_tpl']); 217 $row['second_pass_replace'] = str_replace("\n", "\r", $row['second_pass_replace']); 218 219 $rowset[$row['bbcode_id']] = $row; 220 } 221 $db->sql_freeresult($result); 222 } 223 224 foreach ($bbcode_ids as $bbcode_id) 225 { 226 switch ($bbcode_id) 227 { 228 case BBCODE_ID_QUOTE: 229 $this->bbcode_cache[$bbcode_id] = array( 230 'str' => array( 231 '[/quote:$uid]' => $this->bbcode_tpl('quote_close', $bbcode_id) 232 ), 233 'preg' => array( 234 '#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#is' => function ($match) { 235 if (!isset($match[2])) 236 { 237 $match[2] = ''; 238 } 239 240 return $this->bbcode_second_pass_quote($match[1], $match[2]); 241 }, 242 ) 243 ); 244 break; 245 246 case BBCODE_ID_B: 247 $this->bbcode_cache[$bbcode_id] = array( 248 'str' => array( 249 '[b:$uid]' => $this->bbcode_tpl('b_open', $bbcode_id), 250 '[/b:$uid]' => $this->bbcode_tpl('b_close', $bbcode_id), 251 ) 252 ); 253 break; 254 255 case BBCODE_ID_I: 256 $this->bbcode_cache[$bbcode_id] = array( 257 'str' => array( 258 '[i:$uid]' => $this->bbcode_tpl('i_open', $bbcode_id), 259 '[/i:$uid]' => $this->bbcode_tpl('i_close', $bbcode_id), 260 ) 261 ); 262 break; 263 264 case BBCODE_ID_URL: 265 $this->bbcode_cache[$bbcode_id] = array( 266 'preg' => array( 267 '#\[url:$uid\]((.*?))\[/url:$uid\]#s' => $this->bbcode_tpl('url', $bbcode_id), 268 '#\[url=([^\[]+?):$uid\](.*?)\[/url:$uid\]#s' => $this->bbcode_tpl('url', $bbcode_id), 269 ) 270 ); 271 break; 272 273 case BBCODE_ID_IMG: 274 if ($user->optionget('viewimg')) 275 { 276 $this->bbcode_cache[$bbcode_id] = array( 277 'preg' => array( 278 '#\[img:$uid\](.*?)\[/img:$uid\]#s' => $this->bbcode_tpl('img', $bbcode_id), 279 ) 280 ); 281 } 282 else 283 { 284 $this->bbcode_cache[$bbcode_id] = array( 285 'preg' => array( 286 '#\[img:$uid\](.*?)\[/img:$uid\]#s' => str_replace('$2', '[ img ]', $this->bbcode_tpl('url', $bbcode_id, true)), 287 ) 288 ); 289 } 290 break; 291 292 case BBCODE_ID_SIZE: 293 $this->bbcode_cache[$bbcode_id] = array( 294 'preg' => array( 295 '#\[size=([\-\+]?\d+):$uid\](.*?)\[/size:$uid\]#s' => $this->bbcode_tpl('size', $bbcode_id), 296 ) 297 ); 298 break; 299 300 case BBCODE_ID_COLOR: 301 $this->bbcode_cache[$bbcode_id] = array( 302 'preg' => array( 303 '!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+):$uid\](.*?)\[/color:$uid\]!is' => $this->bbcode_tpl('color', $bbcode_id), 304 ) 305 ); 306 break; 307 308 case BBCODE_ID_U: 309 $this->bbcode_cache[$bbcode_id] = array( 310 'str' => array( 311 '[u:$uid]' => $this->bbcode_tpl('u_open', $bbcode_id), 312 '[/u:$uid]' => $this->bbcode_tpl('u_close', $bbcode_id), 313 ) 314 ); 315 break; 316 317 case BBCODE_ID_CODE: 318 $this->bbcode_cache[$bbcode_id] = array( 319 'preg' => array( 320 '#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#is' => function ($match) { 321 return $this->bbcode_second_pass_code($match[1], $match[2]); 322 }, 323 ) 324 ); 325 break; 326 327 case BBCODE_ID_LIST: 328 $this->bbcode_cache[$bbcode_id] = array( 329 'preg' => array( 330 '#(\[\/?(list|\*):[mou]?:?$uid\])[\n]{1}#' => "\$1", 331 '#(\[list=([^\[]+):$uid\])[\n]{1}#' => "\$1", 332 '#\[list=([^\[]+):$uid\]#' => function ($match) { 333 return $this->bbcode_list($match[1]); 334 }, 335 ), 336 'str' => array( 337 '[list:$uid]' => $this->bbcode_tpl('ulist_open_default', $bbcode_id), 338 '[/list:u:$uid]' => $this->bbcode_tpl('ulist_close', $bbcode_id), 339 '[/list:o:$uid]' => $this->bbcode_tpl('olist_close', $bbcode_id), 340 '[*:$uid]' => $this->bbcode_tpl('listitem', $bbcode_id), 341 '[/*:$uid]' => $this->bbcode_tpl('listitem_close', $bbcode_id), 342 '[/*:m:$uid]' => $this->bbcode_tpl('listitem_close', $bbcode_id) 343 ), 344 ); 345 break; 346 347 case BBCODE_ID_EMAIL: 348 $this->bbcode_cache[$bbcode_id] = array( 349 'preg' => array( 350 '#\[email:$uid\]((.*?))\[/email:$uid\]#is' => $this->bbcode_tpl('email', $bbcode_id), 351 '#\[email=([^\[]+):$uid\](.*?)\[/email:$uid\]#is' => $this->bbcode_tpl('email', $bbcode_id) 352 ) 353 ); 354 break; 355 356 case BBCODE_ID_FLASH: 357 if ($user->optionget('viewflash')) 358 { 359 $this->bbcode_cache[$bbcode_id] = array( 360 'preg' => array( 361 '#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#' => $this->bbcode_tpl('flash', $bbcode_id), 362 ) 363 ); 364 } 365 else 366 { 367 $this->bbcode_cache[$bbcode_id] = array( 368 'preg' => array( 369 '#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#' => str_replace('$1', '$3', str_replace('$2', '[ flash ]', $this->bbcode_tpl('url', $bbcode_id, true))) 370 ) 371 ); 372 } 373 break; 374 375 case BBCODE_ID_ATTACH: 376 $this->bbcode_cache[$bbcode_id] = array( 377 'str' => array( 378 '[/attachment:$uid]' => $this->bbcode_tpl('inline_attachment_close', $bbcode_id) 379 ), 380 'preg' => array( 381 '#\[attachment=([0-9]+):$uid\]#' => $this->bbcode_tpl('inline_attachment_open', $bbcode_id) 382 ) 383 ); 384 break; 385 386 default: 387 if (isset($rowset[$bbcode_id])) 388 { 389 if ($this->template_bitfield->get($bbcode_id)) 390 { 391 // The bbcode requires a custom template to be loaded 392 if (!$bbcode_tpl = $this->bbcode_tpl($rowset[$bbcode_id]['bbcode_tag'], $bbcode_id)) 393 { 394 // For some reason, the required template seems not to be available, use the default template 395 $bbcode_tpl = (!empty($rowset[$bbcode_id]['second_pass_replace'])) ? $rowset[$bbcode_id]['second_pass_replace'] : $rowset[$bbcode_id]['bbcode_tpl']; 396 } 397 else 398 { 399 // In order to use templates with custom bbcodes we need 400 // to replace all {VARS} to corresponding backreferences 401 // Note that backreferences are numbered from bbcode_match 402 if (preg_match_all('/\{(URL|LOCAL_URL|EMAIL|TEXT|SIMPLETEXT|INTTEXT|IDENTIFIER|COLOR|NUMBER)[0-9]*\}/', $rowset[$bbcode_id]['bbcode_match'], $m)) 403 { 404 foreach ($m[0] as $i => $tok) 405 { 406 $bbcode_tpl = str_replace($tok, '$' . ($i + 1), $bbcode_tpl); 407 } 408 } 409 } 410 } 411 else 412 { 413 // Default template 414 $bbcode_tpl = (!empty($rowset[$bbcode_id]['second_pass_replace'])) ? $rowset[$bbcode_id]['second_pass_replace'] : $rowset[$bbcode_id]['bbcode_tpl']; 415 } 416 417 // Replace {L_*} lang strings 418 $bbcode_tpl = preg_replace_callback('/{L_([A-Z0-9_]+)}/', function ($match) use ($user) { 419 return (!empty($user->lang[$match[1]])) ? $user->lang($match[1]) : ucwords(strtolower(str_replace('_', ' ', $match[1]))); 420 }, $bbcode_tpl); 421 422 if (!empty($rowset[$bbcode_id]['second_pass_replace'])) 423 { 424 // The custom BBCode requires second-pass pattern replacements 425 $this->bbcode_cache[$bbcode_id] = array( 426 'preg' => array($rowset[$bbcode_id]['second_pass_match'] => $bbcode_tpl) 427 ); 428 } 429 else 430 { 431 $this->bbcode_cache[$bbcode_id] = array( 432 'str' => array($rowset[$bbcode_id]['second_pass_match'] => $bbcode_tpl) 433 ); 434 } 435 } 436 else 437 { 438 $this->bbcode_cache[$bbcode_id] = false; 439 } 440 break; 441 } 442 } 443 444 $bbcode_cache = $this->bbcode_cache; 445 $bbcode_bitfield = $this->bbcode_bitfield; 446 $bbcode_uid = $this->bbcode_uid; 447 448 /** 449 * Use this event to modify the bbcode_cache 450 * 451 * @event core.bbcode_cache_init_end 452 * @var array bbcode_cache The array of cached search and replace patterns of bbcodes 453 * @var string bbcode_bitfield The bbcode bitfield 454 * @var string bbcode_uid The bbcode uid 455 * @since 3.1.3-RC1 456 */ 457 $vars = array('bbcode_cache', 'bbcode_bitfield', 'bbcode_uid'); 458 extract($phpbb_dispatcher->trigger_event('core.bbcode_cache_init_end', compact($vars))); 459 460 $this->bbcode_cache = $bbcode_cache; 461 $this->bbcode_bitfield = $bbcode_bitfield; 462 $this->bbcode_uid = $bbcode_uid; 463 } 464 465 /** 466 * Return bbcode template 467 */ 468 function bbcode_tpl($tpl_name, $bbcode_id = -1, $skip_bitfield_check = false) 469 { 470 static $bbcode_hardtpl = array(); 471 if (empty($bbcode_hardtpl)) 472 { 473 global $user; 474 475 $bbcode_hardtpl = array( 476 'b_open' => '<span style="font-weight: bold">', 477 'b_close' => '</span>', 478 'i_open' => '<span style="font-style: italic">', 479 'i_close' => '</span>', 480 'u_open' => '<span style="text-decoration: underline">', 481 'u_close' => '</span>', 482 'img' => '<img src="$1" class="postimage" alt="' . $user->lang['IMAGE'] . '" />', 483 'size' => '<span style="font-size: $1%; line-height: normal">$2</span>', 484 'color' => '<span style="color: $1">$2</span>', 485 'email' => '<a href="mailto:$1">$2</a>' 486 ); 487 } 488 489 if ($bbcode_id != -1 && !$skip_bitfield_check && !$this->template_bitfield->get($bbcode_id)) 490 { 491 return (isset($bbcode_hardtpl[$tpl_name])) ? $bbcode_hardtpl[$tpl_name] : false; 492 } 493 494 if (empty($this->bbcode_template)) 495 { 496 if (($tpl = file_get_contents($this->template_filename)) === false) 497 { 498 trigger_error('Could not load bbcode template', E_USER_ERROR); 499 } 500 501 // replace \ with \\ and then ' with \'. 502 $tpl = str_replace('\\', '\\\\', $tpl); 503 $tpl = str_replace("'", "\'", $tpl); 504 505 // strip newlines and indent 506 $tpl = preg_replace("/\n[\n\r\s\t]*/", '', $tpl); 507 508 // Turn template blocks into PHP assignment statements for the values of $bbcode_tpl.. 509 $this->bbcode_template = array(); 510 511 // Capture the BBCode template matches 512 // Allow phpBB template or the Twig syntax 513 $matches = (preg_match_all('#<!-- BEGIN (.*?) -->(.*?)<!-- END (?:.*?) -->#', $tpl, $match)) ?: 514 preg_match_all('#{% for (.*?) in .*? %}(.*?){% endfor %}#s', $tpl, $match); 515 516 for ($i = 0; $i < $matches; $i++) 517 { 518 if (empty($match[1][$i])) 519 { 520 continue; 521 } 522 523 $this->bbcode_template[$match[1][$i]] = $this->bbcode_tpl_replace($match[1][$i], $match[2][$i]); 524 } 525 } 526 527 return (isset($this->bbcode_template[$tpl_name])) ? $this->bbcode_template[$tpl_name] : ((isset($bbcode_hardtpl[$tpl_name])) ? $bbcode_hardtpl[$tpl_name] : false); 528 } 529 530 /** 531 * Return bbcode template replacement 532 */ 533 function bbcode_tpl_replace($tpl_name, $tpl) 534 { 535 global $user; 536 537 static $replacements = array( 538 'quote_username_open' => array('{USERNAME}' => '$1'), 539 'color' => array('{COLOR}' => '$1', '{TEXT}' => '$2'), 540 'size' => array('{SIZE}' => '$1', '{TEXT}' => '$2'), 541 'img' => array('{URL}' => '$1'), 542 'flash' => array('{WIDTH}' => '$1', '{HEIGHT}' => '$2', '{URL}' => '$3'), 543 'url' => array('{URL}' => '$1', '{DESCRIPTION}' => '$2'), 544 'email' => array('{EMAIL}' => '$1', '{DESCRIPTION}' => '$2') 545 ); 546 547 $tpl = preg_replace_callback('/{L_([A-Z0-9_]+)}/', function ($match) use ($user) { 548 return (!empty($user->lang[$match[1]])) ? $user->lang($match[1]) : ucwords(strtolower(str_replace('_', ' ', $match[1]))); 549 }, $tpl); 550 551 if (!empty($replacements[$tpl_name])) 552 { 553 $tpl = strtr($tpl, $replacements[$tpl_name]); 554 } 555 556 return trim($tpl); 557 } 558 559 /** 560 * Second parse list bbcode 561 */ 562 function bbcode_list($type) 563 { 564 if ($type == '') 565 { 566 $tpl = 'ulist_open_default'; 567 $type = 'default'; 568 } 569 else if ($type == 'i') 570 { 571 $tpl = 'olist_open'; 572 $type = 'lower-roman'; 573 } 574 else if ($type == 'I') 575 { 576 $tpl = 'olist_open'; 577 $type = 'upper-roman'; 578 } 579 else if (preg_match('#^(disc|circle|square)$#i', $type)) 580 { 581 $tpl = 'ulist_open'; 582 $type = strtolower($type); 583 } 584 else if (preg_match('#^[a-z]$#', $type)) 585 { 586 $tpl = 'olist_open'; 587 $type = 'lower-alpha'; 588 } 589 else if (preg_match('#[A-Z]#', $type)) 590 { 591 $tpl = 'olist_open'; 592 $type = 'upper-alpha'; 593 } 594 else if (is_numeric($type)) 595 { 596 $tpl = 'olist_open'; 597 $type = 'decimal'; 598 } 599 else 600 { 601 $tpl = 'olist_open'; 602 $type = 'decimal'; 603 } 604 605 return str_replace('{LIST_TYPE}', $type, $this->bbcode_tpl($tpl)); 606 } 607 608 /** 609 * Second parse quote tag 610 */ 611 function bbcode_second_pass_quote($username, $quote) 612 { 613 // when using the /e modifier, preg_replace slashes double-quotes but does not 614 // seem to slash anything else 615 $quote = str_replace('\"', '"', $quote); 616 $username = str_replace('\"', '"', $username); 617 618 // remove newline at the beginning 619 if ($quote == "\n") 620 { 621 $quote = ''; 622 } 623 624 $quote = (($username) ? str_replace('$1', $username, $this->bbcode_tpl('quote_username_open')) : $this->bbcode_tpl('quote_open')) . $quote; 625 626 return $quote; 627 } 628 629 /** 630 * Second parse code tag 631 */ 632 function bbcode_second_pass_code($type, $code) 633 { 634 // when using the /e modifier, preg_replace slashes double-quotes but does not 635 // seem to slash anything else 636 $code = str_replace('\"', '"', $code); 637 638 switch ($type) 639 { 640 case 'php': 641 // Not the english way, but valid because of hardcoded syntax highlighting 642 if (strpos($code, '<span class="syntaxdefault"><br /></span>') === 0) 643 { 644 $code = substr($code, 41); 645 } 646 647 // no break; 648 649 default: 650 $code = str_replace("\t", ' ', $code); 651 $code = str_replace(' ', ' ', $code); 652 $code = str_replace(' ', ' ', $code); 653 $code = str_replace("\n ", "\n ", $code); 654 655 // keep space at the beginning 656 if (!empty($code) && $code[0] == ' ') 657 { 658 $code = ' ' . substr($code, 1); 659 } 660 661 // remove newline at the beginning 662 if (!empty($code) && $code[0] == "\n") 663 { 664 $code = substr($code, 1); 665 } 666 break; 667 } 668 669 $code = $this->bbcode_tpl('code_open') . $code . $this->bbcode_tpl('code_close'); 670 671 return $code; 672 } 673 674 /** 675 * Function to perform custom bbcode second pass by extensions 676 * can be used to assign bbcode pattern replacement 677 * Example: '#\[list=([^\[]+):$uid\]#e' => "\$this->bbcode_second_pass_by_extension('\$1')" 678 * 679 * Accepts variable number of parameters 680 * 681 * @return mixed Second pass result 682 * 683 * @deprecated 3.2.10 (To be removed 4.0.0) 684 */ 685 function bbcode_second_pass_by_extension() 686 { 687 global $phpbb_dispatcher; 688 689 $return = false; 690 $params_array = func_get_args(); 691 692 /** 693 * Event to perform bbcode second pass with 694 * the custom validating methods provided by extensions 695 * 696 * @event core.bbcode_second_pass_by_extension 697 * @var array params_array Array with the function parameters 698 * @var mixed return Second pass result to return 699 * 700 * @since 3.1.5-RC1 701 */ 702 $vars = array('params_array', 'return'); 703 extract($phpbb_dispatcher->trigger_event('core.bbcode_second_pass_by_extension', compact($vars))); 704 705 return $return; 706 } 707 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 11 20:33:01 2020 | Cross-referenced by PHPXref 0.7.1 |