admincp_plugins.php 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms'
  5. *
  6. * $Id: admincp_plugins.php 36186 2016-10-09 03:22:47Z nemohou $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. if(!empty($_GET['identifier']) && !empty($_GET['pmod'])) {
  13. $operation = 'config';
  14. }
  15. if($operation != 'config' && !$admincp->isfounder) {
  16. cpmsg('noaccess_isfounder', '', 'error');
  17. }
  18. $pluginid = !empty($_GET['pluginid']) ? intval($_GET['pluginid']) : 0;
  19. $anchor = !empty($_GET['anchor']) ? $_GET['anchor'] : '';
  20. $isplugindeveloper = isset($_G['config']['plugindeveloper']) && $_G['config']['plugindeveloper'] > 0;
  21. if(!empty($_GET['dir']) && !ispluginkey($_GET['dir'])) {
  22. unset($_GET['dir']);
  23. }
  24. require_once libfile('function/plugin');
  25. if(!$operation) {
  26. if(!submitcheck('submit')) {
  27. loadcache('plugin');
  28. shownav('plugin');
  29. showsubmenu('nav_plugins', array(
  30. array('plugins_list', 'plugins'),
  31. $isplugindeveloper ? array('plugins_add', 'plugins&operation=add', 0) : array(),
  32. array('cloudaddons_plugin_link', 'cloudaddons'),
  33. ), '<a href="'.ADMINSCRIPT.'?action=plugins&operation=upgradecheck" class="bold" style="float:right;padding-right:40px;">'.$lang['plugins_validator'].'</a>');
  34. showformheader('plugins');
  35. showtableheader('', 'psetting');
  36. $outputsubmit = false;
  37. $plugins = $addonids = array();
  38. $plugins = C::t('common_plugin')->fetch_all_data();
  39. if(empty($_G['cookie']['addoncheck_plugin'])) {
  40. foreach($plugins as $plugin) {
  41. $addonids[$plugin['pluginid']] = $plugin['identifier'].'.plugin';
  42. }
  43. $checkresult = dunserialize(cloudaddons_upgradecheck($addonids));
  44. savecache('addoncheck_plugin', $checkresult);
  45. dsetcookie('addoncheck_plugin', 1, 43200);
  46. } else {
  47. loadcache('addoncheck_plugin');
  48. $checkresult = $_G['cache']['addoncheck_plugin'];
  49. }
  50. $splitavailable = array();
  51. foreach($plugins as $plugin) {
  52. $addonid = $plugin['identifier'].'.plugin';
  53. $updateinfo = '';
  54. list(, $newver, $sysver) = explode(':', $checkresult[$addonid]);
  55. if($sysver && $sysver > $plugin['version']) {
  56. $updateinfo = '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$addonid.'" title="'.$lang['plugins_online_update'].'"><font color="red">'.$lang['plugins_find_newversion'].' '.$sysver.'</font></a>';
  57. } elseif($newver) {
  58. $updateinfo = '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$addonid.'" title="'.$lang['plugins_online_update'].'"><font color="red">'.$lang['plugins_find_newversion'].' '.$newver.'</font></a>';
  59. }
  60. $plugins[] = $plugin['identifier'];
  61. $hookexists = FALSE;
  62. $plugin['modules'] = dunserialize($plugin['modules']);
  63. $submenuitem = array();
  64. if(isset($_G['cache']['plugin'][$plugin['identifier']])) {
  65. $submenuitem[] = '<a href="'.ADMINSCRIPT.'?action=plugins&operation=config&do='.$plugin['pluginid'].'">'.$lang['config'].'</a>';
  66. }
  67. if(is_array($plugin['modules'])) {
  68. foreach($plugin['modules'] as $k => $module) {
  69. if($module['type'] == 11) {
  70. $hookorder = $module['displayorder'];
  71. $hookexists = $k;
  72. }
  73. if($module['type'] == 3) {
  74. $submenuitem[] = '<a href="'.ADMINSCRIPT.'?action=plugins&operation=config&do='.$plugin['pluginid'].'&identifier='.$plugin['identifier'].'&pmod='.$module['name'].($module['param'] ? '&'.$module['param'] : '').'">'.$module['menu'].'</a>';
  75. }
  76. if($module['type'] == 29) {
  77. $submenuitem[] = '<a href="'.$module['url'].'" target="_blank">'.$module['menu'].'</a>';
  78. }
  79. }
  80. }
  81. $outputsubmit = $hookexists !== FALSE && $plugin['available'] || $outputsubmit;
  82. $hl = !empty($_GET['hl']) && $_GET['hl'] == $plugin['pluginid'];
  83. $intro = $title = '';
  84. if($updateinfo) {
  85. $order = 'updatelist';
  86. } else {
  87. $order = $plugin['available'] ? 'open' : 'close';
  88. }
  89. if($plugin['pluginid'] == $_GET['hl']) {
  90. $order = 'hightlight';
  91. } else {
  92. if($plugin['available']) {
  93. if(empty($splitavailable[0])) {
  94. $title = '<tr><th colspan="15" class="partition">'.cplang('plugins_list_available').'</th></tr>';
  95. $splitavailable[0] = 1;
  96. }
  97. } else {
  98. if(empty($splitavailable[1])) {
  99. $title = '<tr><th colspan="15" class="partition">'.cplang('plugins_list_unavailable').'</th></tr>';
  100. $splitavailable[1] = 1;
  101. }
  102. }
  103. }
  104. $pluginlist[$order][$plugin['pluginid']] = $title.showtablerow('class="hover'.($hl ? ' hl' : '').'"', array('valign="top" style="width:45px"', 'valign="top"', 'align="right" valign="bottom" style="width:160px"'), array(
  105. '<img src="'.cloudaddons_pluginlogo_url($plugin['identifier']).'" onerror="this.src=\'static/image/admincp/plugin_logo.png\';this.onerror=null" width="40" height="40" align="left" />',
  106. '<span '.($plugin['available'] ? 'class="bold"' : 'class="bold light"').'>'.dhtmlspecialchars($plugin['name']).' '.dhtmlspecialchars($plugin['version']).'</span> <span class="sml">('.$plugin['identifier'].')</span>'.($updateinfo ? ' <b>'.$updateinfo.'</b>' : '').
  107. ($plugin['description'] || $plugin['modules']['extra']['intro'] ? '<a href="javascript:;" onclick="display(\'intro_'.$plugin['pluginid'].'\')" class="memo">'.cplang('plugins_home').'</a><div id="intro_'.$plugin['pluginid'].'" class="memo" style="display:none">'.$plugin['description'].'<br />'.$plugin['modules']['extra']['intro'].'</div>' : '').
  108. '<p><span class="light">'.($plugin['copyright'] ? cplang('author').': '.dhtmlspecialchars($plugin['copyright']).' | ' : '').
  109. '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$plugin['identifier'].'.plugin" target="_blank" title="'.$lang['cloudaddons_linkto'].'">'.$lang['plugins_visit'].'</a></span></p>'.
  110. '<p>'.implode(' | ', $submenuitem).'</p>',
  111. ($hookexists !== FALSE && $plugin['available'] ? $lang['display_order'].": <input class=\"txt num\" type=\"text\" id=\"displayorder_$plugin[pluginid]\" name=\"displayordernew[$plugin[pluginid]][$hookexists]\" value=\"$hookorder\" /><br /><br />" : '').
  112. (!$plugin['available'] ? "<a href=\"".ADMINSCRIPT."?action=plugins&operation=enable&pluginid=$plugin[pluginid]&formhash=".FORMHASH.(!empty($_GET['system']) ? '&system=1' : '')."\" class=\"bold\">$lang[enable]</a>&nbsp;&nbsp;" : "<a href=\"".ADMINSCRIPT."?action=plugins&operation=disable&pluginid=$plugin[pluginid]&formhash=".FORMHASH.(!empty($_GET['system']) ? '&system=1' : '')."\">$lang[closed]</a>&nbsp;&nbsp;").
  113. "<a href=\"".ADMINSCRIPT."?action=plugins&operation=upgrade&pluginid=$plugin[pluginid]\">$lang[plugins_config_upgrade]</a>&nbsp;&nbsp;".
  114. (!$plugin['modules']['system'] ? "<a href=\"".ADMINSCRIPT."?action=plugins&operation=delete&pluginid=$plugin[pluginid]\">$lang[plugins_config_uninstall]</a>&nbsp;&nbsp;" : '').
  115. ($isplugindeveloper && !$plugin['modules']['system'] ? "<a href=\"".ADMINSCRIPT."?action=plugins&operation=edit&pluginid=$plugin[pluginid]\">$lang[plugins_editlink]</a>&nbsp;&nbsp;" : ''),
  116. ), true);
  117. }
  118. ksort($pluginlist);
  119. $pluginlist = (array)$pluginlist['hightlight'] + (array)$pluginlist['updatelist'] + (array)$pluginlist['open'] + (array)$pluginlist['close'];
  120. echo implode('', $pluginlist);
  121. if(empty($_GET['system'])) {
  122. $plugindir = DISCUZ_ROOT.'./source/plugin';
  123. $pluginsdir = dir($plugindir);
  124. $newplugins = array();
  125. showtableheader('', 'psetting');
  126. $newlist = '';
  127. while($entry = $pluginsdir->read()) {
  128. if(!in_array($entry, array('.', '..')) && is_dir($plugindir.'/'.$entry) && !in_array($entry, $plugins)) {
  129. $entrydir = DISCUZ_ROOT.'./source/plugin/'.$entry;
  130. $d = dir($entrydir);
  131. $filemtime = filemtime($entrydir);
  132. $entrytitle = $entry;
  133. $entryversion = $entrycopyright = $importtxt = '';
  134. $extra = currentlang();
  135. $extra = $extra ? '_'.$extra : '';
  136. if(file_exists($entrydir.'/discuz_plugin_'.$entry.$extra.'.xml')) {
  137. $importtxt = @implode('', file($entrydir.'/discuz_plugin_'.$entry.$extra.'.xml'));
  138. } elseif(file_exists($entrydir.'/discuz_plugin_'.$entry.'.xml')) {
  139. $importtxt = @implode('', file($entrydir.'/discuz_plugin_'.$entry.'.xml'));
  140. }
  141. if($importtxt) {
  142. $pluginarray = getimportdata('Discuz! Plugin', 0, 1);
  143. if(!empty($pluginarray['plugin']['name'])) {
  144. $entrytitle = dhtmlspecialchars($pluginarray['plugin']['name']);
  145. $entryversion = dhtmlspecialchars($pluginarray['plugin']['version']);
  146. $entrycopyright = dhtmlspecialchars($pluginarray['plugin']['copyright']);
  147. }
  148. $file = $entrydir.'/'.$f;
  149. $newlist .= showtablerow('class="hover"', array('style="width:45px"', 'valign="top"', 'align="right" valign="bottom" style="width:160px"'), array(
  150. '<img src="'.cloudaddons_pluginlogo_url($entry).'" onerror="this.src=\'static/image/admincp/plugin_logo.png\';this.onerror=null" width="40" height="40" align="left" style="margin-right:5px" />',
  151. '<span class="bold light">'.$entrytitle.' '.$entryversion.($filemtime > TIMESTAMP - 86400 ? ' <font color="red">New!</font>' : '').'</span> <span class="sml light">('.$entry.')</span>'.
  152. '<p><span class="author">'.($entrycopyright ? cplang('author').': '.$entrycopyright.' | ' : '').
  153. '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$entry.'.plugin" target="_blank" title="'.$lang['cloudaddons_linkto'].'">'.$lang['plugins_visit'].'</a></p>',
  154. '<a href="'.ADMINSCRIPT.'?action=plugins&operation=import&dir='.$entry.'" class="bold">'.$lang['plugins_config_install'].'</a>'
  155. ), true);
  156. }
  157. }
  158. }
  159. if($newlist) {
  160. showtitle('plugins_list_new');
  161. echo $newlist;
  162. }
  163. }
  164. if($outputsubmit) {
  165. showsubmit('submit', 'submit', '', '<a href="'.ADMINSCRIPT.'?action=cloudaddons">'.cplang('cloudaddons_plugin_link').'</a>');
  166. } else {
  167. showsubmit('', '', '', '<a href="'.ADMINSCRIPT.'?action=cloudaddons">'.cplang('cloudaddons_plugin_link').'</a>');
  168. }
  169. showtablefooter();
  170. showformfooter();
  171. } else {
  172. foreach(C::t('common_plugin')->fetch_all_data(1) as $plugin) {
  173. if(!empty($_GET['displayordernew'][$plugin['pluginid']])) {
  174. $plugin['modules'] = dunserialize($plugin['modules']);
  175. $k = array_keys($_GET['displayordernew'][$plugin['pluginid']]);
  176. $v = array_values($_GET['displayordernew'][$plugin['pluginid']]);
  177. $plugin['modules'][$k[0]]['displayorder'] = $v[0];
  178. C::t('common_plugin')->update($plugin['pluginid'], array('modules' => serialize($plugin['modules'])));
  179. }
  180. }
  181. updatecache(array('plugin', 'setting', 'styles'));
  182. cleartemplatecache();
  183. cpmsg('plugins_edit_succeed', 'action=plugins', 'succeed');
  184. }
  185. } elseif(FORMHASH == $_GET['formhash'] && ($operation == 'enable' || $operation == 'disable')) {
  186. $conflictplugins = '';
  187. $plugin = C::t('common_plugin')->fetch($_GET['pluginid']);
  188. if(!$plugin) {
  189. cpmsg('plugin_not_found', '', 'error');
  190. }
  191. $dir = substr($plugin['directory'], 0, -1);
  192. $modules = dunserialize($plugin['modules']);
  193. $file = DISCUZ_ROOT.'./source/plugin/'.$dir.'/discuz_plugin_'.$dir.($modules['extra']['installtype'] ? '_'.$modules['extra']['installtype'] : '').'.xml';
  194. if(!file_exists($file)) {
  195. $pluginarray[$operation.'file'] = $modules['extra'][$operation.'file'];
  196. $pluginarray['plugin']['version'] = $plugin['version'];
  197. } else {
  198. $importtxt = @implode('', file($file));
  199. $pluginarray = getimportdata('Discuz! Plugin');
  200. }
  201. if(!empty($pluginarray[$operation.'file']) && preg_match('/^[\w\.]+$/', $pluginarray[$operation.'file'])) {
  202. $filename = DISCUZ_ROOT.'./source/plugin/'.$dir.'/'.$pluginarray[$operation.'file'];
  203. if(file_exists($filename)) {
  204. @include $filename;
  205. }
  206. }
  207. if($operation == 'enable') {
  208. require_once libfile('cache/setting', 'function');
  209. list(,, $hookscript) = get_cachedata_setting_plugin($plugin['identifier']);
  210. $exists = array();
  211. foreach($hookscript as $script => $modules) {
  212. foreach($modules as $module => $data) {
  213. foreach(array('funcs' => '', 'outputfuncs' => '_output', 'messagefuncs' => '_message') as $functype => $funcname) {
  214. foreach($data[$functype] as $k => $funcs) {
  215. $pluginids = array();
  216. foreach($funcs as $func) {
  217. $pluginids[$func[0]] = $func[0];
  218. }
  219. if(in_array($plugin['identifier'], $pluginids) && count($pluginids) > 1) {
  220. unset($pluginids[$plugin['identifier']]);
  221. foreach($pluginids as $pluginid) {
  222. $exists[$pluginid][$k.$funcname] = $k.$funcname;
  223. }
  224. }
  225. }
  226. }
  227. }
  228. }
  229. if($exists) {
  230. $plugins = array();
  231. foreach(C::t('common_plugin')->fetch_all_by_identifier(array_keys($exists)) as $plugin) {
  232. $plugins[] = '<b>'.$plugin['name'].'</b>:'.
  233. '&nbsp;<a href="javascript:;" onclick="display(\'conflict_'.$plugin['identifier'].'\')">'.cplang('plugins_conflict_view').'</a>'.
  234. '&nbsp;<a href="'.cloudaddons_pluginlogo_url($plugin['identifier']).'" target="_blank">'.cplang('plugins_conflict_info').'</a>'.
  235. '<span id="conflict_'.$plugin['identifier'].'" style="display:none"><br />'.implode(',', $exists[$plugin['identifier']]).'</span>';
  236. }
  237. $conflictplugins = '<div align="left" style="margin: auto 100px; border: 1px solid #DEEEFA;padding: 4px;line-height: 25px;">'.implode('<br />', $plugins).'</div>';
  238. }
  239. }
  240. $available = $operation == 'enable' ? 1 : 0;
  241. C::t('common_plugin')->update($_GET['pluginid'], array('available' => $available));
  242. updatecache(array('plugin', 'setting', 'styles'));
  243. cleartemplatecache();
  244. updatemenu('plugin');
  245. if($operation == 'enable') {
  246. if(!$conflictplugins) {
  247. cpmsg('plugins_enable_succeed', 'action=plugins'.(!empty($_GET['system']) ? '&system=1' : ''), 'succeed');
  248. } else {
  249. cpmsg('plugins_conflict', 'action=plugins'.(!empty($_GET['system']) ? '&system=1' : ''), 'succeed', array('plugins' => $conflictplugins));
  250. }
  251. } else {
  252. cpmsg('plugins_disable_succeed', 'action=plugins'.(!empty($_GET['system']) ? '&system=1' : ''), 'succeed');
  253. }
  254. cpmsg('plugins_'.$operation.'_succeed', 'action=plugins'.(!empty($_GET['system']) ? '&system=1' : ''), 'succeed');
  255. } elseif($operation == 'export' && $pluginid) {
  256. if(!$isplugindeveloper) {
  257. cpmsg('undefined_action', '', 'error');
  258. }
  259. $plugin = C::t('common_plugin')->fetch($pluginid);
  260. if(!$plugin) {
  261. cpheader();
  262. cpmsg('plugin_not_found', '', 'error');
  263. }
  264. unset($plugin['pluginid']);
  265. $pluginarray = array();
  266. $pluginarray['plugin'] = $plugin;
  267. $pluginarray['version'] = strip_tags($_G['setting']['version']);
  268. foreach(C::t('common_pluginvar')->fetch_all_by_pluginid($pluginid) as $var) {
  269. unset($var['pluginvarid'], $var['pluginid']);
  270. $pluginarray['var'][] = $var;
  271. }
  272. $modules = dunserialize($pluginarray['plugin']['modules']);
  273. if($modules['extra']['langexists'] && file_exists($file = DISCUZ_ROOT.'./data/plugindata/'.$pluginarray['plugin']['identifier'].'.lang.php')) {
  274. include $file;
  275. if(!empty($scriptlang[$pluginarray['plugin']['identifier']])) {
  276. $pluginarray['language']['scriptlang'] = $scriptlang[$pluginarray['plugin']['identifier']];
  277. }
  278. if(!empty($templatelang[$pluginarray['plugin']['identifier']])) {
  279. $pluginarray['language']['templatelang'] = $templatelang[$pluginarray['plugin']['identifier']];
  280. }
  281. if(!empty($installlang[$pluginarray['plugin']['identifier']])) {
  282. $pluginarray['language']['installlang'] = $installlang[$pluginarray['plugin']['identifier']];
  283. }
  284. if(!empty($systemlang[$pluginarray['plugin']['identifier']])) {
  285. $pluginarray['language']['systemlang'] = $systemlang[$pluginarray['plugin']['identifier']];
  286. }
  287. }
  288. unset($modules['extra']);
  289. $pluginarray['plugin']['modules'] = serialize($modules);
  290. $plugindir = DISCUZ_ROOT.'./source/plugin/'.$pluginarray['plugin']['directory'];
  291. if(file_exists($plugindir.'/install.php')) {
  292. $pluginarray['installfile'] = 'install.php';
  293. }
  294. if(file_exists($plugindir.'/uninstall.php')) {
  295. $pluginarray['uninstallfile'] = 'uninstall.php';
  296. }
  297. if(file_exists($plugindir.'/upgrade.php')) {
  298. $pluginarray['upgradefile'] = 'upgrade.php';
  299. }
  300. if(file_exists($plugindir.'/check.php')) {
  301. $pluginarray['checkfile'] = 'check.php';
  302. }
  303. if(file_exists($plugindir.'/enable.php')) {
  304. $pluginarray['enablefile'] = 'enable.php';
  305. }
  306. if(file_exists($plugindir.'/disable.php')) {
  307. $pluginarray['disablefile'] = 'disable.php';
  308. }
  309. exportdata('Discuz! Plugin', $plugin['identifier'], $pluginarray);
  310. } elseif($operation == 'import') {
  311. if(submitcheck('importsubmit') || isset($_GET['dir'])) {
  312. cloudaddons_validator($_GET['dir'].'.plugin');
  313. if(!isset($_GET['installtype'])) {
  314. $pdir = DISCUZ_ROOT.'./source/plugin/'.$_GET['dir'];
  315. $d = dir($pdir);
  316. $xmls = '';
  317. $count = 0;
  318. $noextra = false;
  319. $currentlang = currentlang();
  320. while($f = $d->read()) {
  321. if(preg_match('/^discuz\_plugin_'.$_GET['dir'].'(\_\w+)?\.xml$/', $f, $a)) {
  322. $extratxt = $extra = substr($a[1], 1);
  323. if($extra) {
  324. if($currentlang && $currentlang == $extra) {
  325. dheader('location: '.ADMINSCRIPT.'?action=plugins&operation=import&dir='.$_GET['dir'].'&installtype='.rawurlencode($extra));
  326. }
  327. } else {
  328. $noextra = true;
  329. }
  330. $url = ADMINSCRIPT.'?action=plugins&operation=import&dir='.$_GET['dir'].'&installtype='.rawurlencode($extra);
  331. $xmls .= '&nbsp;<input type="button" class="btn" onclick="location.href=\''.$url.'\'" value="'.($extra ? $extratxt : $lang['plugins_import_default']).'">&nbsp;';
  332. $count++;
  333. }
  334. }
  335. if($count == 1 && $noextra) {
  336. dheader('location: '.ADMINSCRIPT.'?action=plugins&operation=import&dir='.$_GET['dir'].'&installtype=');
  337. }
  338. $xmls .= '<br /><br /><input class="btn" onclick="location.href=\''.ADMINSCRIPT.'?action=plugins\'" type="button" value="'.$lang['cancel'].'"/>';
  339. echo '<div class="infobox"><h4 class="infotitle2">'.$lang['plugins_import_installtype_1'].' '.$_GET['dir'].' '.$lang['plugins_import_installtype_2'].' '.$count.' '.$lang['plugins_import_installtype_3'].'</h4>'.$xmls.'</div>';
  340. exit;
  341. } else {
  342. $installtype = $_GET['installtype'];
  343. $dir = $_GET['dir'];
  344. $license = $_GET['license'];
  345. $extra = $installtype ? '_'.$installtype : '';
  346. $importfile = DISCUZ_ROOT.'./source/plugin/'.$dir.'/discuz_plugin_'.$dir.$extra.'.xml';
  347. $importtxt = @implode('', file($importfile));
  348. $pluginarray = getimportdata('Discuz! Plugin');
  349. if(empty($license) && $pluginarray['license']) {
  350. require_once libfile('function/discuzcode');
  351. $pluginarray['license'] = discuzcode(strip_tags($pluginarray['license']), 1, 0);
  352. echo '<div class="infobox"><h4 class="infotitle2">'.$pluginarray['plugin']['name'].' '.$pluginarray['plugin']['version'].' '.$lang['plugins_import_license'].'</h4><div style="text-align:left;line-height:25px;">'.$pluginarray['license'].'</div><br /><br /><center>'.
  353. '<button onclick="location.href=\''.ADMINSCRIPT.'?action=plugins&operation=import&dir='.$dir.'&installtype='.$installtype.'&license=yes\'">'.$lang['plugins_import_agree'].'</button>&nbsp;&nbsp;'.
  354. '<button onclick="location.href=\''.ADMINSCRIPT.'?action=plugins\'">'.$lang['plugins_import_pass'].'</button></center></div>';
  355. exit;
  356. }
  357. }
  358. if(!ispluginkey($pluginarray['plugin']['identifier'])) {
  359. cpmsg('plugins_edit_identifier_invalid', 'action=plugins', 'error');
  360. }
  361. if(is_array($pluginarray['vars'])) {
  362. foreach($pluginarray['vars'] as $config) {
  363. if(!ispluginkey($config['variable'])) {
  364. cpmsg('plugins_import_var_invalid', 'action=plugins', 'error');
  365. }
  366. }
  367. }
  368. $plugin = C::t('common_plugin')->fetch_by_identifier($pluginarray['plugin']['identifier']);
  369. if($plugin) {
  370. cpmsg('plugins_import_identifier_duplicated', 'action=plugins', 'error', array('plugin_name' => $plugin['name']));
  371. }
  372. if(!empty($pluginarray['checkfile']) && preg_match('/^[\w\.]+$/', $pluginarray['checkfile'])) {
  373. $filename = DISCUZ_ROOT.'./source/plugin/'.$_GET['dir'].'/'.$pluginarray['checkfile'];
  374. if(file_exists($filename)) {
  375. loadcache('pluginlanguage_install');
  376. $installlang = $pluginarray['language']['installlang'];
  377. @include $filename;
  378. }
  379. }
  380. if(empty($_GET['ignoreversion']) && !versioncompatible($pluginarray['version'])) {
  381. if(isset($dir)) {
  382. cpmsg('plugins_import_version_invalid_confirm', 'action=plugins&operation=import&ignoreversion=yes&dir='.$dir.'&installtype='.$installtype.'&license='.$license, 'form', array('cur_version' => $pluginarray['version'], 'set_version' => $_G['setting']['version']), '', true, ADMINSCRIPT.'?action=plugins');
  383. } else {
  384. cpmsg('plugins_import_version_invalid', 'action=plugins', 'error', array('cur_version' => $pluginarray['version'], 'set_version' => $_G['setting']['version']));
  385. }
  386. }
  387. $pluginid = plugininstall($pluginarray, $installtype);
  388. updatemenu('plugin');
  389. if(!empty($dir) && !empty($pluginarray['installfile']) && preg_match('/^[\w\.]+$/', $pluginarray['installfile'])) {
  390. dheader('location: '.ADMINSCRIPT.'?action=plugins&operation=plugininstall&dir='.$dir.'&installtype='.$installtype.'&pluginid='.$pluginid);
  391. }
  392. cloudaddons_clear('plugin', $dir);
  393. if(!empty($dir)) {
  394. cpmsg('plugins_install_succeed', 'action=plugins&hl='.$pluginid, 'succeed');
  395. } else {
  396. cpmsg('plugins_import_succeed', 'action=plugins&hl='.$pluginid, 'succeed');
  397. }
  398. }
  399. } elseif($operation == 'plugininstall' || $operation == 'pluginupgrade') {
  400. $finish = FALSE;
  401. $dir = $_GET['dir'];
  402. $installtype = str_replace('/', '', $_GET['installtype']);
  403. $extra = $installtype ? '_'.$installtype : '';
  404. $xmlfile = 'discuz_plugin_'.$dir.$extra.'.xml';
  405. $importfile = DISCUZ_ROOT.'./source/plugin/'.$dir.'/'.$xmlfile;
  406. if(!file_exists($importfile)) {
  407. cpmsg('plugin_file_error', '', 'error');
  408. }
  409. $importtxt = @implode('', file($importfile));
  410. $pluginarray = getimportdata('Discuz! Plugin');
  411. if($operation == 'plugininstall') {
  412. $filename = $pluginarray['installfile'];
  413. } else {
  414. $filename = $pluginarray['upgradefile'];
  415. $toversion = $pluginarray['plugin']['version'];
  416. }
  417. loadcache('pluginlanguage_install');
  418. $installlang = $_G['cache']['pluginlanguage_install'][$dir];
  419. if(!empty($filename) && preg_match('/^[\w\.]+$/', $filename)) {
  420. $filename = DISCUZ_ROOT.'./source/plugin/'.$dir.'/'.$filename;
  421. if(file_exists($filename)) {
  422. @include_once $filename;
  423. } else {
  424. $finish = TRUE;
  425. }
  426. } else {
  427. $finish = TRUE;
  428. }
  429. if($finish) {
  430. updatecache('setting');
  431. updatemenu('plugin');
  432. if($operation == 'plugininstall') {
  433. cloudaddons_clear('plugin', $dir);
  434. cpmsg('plugins_install_succeed', 'action=plugins&hl='.$_GET['pluginid'], 'succeed');
  435. } else {
  436. cloudaddons_clear('plugin', $dir);
  437. cpmsg('plugins_upgrade_succeed', "action=plugins", 'succeed', array('toversion' => $toversion));
  438. }
  439. }
  440. } elseif($operation == 'upgrade') {
  441. $plugin = C::t('common_plugin')->fetch($pluginid);
  442. $modules = dunserialize($plugin['modules']);
  443. $dir = substr($plugin['directory'], 0, -1);
  444. if(!$_GET['confirmed']) {
  445. $file = DISCUZ_ROOT.'./source/plugin/'.$dir.'/discuz_plugin_'.$dir.($modules['extra']['installtype'] ? '_'.$modules['extra']['installtype'] : '').'.xml';
  446. $upgrade = false;
  447. if(file_exists($file)) {
  448. $importtxt = @implode('', file($file));
  449. $pluginarray = getimportdata('Discuz! Plugin');
  450. $newver = !empty($pluginarray['plugin']['version']) ? $pluginarray['plugin']['version'] : 0;
  451. $upgrade = $newver > $plugin['version'] ? true : false;
  452. }
  453. $entrydir = DISCUZ_ROOT.'./source/plugin/'.$dir;
  454. $upgradestr = '';
  455. if(file_exists($entrydir)) {
  456. $d = dir($entrydir);
  457. while($f = $d->read()) {
  458. if(preg_match('/^discuz\_plugin\_'.$plugin['identifier'].'(\_\w+)?\.xml$/', $f, $a)) {
  459. $extratxt = $extra = substr($a[1], 1);
  460. if(preg_match('/^SC\_GBK$/i', $extra)) {
  461. $extratxt = '&#31616;&#20307;&#20013;&#25991;&#29256;';
  462. } elseif(preg_match('/^SC\_UTF8$/i', $extra)) {
  463. $extratxt = '&#31616;&#20307;&#20013;&#25991;&#85;&#84;&#70;&#56;&#29256;';
  464. } elseif(preg_match('/^TC\_BIG5$/i', $extra)) {
  465. $extratxt = '&#32321;&#39636;&#20013;&#25991;&#29256;';
  466. } elseif(preg_match('/^TC\_UTF8$/i', $extra)) {
  467. $extratxt = '&#32321;&#39636;&#20013;&#25991;&#85;&#84;&#70;&#56;&#29256;';
  468. }
  469. if($modules['extra']['installtype'] == $extratxt) {
  470. continue;
  471. }
  472. $importtxt = @implode('', file($entrydir.'/'.$f));
  473. $pluginarray = getimportdata('Discuz! Plugin');
  474. $newverother = !empty($pluginarray['plugin']['version']) ? $pluginarray['plugin']['version'] : 0;
  475. $upgradestr .= $newverother > $plugin['version'] ? '<input class="btn" onclick="location.href=\''.ADMINSCRIPT.'?action=plugins&operation=upgrade&pluginid='.$pluginid.'&confirmed=yes&installtype='.rawurlencode($extra).'\'" type="button" value="'.($extra ? $extratxt : $lang['plugins_import_default']).' '.$newverother.'" />&nbsp;&nbsp;&nbsp;' : '';
  476. }
  477. }
  478. }
  479. if(!empty($pluginarray['checkfile']) && preg_match('/^[\w\.]+$/', $pluginarray['checkfile'])) {
  480. $filename = DISCUZ_ROOT.'./source/plugin/'.$plugin['identifier'].'/'.$pluginarray['checkfile'];
  481. if(file_exists($filename)) {
  482. loadcache('pluginlanguage_install');
  483. $installlang = $_G['cache']['pluginlanguage_install'][$plugin['identifier']];
  484. @include $filename;
  485. }
  486. }
  487. if($upgrade) {
  488. cpmsg('plugins_config_upgrade_confirm', 'action=plugins&operation=upgrade&pluginid='.$pluginid.'&confirm=yes', 'form', array('pluginname' => $plugin['name'], 'version' => $plugin['version'], 'toversion' => $newver));
  489. } elseif($upgradestr) {
  490. echo '<h3>'.cplang('discuz_message').'</h3><div class="infobox"><h4 class="marginbot normal">'.cplang('plugins_config_upgrade_other', array('pluginname' => $plugin['name'], 'version' => $plugin['version'])).'</h4><br /><p class="margintop">'.$upgradestr.
  491. '<input class="btn" onclick="location.href=\''.ADMINSCRIPT.'?action=plugins\'" type="button" value="'.$lang['cancel'].'"/></div></div>';
  492. } else {
  493. $addonid = $plugin['identifier'].'.plugin';
  494. $checkresult = dunserialize(cloudaddons_upgradecheck(array($addonid)));
  495. list($return, $newver, $sysver) = explode(':', $checkresult[$addonid]);
  496. cloudaddons_installlog($pluginarray['plugin']['identifier'].'.plugin');
  497. dsetcookie('addoncheck_plugin', '', -1);
  498. cloudaddons_clear('plugin', $dir);
  499. if($sysver && $sysver > $plugin['version']) {
  500. cpmsg('plugins_config_upgrade_new', '', 'succeed', array('newver' => $sysver, 'addonid' => $addonid));
  501. } elseif($newver) {
  502. cpmsg('plugins_config_upgrade_new', '', 'succeed', array('newver' => $newver, 'addonid' => $addonid));
  503. } else {
  504. cpmsg('plugins_config_upgrade_missed', 'action=plugins', 'succeed');
  505. }
  506. }
  507. } else {
  508. $installtype = !isset($_GET['installtype']) ? $modules['extra']['installtype'] : (preg_match('/^\w+$/', $_GET['installtype']) ? $_GET['installtype'] : '');
  509. $importfile = DISCUZ_ROOT.'./source/plugin/'.$dir.'/discuz_plugin_'.$dir.($installtype ? '_'.$installtype : '').'.xml';
  510. if(!file_exists($importfile)) {
  511. cpmsg('plugin_file_error', '', 'error');
  512. }
  513. cloudaddons_validator($dir.'.plugin');
  514. $importtxt = @implode('', file($importfile));
  515. $pluginarray = getimportdata('Discuz! Plugin');
  516. if(!ispluginkey($pluginarray['plugin']['identifier']) || $pluginarray['plugin']['identifier'] != $plugin['identifier']) {
  517. cpmsg('plugins_edit_identifier_invalid', '', 'error');
  518. }
  519. if(is_array($pluginarray['vars'])) {
  520. foreach($pluginarray['vars'] as $config) {
  521. if(!ispluginkey($config['variable'])) {
  522. cpmsg('plugins_upgrade_var_invalid', '', 'error');
  523. }
  524. }
  525. }
  526. if(!empty($pluginarray['checkfile']) && preg_match('/^[\w\.]+$/', $pluginarray['checkfile'])) {
  527. if(!empty($pluginarray['language'])) {
  528. $installlang[$pluginarray['plugin']['identifier']] = $pluginarray['language']['installlang'];
  529. }
  530. $filename = DISCUZ_ROOT.'./source/plugin/'.$plugin['directory'].$pluginarray['checkfile'];
  531. if(file_exists($filename)) {
  532. loadcache('pluginlanguage_install');
  533. $installlang = $_G['cache']['pluginlanguage_install'][$plugin['identifier']];
  534. @include $filename;
  535. }
  536. }
  537. pluginupgrade($pluginarray, $installtype);
  538. if(!empty($plugin['directory']) && !empty($pluginarray['upgradefile']) && preg_match('/^[\w\.]+$/', $pluginarray['upgradefile'])) {
  539. dheader('location: '.ADMINSCRIPT.'?action=plugins&operation=pluginupgrade&dir='.$dir.'&installtype='.$modules['extra']['installtype'].'&fromversion='.$plugin['version']);
  540. }
  541. $toversion = $pluginarray['plugin']['version'];
  542. cloudaddons_clear('plugin', $dir);
  543. cpmsg('plugins_upgrade_succeed', "action=plugins", 'succeed', array('toversion' => $toversion));
  544. }
  545. } elseif($operation == 'config') {
  546. if(empty($pluginid) && !empty($do)) {
  547. $pluginid = $do;
  548. }
  549. if($_GET['identifier']) {
  550. $plugin = C::t('common_plugin')->fetch_by_identifier($_GET['identifier']);
  551. } else {
  552. $plugin = C::t('common_plugin')->fetch($pluginid);
  553. }
  554. if(!$plugin) {
  555. cpmsg('plugin_not_found', '', 'error');
  556. } else {
  557. $pluginid = $plugin['pluginid'];
  558. }
  559. $plugin['modules'] = dunserialize($plugin['modules']);
  560. $pluginvars = array();
  561. foreach(C::t('common_pluginvar')->fetch_all_by_pluginid($pluginid) as $var) {
  562. if(strexists($var['type'], '_')) {
  563. continue;
  564. }
  565. $pluginvars[$var['variable']] = $var;
  566. }
  567. if($pluginvars) {
  568. $submenuitem[] = array('config', "plugins&operation=config&do=$pluginid", !$_GET['pmod']);
  569. }
  570. if(is_array($plugin['modules'])) {
  571. foreach($plugin['modules'] as $module) {
  572. if($module['type'] == 3) {
  573. parse_str($module['param'], $param);
  574. if(!$pluginvars && empty($_GET['pmod'])) {
  575. $_GET['pmod'] = $module['name'];
  576. if($param) {
  577. foreach($param as $_k => $_v) {
  578. $_GET[$_k] = $_v;
  579. }
  580. }
  581. }
  582. if($param) {
  583. $m = true;
  584. foreach($param as $_k => $_v) {
  585. if(!isset($_GET[$_k]) || $_GET[$_k] != $_v) {
  586. $m = false;
  587. break;
  588. }
  589. }
  590. } else {
  591. $m = true;
  592. }
  593. $submenuitem[] = array($module['menu'], "plugins&operation=config&do=$pluginid&identifier=$plugin[identifier]&pmod=$module[name]".($module['param'] ? '&'.$module['param'] : ''), $_GET['pmod'] == $module['name'] && $m, !$_GET['pmod'] ? 1 : 0);
  594. }
  595. }
  596. }
  597. if(empty($_GET['pmod'])) {
  598. if(!submitcheck('editsubmit')) {
  599. $operation = '';
  600. shownav('plugin', $plugin['name']);
  601. showsubmenuanchors($plugin['name'], $submenuitem);
  602. if($pluginvars) {
  603. showformheader("plugins&operation=config&do=$pluginid");
  604. showtableheader();
  605. showtitle($lang['plugins_config']);
  606. $extra = array();
  607. foreach($pluginvars as $var) {
  608. if(strexists($var['type'], '_')) {
  609. continue;
  610. }
  611. $var['variable'] = 'varsnew['.$var['variable'].']';
  612. if($var['type'] == 'number') {
  613. $var['type'] = 'text';
  614. } elseif($var['type'] == 'select') {
  615. $var['type'] = "<select name=\"$var[variable]\">\n";
  616. foreach(explode("\n", $var['extra']) as $key => $option) {
  617. $option = trim($option);
  618. if(strpos($option, '=') === FALSE) {
  619. $key = $option;
  620. } else {
  621. $item = explode('=', $option);
  622. $key = trim($item[0]);
  623. $option = trim($item[1]);
  624. }
  625. $var['type'] .= "<option value=\"".dhtmlspecialchars($key)."\" ".($var['value'] == $key ? 'selected' : '').">$option</option>\n";
  626. }
  627. $var['type'] .= "</select>\n";
  628. $var['variable'] = $var['value'] = '';
  629. } elseif($var['type'] == 'selects') {
  630. $var['value'] = dunserialize($var['value']);
  631. $var['value'] = is_array($var['value']) ? $var['value'] : array($var['value']);
  632. $var['type'] = "<select name=\"$var[variable][]\" multiple=\"multiple\" size=\"10\">\n";
  633. foreach(explode("\n", $var['extra']) as $key => $option) {
  634. $option = trim($option);
  635. if(strpos($option, '=') === FALSE) {
  636. $key = $option;
  637. } else {
  638. $item = explode('=', $option);
  639. $key = trim($item[0]);
  640. $option = trim($item[1]);
  641. }
  642. $var['type'] .= "<option value=\"".dhtmlspecialchars($key)."\" ".(in_array($key, $var['value']) ? 'selected' : '').">$option</option>\n";
  643. }
  644. $var['type'] .= "</select>\n";
  645. $var['variable'] = $var['value'] = '';
  646. } elseif($var['type'] == 'date') {
  647. $var['type'] = 'calendar';
  648. $extra['date'] = '<script type="text/javascript" src="static/js/calendar.js"></script>';
  649. } elseif($var['type'] == 'datetime') {
  650. $var['type'] = 'calendar';
  651. $var['extra'] = 1;
  652. $extra['date'] = '<script type="text/javascript" src="static/js/calendar.js"></script>';
  653. } elseif($var['type'] == 'forum') {
  654. require_once libfile('function/forumlist');
  655. $var['type'] = '<select name="'.$var['variable'].'"><option value="">'.cplang('plugins_empty').'</option>'.forumselect(FALSE, 0, $var['value'], TRUE).'</select>';
  656. $var['variable'] = $var['value'] = '';
  657. } elseif($var['type'] == 'forums') {
  658. $var['description'] = ($var['description'] ? (isset($lang[$var['description']]) ? $lang[$var['description']] : $var['description'])."\n" : '').$lang['plugins_edit_vars_multiselect_comment']."\n".$var['comment'];
  659. $var['value'] = dunserialize($var['value']);
  660. $var['value'] = is_array($var['value']) ? $var['value'] : array();
  661. require_once libfile('function/forumlist');
  662. $var['type'] = '<select name="'.$var['variable'].'[]" size="10" multiple="multiple"><option value="">'.cplang('plugins_empty').'</option>'.forumselect(FALSE, 0, 0, TRUE).'</select>';
  663. foreach($var['value'] as $v) {
  664. $var['type'] = str_replace('<option value="'.$v.'">', '<option value="'.$v.'" selected>', $var['type']);
  665. }
  666. $var['variable'] = $var['value'] = '';
  667. } elseif(substr($var['type'], 0, 5) == 'group') {
  668. if($var['type'] == 'groups') {
  669. $var['description'] = ($var['description'] ? (isset($lang[$var['description']]) ? $lang[$var['description']] : $var['description'])."\n" : '').$lang['plugins_edit_vars_multiselect_comment']."\n".$var['comment'];
  670. $var['value'] = dunserialize($var['value']);
  671. $var['type'] = '<select name="'.$var['variable'].'[]" size="10" multiple="multiple"><option value=""'.(@in_array('', $var['value']) ? ' selected' : '').'>'.cplang('plugins_empty').'</option>';
  672. } else {
  673. $var['type'] = '<select name="'.$var['variable'].'"><option value="">'.cplang('plugins_empty').'</option>';
  674. }
  675. $var['value'] = is_array($var['value']) ? $var['value'] : array($var['value']);
  676. $query = C::t('common_usergroup')->range_orderby_credit();
  677. $groupselect = array();
  678. foreach($query as $group) {
  679. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  680. $groupselect[$group['type']] .= '<option value="'.$group['groupid'].'"'.(@in_array($group['groupid'], $var['value']) ? ' selected' : '').'>'.$group['grouptitle'].'</option>';
  681. }
  682. $var['type'] .= '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  683. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  684. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  685. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup></select>';
  686. $var['variable'] = $var['value'] = '';
  687. } elseif($var['type'] == 'extcredit') {
  688. $var['type'] = '<select name="'.$var['variable'].'"><option value="">'.cplang('plugins_empty').'</option>';
  689. foreach($_G['setting']['extcredits'] as $id => $credit) {
  690. $var['type'] .= '<option value="'.$id.'"'.($var['value'] == $id ? ' selected' : '').'>'.$credit['title'].'</option>';
  691. }
  692. $var['type'] .= '</select>';
  693. $var['variable'] = $var['value'] = '';
  694. }
  695. showsetting(isset($lang[$var['title']]) ? $lang[$var['title']] : dhtmlspecialchars($var['title']), $var['variable'], $var['value'], $var['type'], '', 0, isset($lang[$var['description']]) ? $lang[$var['description']] : nl2br(dhtmlspecialchars($var['description'])), dhtmlspecialchars($var['extra']), '', true);
  696. }
  697. showsubmit('editsubmit');
  698. showtablefooter();
  699. showformfooter();
  700. echo implode('', $extra);
  701. }
  702. } else {
  703. if(is_array($_GET['varsnew'])) {
  704. foreach($_GET['varsnew'] as $variable => $value) {
  705. if(isset($pluginvars[$variable])) {
  706. if($pluginvars[$variable]['type'] == 'number') {
  707. $value = (float)$value;
  708. } elseif(in_array($pluginvars[$variable]['type'], array('forums', 'groups', 'selects'))) {
  709. $value = serialize($value);
  710. }
  711. $value = (string)$value;
  712. C::t('common_pluginvar')->update_by_variable($pluginid, $variable, array('value' => $value));
  713. }
  714. }
  715. }
  716. updatecache(array('plugin', 'setting', 'styles'));
  717. cleartemplatecache();
  718. cpmsg('plugins_setting_succeed', 'action=plugins&operation=config&do='.$pluginid.'&anchor='.$anchor, 'succeed');
  719. }
  720. } else {
  721. $scriptlang[$plugin['identifier']] = lang('plugin/'.$plugin['identifier']);
  722. $modfile = '';
  723. if(is_array($plugin['modules'])) {
  724. foreach($plugin['modules'] as $module) {
  725. if($module['type'] == 3 && $module['name'] == $_GET['pmod']) {
  726. $plugin['directory'] .= (!empty($plugin['directory']) && substr($plugin['directory'], -1) != '/') ? '/' : '';
  727. $modfile = './source/plugin/'.$plugin['directory'].$module['name'].'.inc.php';
  728. break;
  729. }
  730. }
  731. }
  732. if($modfile) {
  733. shownav('plugin', $plugin['name']);
  734. showsubmenu($plugin['name'], $submenuitem);
  735. if(!@include(DISCUZ_ROOT.$modfile)) {
  736. cpmsg('plugins_setting_module_nonexistence', '', 'error', array('modfile' => $modfile));
  737. } else {
  738. exit();
  739. }
  740. } else {
  741. cpmsg('plugin_file_error', '', 'error');
  742. }
  743. }
  744. } elseif($operation == 'add') {
  745. if(!$isplugindeveloper) {
  746. cpmsg('undefined_action', '', 'error');
  747. }
  748. if(!submitcheck('addsubmit')) {
  749. shownav('plugin');
  750. showsubmenu('nav_plugins', array(
  751. array('plugins_list', 'plugins', 0),
  752. array('plugins_add', 'plugins&operation=add', 1),
  753. array('cloudaddons_plugin_link', 'cloudaddons'),
  754. ));
  755. showtips('plugins_add_tips');
  756. showformheader("plugins&operation=add", '', 'configform');
  757. showtableheader();
  758. showsetting('plugins_edit_name', 'namenew', '', 'text');
  759. showsetting('plugins_edit_version', 'versionnew', '', 'text');
  760. showsetting('plugins_edit_copyright', 'copyrightnew', '', 'text');
  761. showsetting('plugins_edit_identifier', 'identifiernew', '', 'text');
  762. showsubmit('addsubmit');
  763. showtablefooter();
  764. showformfooter();
  765. } else {
  766. $namenew = dhtmlspecialchars(trim($_GET['namenew']));
  767. $versionnew = strip_tags(trim($_GET['versionnew']));
  768. $identifiernew = trim($_GET['identifiernew']);
  769. $copyrightnew = dhtmlspecialchars($_GET['copyrightnew']);
  770. if(!$namenew) {
  771. cpmsg('plugins_edit_name_invalid', '', 'error');
  772. } else {
  773. if(!ispluginkey($identifiernew) || C::t('common_plugin')->fetch_by_identifier($identifiernew)) {
  774. cpmsg('plugins_edit_identifier_invalid', '', 'error');
  775. }
  776. }
  777. $data = array(
  778. 'name' => $namenew,
  779. 'version' => $versionnew,
  780. 'identifier' => $identifiernew,
  781. 'directory' => $identifiernew.'/',
  782. 'available' => 0,
  783. 'copyright' => $copyrightnew,
  784. );
  785. $pluginid = C::t('common_plugin')->insert($data, true);
  786. updatecache(array('plugin', 'setting', 'styles'));
  787. cleartemplatecache();
  788. cpmsg('plugins_add_succeed', "action=plugins&operation=edit&pluginid=$pluginid", 'succeed');
  789. }
  790. } elseif($operation == 'edit') {
  791. if(!$isplugindeveloper) {
  792. cpmsg('undefined_action', '', 'error');
  793. }
  794. if(empty($pluginid) ) {
  795. $pluginlist = '<select name="pluginid">';
  796. foreach(C::t('common_plugin')->fetch_all_data() as $plugin) {
  797. $pluginlist .= '<option value="'.$plugin['pluginid'].'">'.$plugin['name'].'</option>';
  798. }
  799. $pluginlist .= '</select>';
  800. cpmsg('plugins_nonexistence', 'action=plugins&operation=edit'.(!empty($highlight) ? "&highlight=$highlight" : ''), 'form', $pluginlist);
  801. } else {
  802. $condition = !empty($uid) ? "uid='$uid'" : "username='$username'";
  803. }
  804. $plugin = C::t('common_plugin')->fetch($pluginid);
  805. if(!$plugin) {
  806. cpmsg('plugin_not_found', '', 'error');
  807. }
  808. $plugin['modules'] = dunserialize($plugin['modules']);
  809. if($plugin['modules']['system']) {
  810. cpmsg('plugin_donot_edit', '', 'error');
  811. }
  812. if(!submitcheck('editsubmit')) {
  813. $adminidselect = array($plugin['adminid'] => 'selected');
  814. shownav('plugin');
  815. $anchor = in_array($_GET['anchor'], array('config', 'modules', 'vars')) ? $_GET['anchor'] : 'config';
  816. showsubmenuanchors($lang['plugins_edit'].' - '.$plugin['name'].($plugin['available'] ? cplang('plugins_edit_available') : ''), array(
  817. array('plugins_list', 'plugins', 0, 1),
  818. array('config', 'config', $anchor == 'config'),
  819. array('plugins_config_module', 'modules', $anchor == 'modules'),
  820. array('plugins_config_vars', 'vars', $anchor == 'vars'),
  821. array('export', 'plugins&operation=export&pluginid='.$plugin['pluginid'], 0, 1),
  822. ));
  823. showtips('plugins_edit_tips');
  824. showtagheader('div', 'config', $anchor == 'config');
  825. showformheader("plugins&operation=edit&type=common&pluginid=$pluginid", '', 'configform');
  826. showtableheader();
  827. showsetting('plugins_edit_name', 'namenew', $plugin['name'], 'text');
  828. showsetting('plugins_edit_version', 'versionnew', $plugin['version'], 'text');
  829. if(!$plugin['copyright']) {
  830. showsetting('plugins_edit_copyright', 'copyrightnew', $plugin['copyright'], 'text');
  831. }
  832. showsetting('plugins_edit_identifier', 'identifiernew', $plugin['identifier'], 'text');
  833. showsetting('plugins_edit_directory', 'directorynew', $plugin['directory'], 'text');
  834. showsetting('plugins_edit_description', 'descriptionnew', $plugin['description'], 'textarea');
  835. showsetting('plugins_edit_langexists', 'langexists', $plugin['modules']['extra']['langexists'], 'radio');
  836. showsubmit('editsubmit');
  837. showtablefooter();
  838. showformfooter();
  839. showtagfooter('div');
  840. showtagheader('div', 'modules', $anchor == 'modules');
  841. showformheader("plugins&operation=edit&type=modules&pluginid=$pluginid", '', 'modulesform');
  842. showtableheader('plugins_edit_modules');
  843. showsubtitle(array('', 'plugins_edit_modules_type', 'plugins_edit_modules_name', 'plugins_edit_modules_menu', 'plugins_edit_modules_menu_url', 'plugins_edit_modules_adminid', 'display_order'));
  844. $moduleids = array();
  845. if(is_array($plugin['modules'])) {
  846. foreach($plugin['modules'] as $moduleid => $module) {
  847. if($moduleid === 'extra' || $moduleid === 'system') {
  848. continue;
  849. }
  850. $module = dhtmlspecialchars($module);
  851. $adminidselect = array($module['adminid'] => 'selected');
  852. $includecheck = empty($val['include']) ? $lang['no'] : $lang['yes'];
  853. $typeselect = '<optgroup label="'.cplang('plugins_edit_modules_type_g1').'">'.
  854. '<option h="1100100" e="inc" value="1"'.($module['type'] == 1 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_1').'</option>'.
  855. '<option h="1111" e="inc" value="5"'.($module['type'] == 5 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_5').'</option>'.
  856. '<option h="1100100" e="inc" value="27"'.($module['type'] == 27 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_27').'</option>'.
  857. '<option h="1100100" e="inc" value="23"'.($module['type'] == 23 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_23').'</option>'.
  858. '<option h="1100110" e="inc" value="25"'.($module['type'] == 25 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_25').'</option>'.
  859. '<option h="1100111" e="inc" value="24"'.($module['type'] == 24 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_24').'</option>'.
  860. '</optgroup>'.
  861. '<optgroup label="'.cplang('plugins_edit_modules_type_g3').'">'.
  862. '<option h="1111" e="inc" value="7"'.($module['type'] == 7 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_7').'</option>'.
  863. '<option h="1111" e="inc" value="17"'.($module['type'] == 17 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_17').'</option>'.
  864. '<option h="1111" e="inc" value="19"'.($module['type'] == 19 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_19').'</option>'.
  865. '<option h="1001" e="inc" value="14"'.($module['type'] == 14 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_14').'</option>'.
  866. '<option h="1111" e="inc" value="26"'.($module['type'] == 26 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_26').'</option>'.
  867. '<option h="1111" e="inc" value="21"'.($module['type'] == 21 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_21').'</option>'.
  868. '<option h="1001" e="inc" value="15"'.($module['type'] == 15 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_15').'</option>'.
  869. '<option h="1001" e="inc" value="16"'.($module['type'] == 16 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_16').'</option>'.
  870. '<option h="1001" e="inc" value="3"'.($module['type'] == 3 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_3').'</option>'.
  871. '<option h="1100" e="inc" value="29"'.($module['type'] == 29 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_29').'</option>'.
  872. '</optgroup>'.
  873. '<optgroup label="'.cplang('plugins_edit_modules_type_g2').'">'.
  874. '<option h="0011" e="class" value="11"'.($module['type'] == 11 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_11').'</option>'.
  875. '<option h="0011" e="class" value="28"'.($module['type'] == 28 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_28').'</option>'.
  876. '<option h="0001" e="class" value="12"'.($module['type'] == 12 ? ' selected="selected"' : '').'>'.cplang('plugins_edit_modules_type_12').'</option>'.
  877. '</optgroup>';
  878. showtablerow('', array('class="td25"', 'class="td28"'), array(
  879. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[$moduleid]\">",
  880. "<select id=\"s_$moduleid\" onchange=\"shide(this, '$moduleid')\" name=\"typenew[$moduleid]\">$typeselect</select>".
  881. ' <a href="javascript:;" onclick="window.open(\''.ADMINSCRIPT.'?action=plugins&mod=attachment&operation=sample&pluginid='.$pluginid.'&frame=no&typeid=\'+$(\'s_'.$moduleid.'\').value+\'&module=\'+$(\'en_'.$moduleid.'\').value+\'&fn=\'+$(\'e_'.$moduleid.'\').innerHTML)">'.cplang('plugins_module_sample').'</a>',
  882. "<input type=\"text\" class=\"txt\" size=\"15\" id=\"en_$moduleid\" name=\"namenew[$moduleid]\" value=\"$module[name]\"><span id=\"e_$moduleid\"></span>",
  883. "<span id=\"m_$moduleid\"><input type=\"text\" class=\"txt\" size=\"15\" name=\"menunew[$moduleid]\" value=\"$module[menu]\"></span>",
  884. "<span id=\"u_$moduleid\"><input type=\"text\" class=\"txt\" size=\"15\" id=\"url_$moduleid\" onchange=\"shide($('s_$moduleid'), '$moduleid')\" name=\"urlnew[$moduleid]\" value=\"".dhtmlspecialchars($module['url'])."\"></span>",
  885. "<span id=\"a_$moduleid\"><select name=\"adminidnew[$moduleid]\">\n".
  886. "<option value=\"0\" $adminidselect[0]>$lang[usergroups_system_0]</option>\n".
  887. "<option value=\"1\" $adminidselect[1]>$lang[usergroups_system_1]</option>\n".
  888. "<option value=\"2\" $adminidselect[2]>$lang[usergroups_system_2]</option>\n".
  889. "<option value=\"3\" $adminidselect[3]>$lang[usergroups_system_3]</option>\n".
  890. "</select></span>",
  891. "<span id=\"o_$moduleid\"><input type=\"text\" class=\"txt\" style=\"width:50px\" name=\"ordernew[$moduleid]\" value=\"$module[displayorder]\"></span>"
  892. ));
  893. showtagheader('tbody', 'n_'.$moduleid);
  894. showtablerow('class="noborder"', array('', 'colspan="6"'), array(
  895. '',
  896. '&nbsp;&nbsp;&nbsp;<span id="nt_'.$moduleid.'">'.$lang['plugins_edit_modules_navtitle'].':<input type="text" class="txt" size="15" name="navtitlenew['.$moduleid.']" value="'.$module['navtitle'].'"></span>
  897. <span id="ni_'.$moduleid.'">'.$lang['plugins_edit_modules_navicon'].':<input type="text" class="txt" name="naviconnew['.$moduleid.']" value="'.$module['navicon'].'"></span>
  898. <span id="nsn_'.$moduleid.'">'.$lang['plugins_edit_modules_navsubname'].':<input type="text" class="txt" name="navsubnamenew['.$moduleid.']" value="'.$module['navsubname'].'"></span>
  899. <span id="nsu_'.$moduleid.'">'.$lang['plugins_edit_modules_navsuburl'].':<input type="text" class="txt" name="navsuburlnew['.$moduleid.']" value="'.$module['navsuburl'].'"></span>
  900. ',
  901. ));
  902. showtagfooter('tbody');
  903. showtagheader('tbody', 'n2_'.$moduleid);
  904. showtablerow('class="noborder"', array('', 'colspan="6"'), array(
  905. '',
  906. '&nbsp;&nbsp;&nbsp;<span id="nsp_'.$moduleid.'">'.$lang['plugins_edit_modules_param'].':<input type="text" class="txt" name="paramnew['.$moduleid.']" value="'.$module['param'].'"></span>',
  907. ));
  908. showtagfooter('tbody');
  909. $moduleids[] = $moduleid;
  910. }
  911. }
  912. showtablerow('', array('class="td25"', 'class="td28"'), array(
  913. cplang('add_new'),
  914. '<select id="s_n" onchange="shide(this, \'n\')" name="newtype">'.
  915. '<optgroup label="'.cplang('plugins_edit_modules_type_g1').'">'.
  916. '<option h="1100100" e="inc" value="1">'.cplang('plugins_edit_modules_type_1').'</option>'.
  917. '<option h="1111" e="inc" value="5">'.cplang('plugins_edit_modules_type_5').'</option>'.
  918. '<option h="1100100" e="inc" value="27">'.cplang('plugins_edit_modules_type_27').'</option>'.
  919. '<option h="1100100" e="inc" value="23">'.cplang('plugins_edit_modules_type_23').'</option>'.
  920. '<option h="1100110" e="inc" value="25">'.cplang('plugins_edit_modules_type_25').'</option>'.
  921. '<option h="1100111" e="inc" value="24">'.cplang('plugins_edit_modules_type_24').'</option>'.
  922. '</optgroup>'.
  923. '<optgroup label="'.cplang('plugins_edit_modules_type_g3').'">'.
  924. '<option h="1111" e="inc" value="7">'.cplang('plugins_edit_modules_type_7').'</option>'.
  925. '<option h="1111" e="inc" value="17">'.cplang('plugins_edit_modules_type_17').'</option>'.
  926. '<option h="1111" e="inc" value="19">'.cplang('plugins_edit_modules_type_19').'</option>'.
  927. '<option h="1001" e="inc" value="14">'.cplang('plugins_edit_modules_type_14').'</option>'.
  928. '<option h="1001" e="inc" value="26">'.cplang('plugins_edit_modules_type_26').'</option>'.
  929. '<option h="1001" e="inc" value="21">'.cplang('plugins_edit_modules_type_21').'</option>'.
  930. '<option h="1001" e="inc" value="15">'.cplang('plugins_edit_modules_type_15').'</option>'.
  931. '<option h="1001" e="inc" value="16">'.cplang('plugins_edit_modules_type_16').'</option>'.
  932. '<option h="1101" e="inc" value="3">'.cplang('plugins_edit_modules_type_3').'</option>'.
  933. '<option h="1100" e="inc" value="3">'.cplang('plugins_edit_modules_type_29').'</option>'.
  934. '</optgroup>'.
  935. '<optgroup label="'.cplang('plugins_edit_modules_type_g2').'">'.
  936. '<option h="0011" e="class" value="11">'.cplang('plugins_edit_modules_type_11').'</option>'.
  937. '<option h="0011" e="class" value="28">'.cplang('plugins_edit_modules_type_28').'</option>'.
  938. '<option h="0001" e="class" value="12">'.cplang('plugins_edit_modules_type_12').'</option>'.
  939. '</optgroup>'.
  940. '</select>',
  941. '<input type="text" class="txt" size="15" name="newname"><span id="e_n"></span>',
  942. '<span id="m_n"><input type="text" class="txt" size="15" name="newmenu"></span>',
  943. '<span id="u_n"><input type="text" class="txt" size="15" id="url_n" onchange="shide($(\'s_n\'), \'n\')" name="newurl"></span>',
  944. '<span id="a_n"><select name="newadminid">'.
  945. '<option value="0" selected>'.cplang('usergroups_system_0').'</option>'.
  946. '<option value="1">'.cplang('usergroups_system_1').'</option>'.
  947. '<option value="2">'.cplang('usergroups_system_2').'</option>'.
  948. '<option value="3">'.cplang('usergroups_system_3').'</option>'.
  949. '</select></span>',
  950. '<span id="o_n"><input type="text" class="txt" style="width:50px" name="neworder"></span>',
  951. ));
  952. showtagheader('tbody', 'n_n');
  953. showtablerow('class="noborder"', array('', 'colspan="7"'), array(
  954. '',
  955. '&nbsp;&nbsp;&nbsp;<span id="nt_n">'.$lang['plugins_edit_modules_navtitle'].':<input type="text" class="txt" name="newnavtitle"></span>
  956. <span id="ni_n">'.$lang['plugins_edit_modules_navicon'].':<input type="text" class="txt" name="newnavicon"></span>
  957. <span id="nsn_n">'.$lang['plugins_edit_modules_navsubname'].':<input type="text" class="txt" name="newnavsubname"></span>
  958. <span id="nsu_n">'.$lang['plugins_edit_modules_navsuburl'].':<input type="text" class="txt" name="newnavsuburl"></span>
  959. ',
  960. ));
  961. showtagfooter('tbody');
  962. showtagheader('tbody', 'n2_n');
  963. showtablerow('class="noborder"', array('', 'colspan="6"'), array(
  964. '',
  965. '&nbsp;&nbsp;&nbsp;<span id="nsp_n">'.$lang['plugins_edit_modules_param'].':<input type="text" class="txt" name="newparam"></span>',
  966. ));
  967. showtagfooter('tbody');
  968. showsubmit('editsubmit', 'submit', 'del');
  969. showtablefooter();
  970. showformfooter();
  971. showtagfooter('div');
  972. $shideinit = '';
  973. foreach($moduleids as $moduleid) {
  974. $shideinit .= 'shide($("s_'.$moduleid.'"), \''.$moduleid.'\');';
  975. }
  976. echo '<script type="text/JavaScript">
  977. function shide(obj, id) {
  978. v = obj.options[obj.selectedIndex].getAttribute("h");
  979. $("m_" + id).style.display = v.substr(0,1) == "1" ? "" : "none";
  980. $("u_" + id).style.display = v.substr(1,1) == "1" ? "" : "none";
  981. $("a_" + id).style.display = v.substr(2,1) == "1" ? "" : "none";
  982. $("o_" + id).style.display = v.substr(3,1) == "1" ? "" : "none";
  983. if(v.substr(4,1)) {
  984. $("n_" + id).style.display = v.substr(4,1) == "1" ? "" : "none";
  985. $("nt_" + id).style.display = v.substr(4,1) == "1" ? "" : "none";
  986. $("ni_" + id).style.display = v.substr(5,1) == "1" ? "" : "none";
  987. $("nsn_" + id).style.display = v.substr(6,1) == "1" ? "" : "none";
  988. $("nsu_" + id).style.display = v.substr(6,1) == "1" ? "" : "none";
  989. } else {
  990. $("n_" + id).style.display = "none";
  991. }
  992. if(obj.value == 3) {
  993. $("n2_" + id).style.display = "";
  994. $("nsp_" + id).style.display = "";
  995. } else {
  996. $("n2_" + id).style.display = "none";
  997. $("nsp_" + id).style.display = "none";
  998. }
  999. e = obj.options[obj.selectedIndex].getAttribute("e");
  1000. $("e_" + id).innerHTML = e && ($("url_" + id).value == \'\' || $("u_" + id).style.display == "none") ? "." + e + ".php" : "";
  1001. }
  1002. shide($("s_n"), "n");'.$shideinit.'
  1003. </script>';
  1004. showtagheader('div', 'vars', $anchor == 'vars');
  1005. showformheader("plugins&operation=edit&type=vars&pluginid=$pluginid", '', 'varsform');
  1006. showtableheader('plugins_edit_vars');
  1007. showsubtitle(array('', 'display_order', 'plugins_vars_title', 'plugins_vars_variable', 'plugins_vars_type', ''));
  1008. foreach(C::t('common_pluginvar')->fetch_all_by_pluginid($plugin['pluginid']) as $var) {
  1009. $var['type'] = $lang['plugins_edit_vars_type_'. $var['type']];
  1010. $var['title'] .= isset($lang[$var['title']]) ? '<br />'.$lang[$var['title']] : '';
  1011. showtablerow('', array('class="td25"', 'class="td28"'), array(
  1012. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$var[pluginvarid]\">",
  1013. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$var[pluginvarid]]\" value=\"$var[displayorder]\">",
  1014. $var['title'],
  1015. $var['variable'],
  1016. $var['type'],
  1017. "<a href=\"".ADMINSCRIPT."?action=plugins&operation=vars&pluginid=$plugin[pluginid]&pluginvarid=$var[pluginvarid]\" class=\"act\">$lang[detail]</a>"
  1018. ));
  1019. }
  1020. showtablerow('', array('class="td25"', 'class="td28"'), array(
  1021. cplang('add_new'),
  1022. '<input type="text" class="txt" size="2" name="newdisplayorder" value="0">',
  1023. '<input type="text" class="txt" size="15" name="newtitle">',
  1024. '<input type="text" class="txt" size="15" name="newvariable">',
  1025. '<select name="newtype">
  1026. <option value="number">'.cplang('plugins_edit_vars_type_number').'</option>
  1027. <option value="text" selected>'.cplang('plugins_edit_vars_type_text').'</option>
  1028. <option value="textarea">'.cplang('plugins_edit_vars_type_textarea').'</option>
  1029. <option value="radio">'.cplang('plugins_edit_vars_type_radio').'</option>
  1030. <option value="select">'.cplang('plugins_edit_vars_type_select').'</option>
  1031. <option value="selects">'.cplang('plugins_edit_vars_type_selects').'</option>
  1032. <option value="color">'.cplang('plugins_edit_vars_type_color').'</option>
  1033. <option value="date">'.cplang('plugins_edit_vars_type_date').'</option>
  1034. <option value="datetime">'.cplang('plugins_edit_vars_type_datetime').'</option>
  1035. <option value="forum">'.cplang('plugins_edit_vars_type_forum').'</option>
  1036. <option value="forums">'.cplang('plugins_edit_vars_type_forums').'</option>
  1037. <option value="group">'.cplang('plugins_edit_vars_type_group').'</option>
  1038. <option value="groups">'.cplang('plugins_edit_vars_type_groups').'</option>
  1039. <option value="extcredit">'.cplang('plugins_edit_vars_type_extcredit').'</option>
  1040. <option value="forum_text">'.cplang('plugins_edit_vars_type_forum_text').'</option>
  1041. <option value="forum_textarea">'.cplang('plugins_edit_vars_type_forum_textarea').'</option>
  1042. <option value="forum_radio">'.cplang('plugins_edit_vars_type_forum_radio').'</option>
  1043. <option value="forum_select">'.cplang('plugins_edit_vars_type_forum_select').'</option>
  1044. <option value="group_text">'.cplang('plugins_edit_vars_type_group_text').'</option>
  1045. <option value="group_textarea">'.cplang('plugins_edit_vars_type_group_textarea').'</option>
  1046. <option value="group_radio">'.cplang('plugins_edit_vars_type_group_radio').'</option>
  1047. <option value="group_select">'.cplang('plugins_edit_vars_type_group_select').'</option>
  1048. </seletc>',
  1049. ''
  1050. ));
  1051. showsubmit('editsubmit', 'submit', 'del');
  1052. showtablefooter();
  1053. showformfooter();
  1054. showtagfooter('div');
  1055. } else {
  1056. $type = $_GET['type'];
  1057. $anchor = $_GET['anchor'];
  1058. if($type == 'common') {
  1059. $namenew = dhtmlspecialchars(trim($_GET['namenew']));
  1060. $versionnew = strip_tags(trim($_GET['versionnew']));
  1061. $directorynew = dhtmlspecialchars($_GET['directorynew']);
  1062. $identifiernew = trim($_GET['identifiernew']);
  1063. $descriptionnew = dhtmlspecialchars($_GET['descriptionnew']);
  1064. $copyrightnew = $plugin['copyright'] ? addslashes($plugin['copyright']) : dhtmlspecialchars($_GET['copyrightnew']);
  1065. $adminidnew = ($_GET['adminidnew'] > 0 && $_GET['adminidnew'] <= 3) ? $_GET['adminidnew'] : 1;
  1066. if(!$namenew) {
  1067. cpmsg('plugins_edit_name_invalid', '', 'error');
  1068. } elseif(!isplugindir($directorynew)) {
  1069. cpmsg('plugins_edit_directory_invalid', '', 'error');
  1070. } elseif($identifiernew != $plugin['identifier']) {
  1071. $plugin = C::t('common_plugin')->fetch_by_identifier($identifiernew);
  1072. if($plugin || !ispluginkey($identifiernew)) {
  1073. cpmsg('plugins_edit_identifier_invalid', '', 'error');
  1074. }
  1075. }
  1076. if($_GET['langexists'] && !file_exists($langfile = DISCUZ_ROOT.'./data/plugindata/'.$identifiernew.'.lang.php')) {
  1077. cpmsg('plugins_edit_language_invalid', '', 'error', array('langfile' => $langfile));
  1078. }
  1079. $plugin['modules']['extra']['langexists'] = $_GET['langexists'];
  1080. C::t('common_plugin')->update($pluginid, array(
  1081. 'adminid' => $adminidnew,
  1082. 'version' => $versionnew,
  1083. 'name' => $namenew,
  1084. 'modules' => serialize($plugin['modules']),
  1085. 'identifier' => $identifiernew,
  1086. 'description' => $descriptionnew,
  1087. 'directory' => $directorynew,
  1088. 'copyright' => $copyrightnew
  1089. ));
  1090. } elseif($type == 'modules') {
  1091. $modulesnew = array();
  1092. $newname = trim($_GET['newname']);
  1093. $updatenav = false;
  1094. if(is_array($plugin['modules'])) {
  1095. foreach($plugin['modules'] as $moduleid => $module) {
  1096. if(!isset($_GET['delete'][$moduleid])) {
  1097. if($moduleid === 'extra' || $moduleid === 'system') {
  1098. continue;
  1099. }
  1100. $modulesnew[] = array(
  1101. 'name' => $_GET['namenew'][$moduleid],
  1102. 'param' => $_GET['paramnew'][$moduleid],
  1103. 'menu' => $_GET['menunew'][$moduleid],
  1104. 'url' => $_GET['urlnew'][$moduleid],
  1105. 'type' => $_GET['typenew'][$moduleid],
  1106. 'adminid' => ($_GET['adminidnew'][$moduleid] >= 0 && $_GET['adminidnew'][$moduleid] <= 3) ? $_GET['adminidnew'][$moduleid] : $module['adminid'],
  1107. 'displayorder' => intval($_GET['ordernew'][$moduleid]),
  1108. 'navtitle' => $_GET['navtitlenew'][$moduleid],
  1109. 'navicon' => $_GET['naviconnew'][$moduleid],
  1110. 'navsubname' => $_GET['navsubnamenew'][$moduleid],
  1111. 'navsuburl' => $_GET['navsuburlnew'][$moduleid],
  1112. );
  1113. if(in_array($_GET['typenew'][$moduleid], array(1,23,24,25))) {
  1114. $updatenav = true;
  1115. }
  1116. } elseif(in_array($_GET['typenew'][$moduleid], array(1,23,24,25))) {
  1117. $updatenav = true;
  1118. }
  1119. }
  1120. }
  1121. if($updatenav) {
  1122. C::t('common_nav')->delete_by_type_identifier(3, $plugin['identifier']);
  1123. }
  1124. $modulenew = array();
  1125. if(!empty($_GET['newname'])) {
  1126. $modulesnew[] = array(
  1127. 'name' => $_GET['newname'],
  1128. 'param' => $_GET['newparam'],
  1129. 'menu' => $_GET['newmenu'],
  1130. 'url' => $_GET['newurl'],
  1131. 'type' => $_GET['newtype'],
  1132. 'adminid' => $_GET['newadminid'],
  1133. 'displayorder' => intval($_GET['neworder']),
  1134. 'navtitle' => $_GET['newnavtitle'],
  1135. 'navicon' => $_GET['newnavicon'],
  1136. 'navsubname' => $_GET['newnavsubname'],
  1137. 'navsuburl' => $_GET['newnavsuburl'],
  1138. );
  1139. }
  1140. usort($modulesnew, 'modulecmp');
  1141. $namesarray = array();
  1142. foreach($modulesnew as $key => $module) {
  1143. $namekey = in_array($module['type'], array(11, 12)) ? 1 : 0;
  1144. if(!ispluginkey($module['name'])) {
  1145. cpmsg('plugins_edit_modules_name_invalid', '', 'error');
  1146. } elseif(@in_array($module['name'].'?'.$module['param'], $namesarray[$namekey])) {
  1147. cpmsg('plugins_edit_modules_duplicated', '', 'error');
  1148. }
  1149. $namesarray[$namekey][] = $module['name'].'?'.$module['param'];
  1150. $module['menu'] = trim($module['menu']);
  1151. $module['url'] = trim($module['url']);
  1152. $module['adminid'] = $module['adminid'] >= 0 && $module['adminid'] <= 3 ? $module['adminid'] : 1 ;
  1153. $modulesnew[$key] = $module;
  1154. }
  1155. if(!empty($plugin['modules']['extra'])) {
  1156. $modulesnew['extra'] = $plugin['modules']['extra'];
  1157. }
  1158. if(!empty($plugin['modules']['system'])) {
  1159. $modulesnew['system'] = $plugin['modules']['system'];
  1160. }
  1161. C::t('common_plugin')->update($pluginid, array('modules' => serialize($modulesnew)));
  1162. } elseif($type == 'vars') {
  1163. if($_GET['delete']) {
  1164. C::t('common_pluginvar')->delete($_GET['delete']);
  1165. }
  1166. if(is_array($_GET['displayordernew'])) {
  1167. foreach($_GET['displayordernew'] as $id => $displayorder) {
  1168. C::t('common_pluginvar')->update($id, array('displayorder' => $displayorder));
  1169. }
  1170. }
  1171. $newtitle = dhtmlspecialchars(trim($_GET['newtitle']));
  1172. $newvariable = trim($_GET['newvariable']);
  1173. if($newtitle && $newvariable) {
  1174. if(strlen($newvariable) > 40 || !ispluginkey($newvariable) || C::t('common_pluginvar')->check_variable($pluginid, $newvariable)) {
  1175. cpmsg('plugins_edit_var_invalid', '', 'error');
  1176. }
  1177. $data = array(
  1178. 'pluginid' => $pluginid,
  1179. 'displayorder' => $_GET['newdisplayorder'],
  1180. 'title' => $newtitle,
  1181. 'variable' => $newvariable,
  1182. 'type' => $_GET['newtype'],
  1183. );
  1184. C::t('common_pluginvar')->insert($data);
  1185. }
  1186. }
  1187. updatecache(array('plugin', 'setting', 'styles'));
  1188. cleartemplatecache();
  1189. updatemenu('plugin');
  1190. cpmsg('plugins_edit_succeed', "action=plugins&operation=edit&pluginid=$pluginid&anchor=$anchor", 'succeed');
  1191. }
  1192. } elseif($operation == 'delete') {
  1193. $plugin = C::t('common_plugin')->fetch($pluginid);
  1194. $dir = substr($plugin['directory'], 0, -1);
  1195. $modules = dunserialize($plugin['modules']);
  1196. if($modules['system']) {
  1197. cpmsg('plugins_delete_error');
  1198. }
  1199. $installtype = $modules['extra']['installtype'];
  1200. $importfile = DISCUZ_ROOT.'./source/plugin/'.$dir.'/discuz_plugin_'.$dir.($installtype ? '_'.$installtype : '').'.xml';
  1201. if(!file_exists($importfile)) {
  1202. $pluginarray['checkfile'] = $modules['extra']['checkfile'];
  1203. $pluginarray['uninstallfile'] = $modules['extra']['uninstallfile'];
  1204. } else {
  1205. $importtxt = @implode('', file($importfile));
  1206. $pluginarray = getimportdata('Discuz! Plugin');
  1207. }
  1208. $identifier = $plugin['identifier'];
  1209. C::t('common_plugin')->delete($pluginid);
  1210. C::t('common_pluginvar')->delete_by_pluginid($pluginid);
  1211. C::t('common_nav')->delete_by_type_identifier(3, $identifier);
  1212. foreach(array('script', 'template') as $type) {
  1213. loadcache('pluginlanguage_'.$type, 1);
  1214. if(isset($_G['cache']['pluginlanguage_'.$type][$identifier])) {
  1215. unset($_G['cache']['pluginlanguage_'.$type][$identifier]);
  1216. savecache('pluginlanguage_'.$type, $_G['cache']['pluginlanguage_'.$type]);
  1217. }
  1218. }
  1219. updatecache(array('plugin', 'setting', 'styles'));
  1220. cleartemplatecache();
  1221. updatemenu('plugin');
  1222. if(!empty($pluginarray['uninstallfile']) && preg_match('/^[\w\.]+$/', $pluginarray['uninstallfile'])) {
  1223. $filename = DISCUZ_ROOT.'./source/plugin/'.$plugin['identifier'].'/'.$pluginarray['uninstallfile'];
  1224. if(file_exists($filename)) {
  1225. loadcache('pluginlanguage_install');
  1226. $installlang = $_G['cache']['pluginlanguage_install'][$plugin['identifier']];
  1227. @include $filename;
  1228. }
  1229. }
  1230. cron_delete($dir);
  1231. loadcache('pluginlanguage_install', 1);
  1232. if(!empty($_G['cache']['pluginlanguage_install']) && isset($_G['cache']['pluginlanguage_install'][$identifier])) {
  1233. unset($_G['cache']['pluginlanguage_install'][$identifier]);
  1234. savecache('pluginlanguage_install', $_G['cache']['pluginlanguage_install']);
  1235. }
  1236. cloudaddons_uninstall($dir.'.plugin', DISCUZ_ROOT.'./source/plugin/'.$dir);
  1237. cpmsg('plugins_delete_succeed', "action=plugins", 'succeed');
  1238. } elseif($operation == 'vars') {
  1239. $pluginvarid = $_GET['pluginvarid'];
  1240. $pluginvar = C::t('common_plugin')->fetch_by_pluginvarid($pluginid, $pluginvarid);
  1241. if(!$pluginvar) {
  1242. cpmsg('pluginvar_not_found', '', 'error');
  1243. }
  1244. if(!submitcheck('varsubmit')) {
  1245. shownav('plugin');
  1246. showsubmenu($lang['plugins_edit'].' - '.$pluginvar['name'], array(
  1247. array('plugins_list', 'plugins', 0),
  1248. array('config', 'plugins&operation=edit&pluginid='.$pluginid.'&anchor=config', 0),
  1249. array('plugins_config_module', 'plugins&operation=edit&pluginid='.$pluginid.'&anchor=modules', 0),
  1250. array('plugins_config_vars', 'plugins&operation=edit&pluginid='.$pluginid.'&anchor=vars', 1),
  1251. array('export', 'plugins&operation=export&pluginid='.$pluginid, 0),
  1252. ));
  1253. $typeselect = '<select name="typenew" onchange="if(this.value.indexOf(\'select\') != -1) $(\'extra\').style.display=\'\'; else $(\'extra\').style.display=\'none\';">';
  1254. foreach(array('number', 'text', 'radio', 'textarea', 'select', 'selects', 'color', 'date', 'datetime', 'forum', 'forums', 'group', 'groups', 'extcredit',
  1255. 'forum_text', 'forum_textarea', 'forum_radio', 'forum_select', 'group_text', 'group_textarea', 'group_radio', 'group_select') as $type) {
  1256. $typeselect .= '<option value="'.$type.'" '.($pluginvar['type'] == $type ? 'selected' : '').'>'.$lang['plugins_edit_vars_type_'.$type].'</option>';
  1257. }
  1258. $typeselect .= '</select>';
  1259. showformheader("plugins&operation=vars&pluginid=$pluginid&pluginvarid=$pluginvarid");
  1260. showtableheader();
  1261. showtitle($lang['plugins_edit_vars'].' - '.$pluginvar['title']);
  1262. showsetting('plugins_edit_vars_title', 'titlenew', $pluginvar['title'], 'text');
  1263. showsetting('plugins_edit_vars_description', 'descriptionnew', $pluginvar['description'], 'textarea');
  1264. showsetting('plugins_edit_vars_type', '', '', $typeselect);
  1265. showsetting('plugins_edit_vars_variable', 'variablenew', $pluginvar['variable'], 'text');
  1266. showtagheader('tbody', 'extra', $pluginvar['type'] == 'select' || $pluginvar['type'] == 'selects');
  1267. showsetting('plugins_edit_vars_extra', 'extranew', $pluginvar['extra'], 'textarea');
  1268. showtagfooter('tbody');
  1269. showsubmit('varsubmit');
  1270. showtablefooter();
  1271. showformfooter();
  1272. } else {
  1273. $titlenew = cutstr(trim($_GET['titlenew']), 25);
  1274. $descriptionnew = cutstr(trim($_GET['descriptionnew']), 255);
  1275. $variablenew = trim($_GET['variablenew']);
  1276. $extranew = trim($_GET['extranew']);
  1277. if(!$titlenew) {
  1278. cpmsg('plugins_edit_var_title_invalid', '', 'error');
  1279. } elseif($variablenew != $pluginvar['variable']) {
  1280. if(!$variablenew || strlen($variablenew) > 40 || !ispluginkey($variablenew) || C::t('common_pluginvar')->check_variable($pluginid, $variablenew)) {
  1281. cpmsg('plugins_edit_vars_invalid', '', 'error');
  1282. }
  1283. }
  1284. C::t('common_pluginvar')->update_by_pluginvarid($pluginid, $pluginvarid, array(
  1285. 'title' => $titlenew,
  1286. 'description' => $descriptionnew,
  1287. 'type' => $_GET['typenew'],
  1288. 'variable' => $variablenew,
  1289. 'extra' => $extranew
  1290. ));
  1291. updatecache(array('plugin', 'setting', 'styles'));
  1292. cleartemplatecache();
  1293. cpmsg('plugins_edit_vars_succeed', "action=plugins&operation=edit&pluginid=$pluginid&anchor=vars", 'succeed');
  1294. }
  1295. } elseif($operation == 'upgradecheck') {
  1296. if(empty($_GET['identifier'])) {
  1297. $pluginarray = C::t('common_plugin')->fetch_all_data();
  1298. } else {
  1299. $plugin = C::t('common_plugin')->fetch_by_identifier($_GET['identifier']);
  1300. $pluginarray = $plugin ? array($plugin) : array();
  1301. }
  1302. $plugins = $errarray = $newarray = $nowarray = array();
  1303. if(!$pluginarray) {
  1304. cpmsg('plugin_not_found', '', 'error');
  1305. } else {
  1306. $addonids = array();
  1307. foreach($pluginarray as $row) {
  1308. if(ispluginkey($row['identifier'])) {
  1309. $addonids[] = $row['identifier'].'.plugin';
  1310. }
  1311. }
  1312. $checkresult = dunserialize(cloudaddons_upgradecheck($addonids));
  1313. savecache('addoncheck_plugin', $checkresult);
  1314. foreach($pluginarray as $row) {
  1315. $addonid = $row['identifier'].'.plugin';
  1316. if(isset($checkresult[$addonid])) {
  1317. list($return, $newver, $sysver) = explode(':', $checkresult[$addonid]);
  1318. $result[$row['identifier']]['result'] = $return;
  1319. if($sysver) {
  1320. if($sysver > $row['version']) {
  1321. $result[$row['identifier']]['result'] = 2;
  1322. $result[$row['identifier']]['newver'] = $sysver;
  1323. } else {
  1324. $result[$row['identifier']]['result'] = 1;
  1325. }
  1326. } elseif($newver) {
  1327. $result[$row['identifier']]['newver'] = $newver;
  1328. }
  1329. }
  1330. $plugins[$row['identifier']] = $row['name'].' '.$row['version'];
  1331. $modules = dunserialize($row['modules']);
  1332. $file = DISCUZ_ROOT.'./source/plugin/'.$row['identifier'].'/discuz_plugin_'.$row['identifier'].($modules['extra']['installtype'] ? '_'.$modules['extra']['installtype'] : '').'.xml';
  1333. $upgrade = false;
  1334. if(file_exists($file)) {
  1335. $importtxt = @implode('', file($file));
  1336. $pluginarray = getimportdata('Discuz! Plugin', 0, 1);
  1337. $newver = !empty($pluginarray['plugin']['version']) ? $pluginarray['plugin']['version'] : 0;
  1338. if($newver > $row['version']) {
  1339. $upgrade = true;
  1340. $nowarray[] = '<a href="'.ADMINSCRIPT.'?action=plugins&operation=upgrade&pluginid='.$row['pluginid'].'">'.$plugins[$row['identifier']].' -> '.$newver.'</a>';
  1341. }
  1342. }
  1343. if(!$upgrade) {
  1344. $entrydir = DISCUZ_ROOT.'./source/plugin/'.$row['identifier'];
  1345. $upgradestr = '';
  1346. if(file_exists($entrydir)) {
  1347. $d = dir($entrydir);
  1348. while($f = $d->read()) {
  1349. if(preg_match('/^discuz\_plugin\_'.$row['identifier'].'(\_\w+)?\.xml$/', $f, $a)) {
  1350. $extratxt = $extra = substr($a[1], 1);
  1351. if(preg_match('/^SC\_GBK$/i', $extra)) {
  1352. $extratxt = '&#31616;&#20307;&#20013;&#25991;&#29256;';
  1353. } elseif(preg_match('/^SC\_UTF8$/i', $extra)) {
  1354. $extratxt = '&#31616;&#20307;&#20013;&#25991;&#85;&#84;&#70;&#56;&#29256;';
  1355. } elseif(preg_match('/^TC\_BIG5$/i', $extra)) {
  1356. $extratxt = '&#32321;&#39636;&#20013;&#25991;&#29256;';
  1357. } elseif(preg_match('/^TC\_UTF8$/i', $extra)) {
  1358. $extratxt = '&#32321;&#39636;&#20013;&#25991;&#85;&#84;&#70;&#56;&#29256;';
  1359. }
  1360. if($modules['extra']['installtype'] == $extratxt) {
  1361. continue;
  1362. }
  1363. $importtxt = @implode('', file($entrydir.'/'.$f));
  1364. $pluginarray = getimportdata('Discuz! Plugin', 0, 1);
  1365. $newverother = !empty($pluginarray['plugin']['version']) ? $pluginarray['plugin']['version'] : 0;
  1366. if($newverother > $row['version']) {
  1367. $nowarray[] = '<a href="'.ADMINSCRIPT.'?action=plugins&operation=upgrade&pluginid='.$row['pluginid'].'&confirmed=yes&installtype='.rawurlencode($extra).'">'.$plugins[$row['identifier']].' -> '.$newverother.($extra ? ' ('.$extratxt.')' : '').'</a>';
  1368. }
  1369. }
  1370. }
  1371. }
  1372. }
  1373. }
  1374. }
  1375. foreach($result as $id => $row) {
  1376. if($row['result'] == 0) {
  1377. $errarray[] = '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$id.'.plugin" target="_blank">'.$plugins[$id].'</a>';
  1378. } elseif($row['result'] == 2) {
  1379. $newarray[] = '<a href="'.ADMINSCRIPT.'?action=cloudaddons&id='.$id.'.plugin" target="_blank">'.$plugins[$id].($row['newver'] ? ' -> '.$row['newver'] : '').'</a>';
  1380. }
  1381. }
  1382. if(!$nowarray && !$newarray && !$errarray) {
  1383. cpmsg('plugins_validator_noupdate', '', 'error');
  1384. } else {
  1385. shownav('plugin');
  1386. showsubmenu('nav_plugins', array(
  1387. array('plugins_list', 'plugins', 0),
  1388. $isplugindeveloper ? array('plugins_add', 'plugins&operation=add', 0) : array(),
  1389. array('cloudaddons_plugin_link', 'cloudaddons'),
  1390. ), '<a href="'.ADMINSCRIPT.'?action=plugins&operation=upgradecheck" class="bold" style="float:right;padding-right:40px;">'.$lang['plugins_validator'].'</a>');
  1391. showtableheader();
  1392. if($nowarray) {
  1393. showtitle('plugins_validator_nowupgrade');
  1394. foreach($nowarray as $row) {
  1395. showtablerow('class="hover"', array(), array($row));
  1396. }
  1397. }
  1398. if($newarray) {
  1399. showtitle('plugins_validator_newversion');
  1400. foreach($newarray as $row) {
  1401. showtablerow('class="hover"', array(), array($row));
  1402. }
  1403. }
  1404. if($errarray) {
  1405. showtitle('plugins_validator_error');
  1406. foreach($errarray as $row) {
  1407. showtablerow('class="hover"', array(), array($row));
  1408. }
  1409. }
  1410. showtablefooter();
  1411. }
  1412. } elseif($operation == 'sample') {
  1413. $plugin = C::t('common_plugin')->fetch($pluginid);
  1414. if(!$plugin) {
  1415. cpmsg('plugin_not_found', '', 'error');
  1416. }
  1417. $code = moduleample($_GET['typeid'], $_GET['module'], $plugin);
  1418. if(!$code) {
  1419. cpmsg('NO_OPERATION');
  1420. }
  1421. dheader('Content-Disposition: attachment; filename='.$_GET['module'].$_GET['fn']);
  1422. dheader('Content-Type: application/octet-stream');
  1423. ob_end_clean();
  1424. echo $code;
  1425. define('FOOTERDISABLED' , 1);
  1426. exit();
  1427. }
  1428. function moduleample($typeid, $module, $plugin) {
  1429. $samples = array(
  1430. 1 => "<?php
  1431. if(!defined('IN_DISCUZ')) {
  1432. exit('Access Denied');
  1433. }
  1434. ?>",
  1435. 2 => "<?php
  1436. if(!defined('IN_DISCUZ')) {
  1437. exit('Access Denied');
  1438. }
  1439. ?>",
  1440. 3 => "<?php
  1441. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  1442. exit('Access Denied');
  1443. }
  1444. ?>",
  1445. 4 => "<?php
  1446. if(!defined('IN_DISCUZ')) {
  1447. exit('Access Denied');
  1448. }
  1449. class plugin_{PLUGINID} {
  1450. }
  1451. ?>",
  1452. 5 => "<?php
  1453. if(!defined('IN_DISCUZ')) {
  1454. exit('Access Denied');
  1455. }
  1456. class mobileplugin_{PLUGINID} {
  1457. }
  1458. ?>",
  1459. 6 => "<?php
  1460. if(!defined('IN_DISCUZ')) {
  1461. exit('Access Denied');
  1462. }
  1463. class threadplugin_{PLUGINID} {
  1464. var \$name = '';
  1465. var \$iconfile = '';
  1466. var \$buttontext = '';
  1467. }
  1468. ?>");
  1469. $types = array(1 => 1, 5 => 1, 27 => 1, 23 => 1, 25 => 1, 24 => 1, 7 => 2, 17 => 2, 19 => 2, 14 => 2, 26 => 2, 21 => 2, 15 => 2, 16 => 2, 3 => 3, 11 => 4, 28 => 5, 12 => 6);
  1470. $code = $samples[$types[$typeid]];
  1471. $code = str_replace(
  1472. array(
  1473. '{DATE}',
  1474. '{PLUGINID}',
  1475. '{MODULE}',
  1476. '{MODULENAME}',
  1477. '{COPYRIGHT}',
  1478. ),
  1479. array(
  1480. dgmdate(TIMESTAMP, 'Y'),
  1481. $plugin['identifier'],
  1482. $module,
  1483. cplang('plugins_edit_modules_type_'.$typeid),
  1484. $plugin['copyright'],
  1485. ), $code);
  1486. return $code;
  1487. }
  1488. ?>