PageRenderTime 1885ms CodeModel.GetById 54ms RepoModel.GetById 17ms app.codeStats 1ms

/source/admincp/admincp_nav.php

https://github.com/kuaileshike/upload
PHP | 1151 lines | 1011 code | 134 blank | 6 comment | 266 complexity | 89ee26849ace27cf917e9e560a77b873 MD5 | raw file
  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_nav.php 30365 2012-05-24 07:51:03Z chenmengshu $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. if(!$operation) {
  13. $operation = 'headernav';
  14. }
  15. $navs = array('headernav', 'topnav', 'footernav', 'mynav', 'spacenav');
  16. $navdata = array();
  17. foreach($navs as $nav) {
  18. $navdata[] = array('nav_nav_'.$nav, 'nav&operation='.$nav, $nav == $operation);
  19. }
  20. if($operation == 'headernav') {
  21. if(!$do) {
  22. if(!submitcheck('submit')) {
  23. shownav('style', 'nav_setting_customnav');
  24. showsubmenu('nav_setting_customnav', $navdata);
  25. showformheader('nav&operation=headernav');
  26. showtableheader();
  27. showsubtitle(array('', 'display_order', 'name', 'misc_customnav_subtype', 'url', 'type', 'setindex', 'available', ''));
  28. showtagheader('tbody', '', true);
  29. $navlist = $subnavlist = $pluginsubnav = array();
  30. foreach(C::t('common_nav')->fetch_all_by_navtype(0) as $nav) {
  31. if($nav['parentid']) {
  32. $subnavlist[$nav['parentid']][] = $nav;
  33. } else {
  34. $navlist[$nav['id']] = $nav;
  35. }
  36. }
  37. foreach(C::t('common_plugin')->fetch_all_data() as $plugin) {
  38. if($plugin['available']) {
  39. $plugin['modules'] = dunserialize($plugin['modules']);
  40. if(is_array($plugin['modules'])) {
  41. unset($plugin['modules']['extra']);
  42. foreach($plugin['modules'] as $k => $module) {
  43. if(isset($module['name'])) {
  44. switch($module['type']) {
  45. case 5:
  46. $module['url'] = $module['url'] ? $module['url'] : 'plugin.php?id='.$plugin['identifier'].':'.$module['name'];
  47. list($module['menu'], $module['title']) = explode('/', $module['menu']);
  48. $pluginsubnav[] = array('key' => $k, 'id' => $plugin['pluginid'], 'displayorder' => $module['displayorder'], 'menu' => $module['menu'], 'title' => $module['title'], 'url' => $module['url']);
  49. break;
  50. }
  51. }
  52. }
  53. }
  54. }
  55. }
  56. foreach($navlist as $nav) {
  57. if($nav['available'] < 0) {
  58. continue;
  59. }
  60. $navsubtype = array();
  61. $navsubtype[$nav['subtype']] = 'selected="selected"';
  62. $readonly = $nav['type'] == '4' ? ' readonly="readonly"' : '';
  63. showtablerow('', array('class="td25"', 'class="td25"', '', '', '',''), array(
  64. ($subnavlist[$nav['id']] || $nav['identifier'] == 6 && $nav['type'] == 0 && count($pluginsubnav) ? '<a href="javascript:;" class="right" onclick="toggle_group(\'subnav_'.$nav['id'].'\', this)">[+]</a>' : '').(in_array($nav['type'], array('2', '1')) ? "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$nav[id]\">" : '<input type="checkbox" class="checkbox" value="" disabled="disabled" />'),
  65. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$nav[id]]\" value=\"$nav[displayorder]\">",
  66. "<div><input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['name'])."\"$readonly>".
  67. ($nav['identifier'] == 6 && $nav['type'] == 0 ? '' : "<a href=\"###\" onclick=\"addrowdirect=1;addrow(this, 1, $nav[id])\" class=\"addchildboard\">$lang[misc_customnav_add_submenu]</a></div>"),
  68. $nav['identifier'] == 6 && $nav['nav'] == 0 ? $lang['misc_customnav_subtype_menu'] : "<select name=\"subtypenew[$nav[id]]\"><option value=\"0\" $navsubtype[0]>$lang[misc_customnav_subtype_menu]</option><option value=\"1\" $navsubtype[1]>$lang[misc_customnav_subtype_sub]</option></select>",
  69. $nav['type'] == '0' || $nav['type'] == '4' ? "<span title='{$nav['url']}'>".$nav['url'].'<span>' : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['url'])."\">",
  70. cplang($nav['type'] == '0' ? 'inbuilt' : ($nav['type'] == '3' ? 'nav_plugin' : ($nav['type'] == '4' ? 'channel' : 'custom'))),
  71. $nav['url'] != '#' ? "<input name=\"defaultindex\" class=\"radio\" type=\"radio\" value=\"$nav[url]\"".($_G['setting']['defaultindex'] == $nav['url'] ? ' checked="checked"' : '')." />" : '',
  72. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$nav[id]]\" value=\"1\" ".($nav['available'] > 0 ? 'checked' : '').">",
  73. "<a href=\"".ADMINSCRIPT."?action=nav&operation=headernav&do=edit&id=$nav[id]\" class=\"act\">$lang[edit]</a>"
  74. ));
  75. if($nav['identifier'] == 6 && $nav['type'] == 0) {
  76. showtagheader('tbody', 'subnav_'.$nav['id'], false);
  77. $subnavnum = count($pluginsubnav);
  78. foreach($pluginsubnav as $row) {
  79. $subnavnum--;
  80. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  81. '',
  82. '<input type="text" class="txt" size="2" name="plugindisplayordernew['.$row['id'].']['.$row['key'].']" value="'.intval($row['displayorder']).'" />',
  83. '<div class="'.($subnavnum ? 'board' : 'lastboard').'"><input type="text" class="txt" size="15" name="pluginnamenew['.$row['id'].']['.$row['key'].']" value="'.dhtmlspecialchars($row['menu']).'" /></div>',
  84. '<input type="hidden" size="15" name="plugintitlenew['.$row['id'].']['.$row['key'].']" value="'.dhtmlspecialchars($row['title']).'" />',
  85. $row['url'],
  86. cplang('nav_plugin'),
  87. '',
  88. '<input class="checkbox" type="checkbox" checked disabled />',
  89. '<a href="'.ADMINSCRIPT.'?action=plugins&operation=edit&pluginid='.$row['id'].'&anchor=modules" class="act" target="_blank">'.$lang['edit'].'</a>',
  90. ));
  91. }
  92. showtagfooter('tbody');
  93. }
  94. if(!empty($subnavlist[$nav['id']])) {
  95. showtagheader('tbody', 'subnav_'.$nav['id'], false);
  96. $subnavnum = count($subnavlist[$nav['id']]);
  97. foreach($subnavlist[$nav['id']] as $sub) {
  98. $readonly = $sub['type'] == '4' ? ' readonly="readonly"' : '';
  99. $subnavnum--;
  100. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  101. $sub['type'] == '0' || $sub['type'] == '4' ? '' : "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$sub[id]\">",
  102. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$sub[id]]\" value=\"$sub[displayorder]\">",
  103. "<div class=\"".($subnavnum ? 'board' : 'lastboard')."\"><input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$sub[id]]\" value=\"".dhtmlspecialchars($sub['name'])."\"$readonly></div>",
  104. '',
  105. $sub['type'] == '0' || $sub['type'] == '4' ? "<span title='{$sub['url']}'>".$sub['url'].'</span>' : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$sub[id]]\" value=\"".dhtmlspecialchars($sub['url'])."\">",
  106. cplang($sub['type'] == '0' ? 'inbuilt' : ($sub['type'] == '3' ? 'nav_plugin' : ($sub['type'] == '4' ? 'channel' : 'custom'))),
  107. $sub['url'] != '#' ? "<input name=\"defaultindex\" class=\"radio\" type=\"radio\" value=\"$sub[url]\"".($_G['setting']['defaultindex'] == $sub['url'] ? ' checked="checked"' : '')." />" : '',
  108. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$sub[id]]\" value=\"1\" ".($sub['available'] ? 'checked' : '').">",
  109. "<a href=\"".ADMINSCRIPT."?action=nav&operation=headernav&do=edit&id=$sub[id]\" class=\"act\">$lang[edit]</a>"
  110. ));
  111. }
  112. showtagfooter('tbody');
  113. }
  114. }
  115. showtagfooter('tbody');
  116. echo '<tr><td colspan="1"></td><td colspan="8"><div><a href="###" onclick="addrow(this, 0, 0)" class="addtr">'.$lang['misc_customnav_add_menu'].'</a></div></td></tr>';
  117. showsubmit('submit', 'submit', 'del');
  118. showtablefooter();
  119. showformfooter();
  120. loaducenter();
  121. $ucapparray = uc_app_ls();
  122. $applist = '';
  123. if(count($ucapparray) > 1) {
  124. $applist = $lang['misc_customnav_add_ucenter'].'<select name="applist" onchange="app(this)"><option value=""></option>';
  125. foreach($ucapparray as $app) {
  126. if($app['appid'] != UC_APPID) {
  127. $applist .= "<option value=\"$app[url]\">$app[name]</option>";
  128. }
  129. }
  130. $applist .= '</select>';
  131. }
  132. $applist = str_replace("'", "\'", $applist);
  133. echo <<<EOT
  134. <script type="text/JavaScript">
  135. var rowtypedata = [
  136. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="" size="15" type="text" class="txt">'],[1,'<select name="newsubtype[]"><option value="0">$lang[misc_customnav_subtype_menu]</option><option value="1">$lang[misc_customnav_subtype_sub]</option></select>'],[5, '<input name="newurl[]" value="" size="15" type="text" class="txt"> $applist <input type="hidden" name="newparentid[]" value="0" />']],
  137. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<div class=\"board\"><input name="newname[]" value="" size="15" type="text" class="txt"></div>'], [1,'',''], [5, '<input name="newurl[]" value="" size="15" type="text" class="txt"> $applist <input type="hidden" name="newparentid[]" value="{1}" />']]
  138. ];
  139. function app(obj) {
  140. var inputs = obj.parentNode.parentNode.getElementsByTagName('input');
  141. for(var i = 0; i < inputs.length; i++) {
  142. if(inputs[i].name == 'newname[]') {
  143. inputs[i].value = obj.options[obj.options.selectedIndex].innerHTML;
  144. } else if(inputs[i].name == 'newurl[]') {
  145. inputs[i].value = obj.value;
  146. }
  147. }
  148. }
  149. </script>
  150. EOT;
  151. } else {
  152. if($ids = dimplode($_GET['delete'])) {
  153. C::t('common_nav')->delete_by_navtype_id(0, $_GET['delete']);
  154. C::t('common_nav')->delete_by_navtype_parentid(0, $_GET['delete']);
  155. }
  156. if(is_array($_GET['namenew'])) {
  157. foreach($_GET['namenew'] as $id => $name) {
  158. $name = trim(dhtmlspecialchars($name));
  159. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew'][$id]));
  160. $urladd = !empty($_GET['urlnew'][$id]) ? ", url='$urlnew'" : '';
  161. $availablenew[$id] = $name && (!isset($_GET['urlnew'][$id]) || $_GET['urlnew'][$id]) && $_GET['availablenew'][$id];
  162. $displayordernew[$id] = intval($_GET['displayordernew'][$id]);
  163. $data = array(
  164. 'displayorder' => $displayordernew[$id],
  165. 'available' => $availablenew[$id],
  166. );
  167. if(!empty($_GET['urlnew'][$id])) {
  168. $data['url'] = $urlnew;
  169. }
  170. if(!empty($name)) {
  171. $data['name'] = $name;
  172. }
  173. if(isset($_GET['subtypenew'][$id])) {
  174. $data['subtype'] = intval($_GET['subtypenew'][$id]);
  175. }
  176. C::t('common_nav')->update($id, $data);
  177. }
  178. }
  179. if(is_array($_GET['pluginnamenew'])) {
  180. foreach($_GET['pluginnamenew'] as $id => $rows) {
  181. $plugin = C::t('common_plugin')->fetch($id);
  182. $module = dunserialize($plugin['modules']);
  183. foreach($rows as $key => $menunew) {
  184. $module[$key]['menu'] = $menunew.($_GET['plugintitlenew'][$id][$key] ? '/'.$_GET['plugintitlenew'][$id][$key] : '');
  185. $module[$key]['displayorder'] = $_GET['plugindisplayordernew'][$id][$key];
  186. }
  187. C::t('common_plugin')->update($id, array('modules' => serialize($module)));
  188. }
  189. }
  190. if(is_array($_GET['newname'])) {
  191. foreach($_GET['newname'] as $k => $v) {
  192. $v = dhtmlspecialchars(trim($v));
  193. if(!empty($v)) {
  194. $newavailable = $v && $_GET['newurl'][$k];
  195. $newparentid[$k] = intval($_GET['newparentid'][$k]);
  196. $newdisplayorder[$k] = intval($_GET['newdisplayorder'][$k]);
  197. $subtype = isset($_GET['newsubtype'][$k]) ? intval($_GET['newsubtype'][$k]) : 0;
  198. $newurl[$k] = str_replace('&amp;', '&', dhtmlspecialchars($_GET['newurl'][$k]));
  199. $data = array(
  200. 'parentid' => $newparentid[$k],
  201. 'name' => $v,
  202. 'displayorder' => $newdisplayorder[$k],
  203. 'subtype' => $subtype,
  204. 'url' => $newurl[$k],
  205. 'type' => 1,
  206. 'available' => $newavailable,
  207. 'navtype' => 0
  208. );
  209. C::t('common_nav')->insert($data);
  210. }
  211. }
  212. }
  213. if($_GET['defaultindex'] && $_GET['defaultindex'] != '#') {
  214. C::t('common_setting')->update('defaultindex', $_GET['defaultindex']);
  215. }
  216. updatecache('setting');
  217. cpmsg('nav_add_succeed', 'action=nav&operation=headernav', 'succeed');
  218. }
  219. } elseif($do == 'edit' && ($id = $_GET['id'])) {
  220. $nav = C::t('common_nav')->fetch_by_id_navtype($id, 0);
  221. if(!$nav) {
  222. cpmsg('nav_not_found', '', 'error');
  223. }
  224. if(!submitcheck('editsubmit')) {
  225. $string = sprintf('%02d', $nav['highlight']);
  226. shownav('global', 'misc_customnav');
  227. showsubmenu('nav_setting_customnav', $navdata);
  228. $parentselect = array(array('0', cplang('misc_customnav_parent_top')));
  229. $parentname = '';
  230. foreach(C::t('common_nav')->fetch_all_by_navtype_parentid(0, 0) as $pnavs) {
  231. if($pnavs['id'] != $id && !($pnavs['identifier'] == 6 && $pnavs['type'] == 0)) {
  232. $parentselect[] = array($pnavs['id'], '&nbsp;&nbsp;'.$pnavs['name']);
  233. if($nav['parentid'] == $pnavs['id']) {
  234. $parentname = ' - '.$pnavs['name'];
  235. }
  236. }
  237. }
  238. if($nav['logo']) {
  239. $navlogo = str_replace('{STATICURL}', STATICURL, $nav['logo']);
  240. if(!preg_match("/^".preg_quote(STATICURL, '/')."/i", $navlogo) && !(($valueparse = parse_url($navlogo)) && isset($valueparse['host']))) {
  241. $navlogo = $_G['setting']['attachurl'].'common/'.$nav['logo'].'?'.random(6);
  242. }
  243. $logohtml = '<br /><label><input type="checkbox" class="checkbox" name="deletelogo" value="yes" /> '.$lang['delete'].'</label><br /><img src="'.$navlogo.'" />';
  244. }
  245. showformheader("nav&operation=headernav&do=edit&id=$id", 'enctype');
  246. showtableheader();
  247. showtitle(cplang('nav_nav_headernav').$parentname.' - '.$nav['name']);
  248. showsetting('misc_customnav_name', 'namenew', $nav['name'], 'text', $nav['type'] == '4');
  249. showsetting('misc_customnav_parent', array('parentidnew', $parentselect), $nav['parentid'], 'select');
  250. showsetting('misc_customnav_title', 'titlenew', $nav['title'], 'text');
  251. showsetting('misc_customnav_url', 'urlnew', $nav['url'], 'text', ($nav['type'] == '0' || $nav['type'] == '4'));
  252. showsetting('misc_customnav_style', array('stylenew', array(cplang('misc_customnav_style_underline'), cplang('misc_customnav_style_italic'), cplang('misc_customnav_style_bold'))), $string[0], 'binmcheckbox');
  253. showsetting('misc_customnav_style_color', array('colornew', array(
  254. array(0, '<span style="color: '.LINK.';">Default</span>'),
  255. array(1, '<span style="color: Red;">Red</span>'),
  256. array(2, '<span style="color: Orange;">Orange</span>'),
  257. array(3, '<span style="color: Yellow;">Yellow</span>'),
  258. array(4, '<span style="color: Green;">Green</span>'),
  259. array(5, '<span style="color: Cyan;">Cyan</span>'),
  260. array(6, '<span style="color: Blue;">Blue</span>'),
  261. array(7, '<span style="color: Purple;">Purple</span>'),
  262. array(8, '<span style="color: Gray;">Gray</span>'),
  263. )), $string[1], 'mradio2');
  264. showsetting('misc_customnav_url_open', array('targetnew', array(
  265. array(0, cplang('misc_customnav_url_open_default')),
  266. array(1, cplang('misc_customnav_url_open_blank'))
  267. ), TRUE), $nav['target'], 'mradio');
  268. if(!$nav['parentid']) {
  269. showsetting('misc_customnav_logo', 'logonew', $nav['logo'], 'filetext', '', 0, cplang('misc_customnav_logo_comment').$logohtml);
  270. showsetting('misc_customnav_level', array('levelnew', array(
  271. array(0, cplang('nolimit')),
  272. array(1, cplang('member')),
  273. array(2, cplang('usergroups_system_3')),
  274. array(3, cplang('usergroups_system_1')),
  275. )), $nav['level'], 'select');
  276. showsetting('misc_customnav_subtype', array('subtypenew', array(
  277. array(0, cplang('misc_customnav_subtype_menu'), array('subcols' => 'none')),
  278. array(1, cplang('misc_customnav_subtype_sub'), array('subcols' => '')),
  279. )), $nav['subtype'], 'mradio');
  280. showtagheader('tbody', 'subcols', $nav['subtype'], 'sub');
  281. showsetting('misc_customnav_subcols', 'subcolsnew', $nav['subcols'], 'text');
  282. showtagfooter('tbody');
  283. }
  284. showsubmit('editsubmit');
  285. showtablefooter();
  286. showformfooter();
  287. } else {
  288. $namenew = trim(dhtmlspecialchars($_GET['namenew']));
  289. $titlenew = trim(dhtmlspecialchars($_GET['titlenew']));
  290. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew']));
  291. $colornew = $_GET['colornew'];
  292. $parentidnew = $_GET['parentidnew'];
  293. $subtypenew = $_GET['subtypenew'];
  294. $stylebin = '';
  295. for($i = 3; $i >= 1; $i--) {
  296. $stylebin .= empty($_GET['stylenew'][$i]) ? '0' : '1';
  297. }
  298. $stylenew = bindec($stylebin);
  299. $targetnew = intval($_GET['targetnew']) ? 1 : 0;
  300. $levelnew = intval($_GET['levelnew']) && $_GET['levelnew'] > 0 && $_GET['levelnew'] < 4 ? intval($_GET['levelnew']) : 0 ;
  301. $urladd = $nav['type'] != '0' && $urlnew ? ", url='".$urlnew."'" : '';
  302. $subcols = ", subcols='".intval($_GET['subcolsnew'])."'";
  303. $logonew = addslashes($nav['logo']);
  304. if($_FILES['logonew']) {
  305. $upload = new discuz_upload();
  306. if($upload->init($_FILES['logonew'], 'common') && $upload->save()) {
  307. $logonew = $upload->attach['attachment'];
  308. }
  309. } else {
  310. $logonew = $_GET['logonew'];
  311. }
  312. if($_GET['deletelogo'] && $nav['logo']) {
  313. $valueparse = parse_url($nav['logo']);
  314. if(!isset($valueparse['host']) && !strexists($nav['logo'], '{STATICURL}')) {
  315. @unlink($_G['setting']['attachurl'].'common/'.$nav['logo']);
  316. }
  317. $logonew = '';
  318. }
  319. $logoadd = ", logo='$logonew'";
  320. $data = array(
  321. 'name' => $namenew,
  322. 'parentid' => $parentidnew,
  323. 'title' => $titlenew,
  324. 'highlight' => "$stylenew$colornew",
  325. 'target' => $targetnew,
  326. 'level' => $levelnew,
  327. 'subtype' => $subtypenew,
  328. 'subcols' => intval($_GET['subcolsnew']),
  329. 'logo' => $logonew
  330. );
  331. if($nav['type'] != '0' && $urlnew) {
  332. $data['url'] = $urlnew;
  333. }
  334. C::t('common_nav')->update($id, $data);
  335. updatecache('setting');
  336. cpmsg('nav_add_succeed', 'action=nav&operation=headernav', 'succeed');
  337. }
  338. }
  339. } elseif($operation == 'footernav') {
  340. if(!$do) {
  341. if(!submitcheck('submit')) {
  342. shownav('style', 'nav_setting_customnav');
  343. showsubmenu('nav_setting_customnav', $navdata);
  344. showformheader('nav&operation=footernav');
  345. showtableheader();
  346. showsubtitle(array('', 'display_order', 'name', 'url', 'type', 'available', ''));
  347. $navlist = array();
  348. foreach(C::t('common_nav')->fetch_all_by_navtype(1) as $nav) {
  349. $navlist[$nav['id']] = $nav;
  350. }
  351. foreach($navlist as $nav) {
  352. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  353. in_array($nav['type'], array('2', '1')) ? "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$nav[id]\">" : '<input type="checkbox" class="checkbox" value="" disabled="disabled" />',
  354. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$nav[id]]\" value=\"$nav[displayorder]\">",
  355. "<div><input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['name'])."\">",
  356. $nav['type'] == '0' ? $nav['url'] : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['url'])."\">",
  357. cplang($nav['type'] == '0' ? 'inbuilt' : ($nav['type'] == '3' ? 'nav_plugin' : ($nav['type'] == '4' ? 'channel' : 'custom'))),
  358. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$nav[id]]\" value=\"1\" ".($nav['available'] ? 'checked' : '').">",
  359. "<a href=\"".ADMINSCRIPT."?action=nav&operation=footernav&do=edit&id=$nav[id]\" class=\"act\">$lang[edit]</a>"
  360. ));
  361. }
  362. echo '<tr><td colspan="1"></td><td colspan="7"><div><a href="###" onclick="addrow(this, 0, 0)" class="addtr">'.$lang['nav_footernav_add'].'</a></div></td></tr>';
  363. showsubmit('submit', 'submit', 'del');
  364. showtablefooter();
  365. showformfooter();
  366. echo <<<EOT
  367. <script type="text/JavaScript">
  368. var rowtypedata = [
  369. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="" size="15" type="text" class="txt">'], [4, '<input name="newurl[]" value="" size="15" type="text" class="txt">']],
  370. ];
  371. </script>
  372. EOT;
  373. } else {
  374. if($ids = dimplode($_GET['delete'])) {
  375. C::t('common_nav')->delete_by_navtype_id(1, $_GET['delete']);
  376. }
  377. if(is_array($_GET['namenew'])) {
  378. foreach($_GET['namenew'] as $id => $name) {
  379. $name = trim(dhtmlspecialchars($name));
  380. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew'][$id]));
  381. $availablenew[$id] = $name && (!isset($_GET['urlnew'][$id]) || $_GET['urlnew'][$id]) && $_GET['availablenew'][$id];
  382. $displayordernew[$id] = intval($_GET['displayordernew'][$id]);
  383. $data = array(
  384. 'displayorder' => $displayordernew[$id],
  385. 'available' => $availablenew[$id],
  386. );
  387. if(!empty($_GET['urlnew'][$id])) {
  388. $data['url'] = $urlnew;
  389. }
  390. if(!empty($name)) {
  391. $data['name'] = $name;
  392. }
  393. C::t('common_nav')->update($id, $data);
  394. }
  395. }
  396. if(is_array($_GET['newname'])) {
  397. foreach($_GET['newname'] as $k => $v) {
  398. $v = dhtmlspecialchars(trim($v));
  399. if(!empty($v)) {
  400. $newavailable = $v && $_GET['newurl'][$k];
  401. $newdisplayorder[$k] = intval($_GET['newdisplayorder'][$k]);
  402. $newurl[$k] = str_replace('&amp;', '&', dhtmlspecialchars($_GET['newurl'][$k]));
  403. $data = array(
  404. 'name' => $v,
  405. 'displayorder' => $newdisplayorder[$k],
  406. 'url' => $newurl[$k],
  407. 'type' => 1,
  408. 'available' => $newavailable,
  409. 'navtype' => 1
  410. );
  411. C::t('common_nav')->insert($data);
  412. }
  413. }
  414. }
  415. updatecache('setting');
  416. cpmsg('nav_add_succeed', 'action=nav&operation=footernav', 'succeed');
  417. }
  418. } elseif($do == 'edit' && ($id = $_GET['id'])) {
  419. $nav = C::t('common_nav')->fetch_by_id_navtype($id, 1);
  420. if(!$nav) {
  421. cpmsg('nav_not_found', '', 'error');
  422. }
  423. if(!submitcheck('editsubmit')) {
  424. $string = sprintf('%02d', $nav['highlight']);
  425. shownav('global', 'misc_customnav');
  426. showsubmenu('nav_setting_customnav', $navdata);
  427. showformheader("nav&operation=footernav&do=edit&id=$id");
  428. showtableheader();
  429. showtitle(cplang('nav_nav_footernav').' - '.$nav['name']);
  430. showsetting('misc_customnav_name', 'namenew', $nav['name'], 'text');
  431. showsetting('misc_customnav_title', 'titlenew', $nav['title'], 'text');
  432. showsetting('misc_customnav_url', 'urlnew', $nav['url'], 'text', $nav['type'] == '0');
  433. showsetting('misc_customnav_style', array('stylenew', array(cplang('misc_customnav_style_underline'), cplang('misc_customnav_style_italic'), cplang('misc_customnav_style_bold'))), $string[0], 'binmcheckbox');
  434. showsetting('misc_customnav_style_color', array('colornew', array(
  435. array(0, '<span style="color: '.LINK.';">Default</span>'),
  436. array(1, '<span style="color: Red;">Red</span>'),
  437. array(2, '<span style="color: Orange;">Orange</span>'),
  438. array(3, '<span style="color: Yellow;">Yellow</span>'),
  439. array(4, '<span style="color: Green;">Green</span>'),
  440. array(5, '<span style="color: Cyan;">Cyan</span>'),
  441. array(6, '<span style="color: Blue;">Blue</span>'),
  442. array(7, '<span style="color: Purple;">Purple</span>'),
  443. array(8, '<span style="color: Gray;">Gray</span>'),
  444. )), $string[1], 'mradio2');
  445. showsetting('misc_customnav_url_open', array('targetnew', array(
  446. array(0, cplang('misc_customnav_url_open_default')),
  447. array(1, cplang('misc_customnav_url_open_blank'))
  448. ), TRUE), $nav['target'], 'mradio');
  449. if($nav['type']) {
  450. showsetting('misc_customnav_level', array('levelnew', array(
  451. array(0, cplang('nolimit')),
  452. array(1, cplang('member')),
  453. array(2, cplang('usergroups_system_3')),
  454. array(3, cplang('usergroups_system_1')),
  455. )), $nav['level'], 'select');
  456. }
  457. showtagfooter('tbody');
  458. showsubmit('editsubmit');
  459. showtablefooter();
  460. showformfooter();
  461. } else {
  462. $namenew = trim(dhtmlspecialchars($_GET['namenew']));
  463. $titlenew = trim(dhtmlspecialchars($_GET['titlenew']));
  464. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew']));
  465. $colornew = $_GET['colornew'];
  466. $stylebin = '';
  467. for($i = 3; $i >= 1; $i--) {
  468. $stylebin .= empty($_GET['stylenew'][$i]) ? '0' : '1';
  469. }
  470. $stylenew = bindec($stylebin);
  471. $targetnew = intval($_GET['targetnew']) ? 1 : 0;
  472. $levelnew = $nav['type'] ? (intval($_GET['levelnew']) && $_GET['levelnew'] > 0 && $_GET['levelnew'] < 4 ? intval($_GET['levelnew']) : 0) : 0;
  473. $urladd = $nav['type'] != '0' && $urlnew ? ", url='".$urlnew."'" : '';
  474. $data = array(
  475. 'name' => $namenew,
  476. 'title' => $titlenew,
  477. 'highlight' => "$stylenew$colornew",
  478. 'target' => $targetnew,
  479. 'level' => $levelnew
  480. );
  481. if($nav['type'] != '0' && $urlnew) {
  482. $data['url'] = $urlnew;
  483. }
  484. C::t('common_nav')->update($id, $data);
  485. updatecache('setting');
  486. cpmsg('nav_add_succeed', 'action=nav&operation=footernav', 'succeed');
  487. }
  488. }
  489. } elseif($operation == 'spacenav') {
  490. if(!$do) {
  491. if(!submitcheck('submit')) {
  492. shownav('style', 'nav_setting_customnav');
  493. showsubmenu('nav_setting_customnav', $navdata);
  494. showtips('nav_spacenav_tips');
  495. showformheader('nav&operation=spacenav');
  496. showtableheader();
  497. showsubtitle(array('', 'display_order', 'name', 'url', 'type', 'available', ''));
  498. $navlist = array();
  499. foreach(C::t('common_nav')->fetch_all_by_navtype(2) as $nav) {
  500. if($nav['available'] < 0) {
  501. continue;
  502. }
  503. $navlist[$nav['id']] = $nav;
  504. }
  505. foreach($navlist as $nav) {
  506. $navicon = str_replace('{STATICURL}', STATICURL, $nav['icon']);
  507. if(!preg_match("/^".preg_quote(STATICURL, '/')."/i", $navicon) && !(($valueparse = parse_url($navicon)) && isset($valueparse['host']))) {
  508. $navicon = $_G['setting']['attachurl'].'common/'.$nav['icon'].'?'.random(6);
  509. }
  510. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  511. in_array($nav['type'], array('2', '1')) ? "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$nav[id]\">" : '<input type="checkbox" class="checkbox" value="" disabled="disabled" />',
  512. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$nav[id]]\" value=\"$nav[displayorder]\">",
  513. !in_array($nav['name'], array('{userpanelarea1}', '{userpanelarea2}', '{hr}')) ? ("<input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['name'])."\">".
  514. ($nav['icon'] ? '<img src="'.$navicon.'" width="16" height="16" class="vmiddle" />' : '')) : "<input type=\"hidden\" name=\"namenew[$nav[id]]\" value=\"$nav[name]\">".cplang('nav_spacenav_'.str_replace(array('{', '}'), '', $nav['name']), array('navname' => $_G['setting']['navs'][5]['navname'])),
  515. $nav['type'] == '0' || $nav['name'] == '{hr}' ? $nav['url'] : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['url'])."\">",
  516. cplang($nav['type'] == '0' ? 'inbuilt' : ($nav['type'] == '3' ? 'nav_plugin' : ($nav['type'] == '4' ? 'channel' : 'custom'))),
  517. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$nav[id]]\" value=\"1\" ".($nav['available'] ? 'checked' : '').">",
  518. !in_array($nav['name'], array('{userpanelarea1}', '{userpanelarea2}', '{hr}')) ? "<a href=\"".ADMINSCRIPT."?action=nav&operation=spacenav&do=edit&id=$nav[id]\" class=\"act\">$lang[edit]</a>" : ''
  519. ));
  520. }
  521. echo '<tr><td colspan="1"></td><td colspan="7"><div><a href="###" onclick="addrow(this, 0, 0)" class="addtr">'.$lang['nav_spacenav_add'].'</a> &nbsp; <a href="###" onclick="addrow(this, 1, 0)" class="addtr">'.$lang['nav_spacenav_add_hr'].'</a></div></td></tr>';
  522. showsubmit('submit', 'submit', 'del');
  523. showtablefooter();
  524. showformfooter();
  525. echo <<<EOT
  526. <script type="text/JavaScript">
  527. var rowtypedata = [
  528. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="" size="15" type="text" class="txt">'], [4, '<input name="newurl[]" value="" size="15" type="text" class="txt">']],
  529. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="{hr}" type="hidden">$lang[nav_spacenav_hr]'], [4, '<input name="newurl[]" value="" type="hidden">']],
  530. ];
  531. </script>
  532. EOT;
  533. } else {
  534. if($ids = dimplode($_GET['delete'])) {
  535. C::t('common_nav')->delete_by_navtype_id(2, $_GET['delete']);
  536. }
  537. if(is_array($_GET['namenew'])) {
  538. foreach($_GET['namenew'] as $id => $name) {
  539. $name = trim(dhtmlspecialchars($name));
  540. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew'][$id]));
  541. $urladd = !empty($_GET['urlnew'][$id]) ? ", url='$urlnew'" : '';
  542. $availablenew[$id] = $name && (!isset($_GET['urlnew'][$id]) || $_GET['urlnew'][$id]) && $_GET['availablenew'][$id];
  543. $displayordernew[$id] = intval($_GET['displayordernew'][$id]);
  544. $nameadd = !empty($name) ? ", name='$name'" : '';
  545. $data = array(
  546. 'displayorder' => $displayordernew[$id],
  547. 'available' => $availablenew[$id]
  548. );
  549. if(!empty($_GET['urlnew'][$id])) {
  550. $data['url'] = $urlnew;
  551. }
  552. if(!empty($name)) {
  553. $data['name'] = $name;
  554. }
  555. C::t('common_nav')->update($id, $data);
  556. }
  557. }
  558. if(is_array($_GET['newname'])) {
  559. foreach($_GET['newname'] as $k => $v) {
  560. $v = dhtmlspecialchars(trim($v));
  561. if(!empty($v)) {
  562. $newavailable = $v && $_GET['newurl'][$k];
  563. $newdisplayorder[$k] = intval($_GET['newdisplayorder'][$k]);
  564. $newurl[$k] = str_replace('&amp;', '&', dhtmlspecialchars($_GET['newurl'][$k]));
  565. $data = array(
  566. 'name' => $v,
  567. 'displayorder' => $newdisplayorder[$k],
  568. 'url' => $newurl[$k],
  569. 'type' => 1,
  570. 'available' => $newavailable,
  571. 'navtype' => 2
  572. );
  573. C::t('common_nav')->insert($data);
  574. }
  575. }
  576. }
  577. updatecache('setting');
  578. cpmsg('nav_add_succeed', 'action=nav&operation=spacenav', 'succeed');
  579. }
  580. } elseif($do == 'edit' && ($id = $_GET['id'])) {
  581. $nav = C::t('common_nav')->fetch_by_id_navtype($id, 2);
  582. if(!$nav) {
  583. cpmsg('nav_not_found', '', 'error');
  584. }
  585. if(!submitcheck('editsubmit')) {
  586. $nav['allowsubnew'] = 1;
  587. if(substr($nav['subname'], 0, 1) == "\t") {
  588. $nav['allowsubnew'] = 0;
  589. $nav['subname'] = substr($nav['subname'], 1);
  590. }
  591. if($nav['icon']) {
  592. $navicon = str_replace('{STATICURL}', STATICURL, $nav['icon']);
  593. if(!preg_match("/^".preg_quote(STATICURL, '/')."/i", $navicon) && !(($valueparse = parse_url($navicon)) && isset($valueparse['host']))) {
  594. $navicon = $_G['setting']['attachurl'].'common/'.$nav['icon'].'?'.random(6);
  595. }
  596. $naviconhtml = '<br /><label><input type="checkbox" class="checkbox" name="deleteicon" value="yes" /> '.$lang['delete'].'</label><br /><img src="'.$navicon.'" width="16" height="16" />';
  597. }
  598. shownav('global', 'misc_customnav');
  599. showsubmenu('nav_setting_customnav', $navdata);
  600. showformheader("nav&operation=spacenav&do=edit&id=$id", 'enctype');
  601. showtableheader();
  602. showtitle(cplang('nav_nav_spacenav').' - '.$nav['name']);
  603. showsetting('misc_customnav_name', 'namenew', $nav['name'], 'text');
  604. showsetting('misc_customnav_title', 'titlenew', $nav['title'], 'text');
  605. showsetting('misc_customnav_url', 'urlnew', $nav['url'], 'text', $nav['type'] == '0');
  606. showsetting('misc_customnav_icon', 'iconnew', $nav['icon'], 'filetext', '', 0, cplang('misc_customnav_icon_comment').$naviconhtml);
  607. showsetting('misc_customnav_allowsub', 'allowsubnew', $nav['allowsubnew'], 'radio', '', 1);
  608. showsetting('misc_customnav_subname', 'subnamenew', $nav['subname'], 'text');
  609. showsetting('misc_customnav_suburl', 'suburlnew', $nav['suburl'], 'text', $nav['type'] == '0');
  610. showtagfooter('tbody');
  611. showsetting('misc_customnav_url_open', array('targetnew', array(
  612. array(0, cplang('misc_customnav_url_open_default')),
  613. array(1, cplang('misc_customnav_url_open_blank'))
  614. ), TRUE), $nav['target'], 'mradio');
  615. showsetting('misc_customnav_level', array('levelnew', array(
  616. array(0, cplang('nolimit')),
  617. array(1, cplang('member')),
  618. array(2, cplang('usergroups_system_3')),
  619. array(3, cplang('usergroups_system_1')),
  620. )), $nav['level'], 'select');
  621. showtagfooter('tbody');
  622. showsubmit('editsubmit');
  623. showtablefooter();
  624. showformfooter();
  625. } else {
  626. $namenew = trim(dhtmlspecialchars($_GET['namenew']));
  627. $titlenew = trim(dhtmlspecialchars($_GET['titlenew']));
  628. $subnamenew = trim(dhtmlspecialchars($_GET['subnamenew']));
  629. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew']));
  630. $suburlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['suburlnew']));
  631. $targetnew = intval($_GET['targetnew']) ? 1 : 0;
  632. $levelnew = intval($_GET['levelnew']) && $_GET['levelnew'] > 0 && $_GET['levelnew'] < 4 ? intval($_GET['levelnew']) : 0 ;
  633. $urladd = $nav['type'] != '0' && $urlnew ? ", url='$urlnew'" : '';
  634. $urladd .= $nav['type'] != '0' && $suburlnew ? ", suburl='$suburlnew'" : '';
  635. if(empty($_GET['allowsubnew'])) {
  636. $subnamenew = "\t".$subnamenew;
  637. }
  638. $iconnew = addslashes($nav['icon']);
  639. if($_FILES['iconnew']) {
  640. $upload = new discuz_upload();
  641. if($upload->init($_FILES['iconnew'], 'common') && $upload->save()) {
  642. $iconnew = $upload->attach['attachment'];
  643. }
  644. } else {
  645. $iconnew = $_GET['iconnew'];
  646. }
  647. if($_GET['deleteicon'] && $nav['icon']) {
  648. $valueparse = parse_url($nav['icon']);
  649. if(!isset($valueparse['host']) && !strexists($nav['icon'], '{STATICURL}')) {
  650. @unlink($_G['setting']['attachurl'].'common/'.$nav['icon']);
  651. }
  652. $iconnew = '';
  653. }
  654. $iconadd = ", icon='$iconnew'";
  655. $data = array(
  656. 'name' => $namenew,
  657. 'subname' => $subnamenew,
  658. 'title' => $titlenew,
  659. 'target' => $targetnew,
  660. 'level' => $levelnew,
  661. 'icon' => $iconnew
  662. );
  663. if($nav['type'] != '0' && $urlnew) {
  664. $data['url'] = $urlnew;
  665. }
  666. if($nav['type'] != '0' && $suburlnew) {
  667. $data['suburl'] = $suburlnew;
  668. }
  669. C::t('common_nav')->update($id, $data);
  670. updatecache('setting');
  671. cpmsg('nav_add_succeed', 'action=nav&operation=spacenav', 'succeed');
  672. }
  673. }
  674. } elseif($operation == 'mynav') {
  675. if(!$do) {
  676. if(!submitcheck('submit')) {
  677. shownav('style', 'nav_setting_customnav');
  678. showsubmenu('nav_setting_customnav', $navdata);
  679. showformheader('nav&operation=mynav');
  680. showtableheader();
  681. showsubtitle(array('', 'display_order', 'name', 'url', 'type', 'available', ''));
  682. $navlist = array();
  683. foreach(C::t('common_nav')->fetch_all_by_navtype(3) as $nav) {
  684. if($nav['available'] < 0) {
  685. continue;
  686. }
  687. $navlist[$nav['id']] = $nav;
  688. }
  689. foreach($navlist as $nav) {
  690. $navicon = str_replace('{STATICURL}', STATICURL, $nav['icon']);
  691. if(!preg_match("/^".preg_quote(STATICURL, '/')."/i", $navicon) && !(($valueparse = parse_url($navicon)) && isset($valueparse['host']))) {
  692. $navicon = $_G['setting']['attachurl'].'common/'.$nav['icon'].'?'.random(6);
  693. }
  694. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  695. in_array($nav['type'], array('2', '1')) ? "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$nav[id]\">" : '<input type="checkbox" class="checkbox" value="" disabled="disabled" />',
  696. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$nav[id]]\" value=\"$nav[displayorder]\">",
  697. "<input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['name'])."\">".
  698. ($nav['icon'] ? '<img src="'.$navicon.'" width="40" height="40" class="vmiddle" />' : ''),
  699. $nav['type'] == '0' ? $nav['url'] : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['url'])."\">",
  700. cplang($nav['type'] == '0' ? 'inbuilt' : ($nav['type'] == '3' ? 'nav_plugin' : ($nav['type'] == '4' ? 'channel' : 'custom'))),
  701. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$nav[id]]\" value=\"1\" ".($nav['available'] ? 'checked' : '').">",
  702. "<a href=\"".ADMINSCRIPT."?action=nav&operation=mynav&do=edit&id=$nav[id]\" class=\"act\">$lang[edit]</a>"
  703. ));
  704. }
  705. echo '<tr><td colspan="1"></td><td colspan="7"><div><a href="###" onclick="addrow(this, 0, 0)" class="addtr">'.$lang['nav_mynav_add'].'</a></div></td></tr>';
  706. showsubmit('submit', 'submit', 'del');
  707. showtablefooter();
  708. showformfooter();
  709. echo <<<EOT
  710. <script type="text/JavaScript">
  711. var rowtypedata = [
  712. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="" size="15" type="text" class="txt">'], [4, '<input name="newurl[]" value="" size="15" type="text" class="txt">']],
  713. ];
  714. </script>
  715. EOT;
  716. } else {
  717. if($_GET['delete']) {
  718. C::t('common_nav')->delete_by_navtype_id(3, $_GET['delete']);
  719. }
  720. if(is_array($_GET['namenew'])) {
  721. foreach($_GET['namenew'] as $id => $name) {
  722. $name = trim(dhtmlspecialchars($name));
  723. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew'][$id]));
  724. $urladd = !empty($_GET['urlnew'][$id]) ? ", url='$urlnew'" : '';
  725. $availablenew[$id] = $name && (!isset($_GET['urlnew'][$id]) || $_GET['urlnew'][$id]) && $_GET['availablenew'][$id];
  726. $displayordernew[$id] = intval($_GET['displayordernew'][$id]);
  727. $nameadd = !empty($name) ? ", name='$name'" : '';
  728. $data = array(
  729. 'displayorder' => $displayordernew[$id],
  730. 'available' => $availablenew[$id]
  731. );
  732. if(!empty($_GET['urlnew'][$id])) {
  733. $data['url'] = $urlnew;
  734. }
  735. if(!empty($name)) {
  736. $data['name'] = $name;
  737. }
  738. C::t('common_nav')->update($id, $data);
  739. }
  740. }
  741. if(is_array($_GET['newname'])) {
  742. foreach($_GET['newname'] as $k => $v) {
  743. $v = dhtmlspecialchars(trim($v));
  744. if(!empty($v)) {
  745. $newavailable = $v && $_GET['newurl'][$k];
  746. $newdisplayorder[$k] = intval($_GET['newdisplayorder'][$k]);
  747. $newurl[$k] = str_replace('&amp;', '&', dhtmlspecialchars($_GET['newurl'][$k]));
  748. $data = array(
  749. 'name' => $v,
  750. 'displayorder' => $newdisplayorder[$k],
  751. 'url' => $newurl[$k],
  752. 'type' => 1,
  753. 'available' => $newavailable,
  754. 'navtype' => 3
  755. );
  756. C::t('common_nav')->insert($data);
  757. }
  758. }
  759. }
  760. updatecache('setting');
  761. cpmsg('nav_add_succeed', 'action=nav&operation=mynav', 'succeed');
  762. }
  763. } elseif($do == 'edit' && ($id = $_GET['id'])) {
  764. $nav = C::t('common_nav')->fetch_by_id_navtype($id, 3);
  765. if(!$nav) {
  766. cpmsg('nav_not_found', '', 'error');
  767. }
  768. if(!submitcheck('editsubmit')) {
  769. $nav['allowsubnew'] = 1;
  770. if(substr($nav['subname'], 0, 1) == "\t") {
  771. $nav['allowsubnew'] = 0;
  772. $nav['subname'] = substr($nav['subname'], 1);
  773. }
  774. if($nav['icon']) {
  775. $navicon = str_replace('{STATICURL}', STATICURL, $nav['icon']);
  776. if(!preg_match("/^".preg_quote(STATICURL, '/')."/i", $navicon) && !(($valueparse = parse_url($navicon)) && isset($valueparse['host']))) {
  777. $navicon = $_G['setting']['attachurl'].'common/'.$nav['icon'].'?'.random(6);
  778. }
  779. $naviconhtml = '<br /><label><input type="checkbox" class="checkbox" name="deleteicon" value="yes" /> '.$lang['delete'].'</label><br /><img src="'.$navicon.'" width="40" height="40" />';
  780. }
  781. shownav('global', 'misc_customnav');
  782. showsubmenu('nav_setting_customnav', $navdata);
  783. showformheader("nav&operation=mynav&do=edit&id=$id", 'enctype');
  784. showtableheader();
  785. showtitle(cplang('nav_nav_mynav').' - '.$nav['name']);
  786. showsetting('misc_customnav_name', 'namenew', $nav['name'], 'text');
  787. showsetting('misc_customnav_title', 'titlenew', $nav['title'], 'text');
  788. showsetting('misc_customnav_url', 'urlnew', $nav['url'], 'text', $nav['type'] == '0');
  789. showsetting('misc_customnav_icon', 'iconnew', $nav['icon'], 'filetext', '', 0, cplang('misc_mynav_icon_comment').$naviconhtml);
  790. showsetting('misc_customnav_url_open', array('targetnew', array(
  791. array(0, cplang('misc_customnav_url_open_default')),
  792. array(1, cplang('misc_customnav_url_open_blank'))
  793. ), TRUE), $nav['target'], 'mradio');
  794. showsetting('misc_customnav_level', array('levelnew', array(
  795. array(0, cplang('nolimit')),
  796. array(1, cplang('member')),
  797. array(2, cplang('usergroups_system_3')),
  798. array(3, cplang('usergroups_system_1')),
  799. )), $nav['level'], 'select');
  800. showtagfooter('tbody');
  801. showsubmit('editsubmit');
  802. showtablefooter();
  803. showformfooter();
  804. } else {
  805. $namenew = trim(dhtmlspecialchars($_GET['namenew']));
  806. $titlenew = trim(dhtmlspecialchars($_GET['titlenew']));
  807. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew']));
  808. $targetnew = intval($_GET['targetnew']) ? 1 : 0;
  809. $levelnew = intval($_GET['levelnew']) && $_GET['levelnew'] > 0 && $_GET['levelnew'] < 4 ? intval($_GET['levelnew']) : 0 ;
  810. $urladd = $nav['type'] != '0' && $urlnew ? ", url='$urlnew'" : '';
  811. $iconnew = addslashes($nav['icon']);
  812. if($_FILES['iconnew']) {
  813. $upload = new discuz_upload();
  814. if($upload->init($_FILES['iconnew'], 'common') && $upload->save()) {
  815. $iconnew = $upload->attach['attachment'];
  816. }
  817. } else {
  818. $iconnew = $_GET['iconnew'];
  819. }
  820. if($_GET['deleteicon'] && $nav['icon']) {
  821. $valueparse = parse_url($nav['icon']);
  822. if(!isset($valueparse['host']) && !strexists($nav['icon'], '{STATICURL}')) {
  823. @unlink($_G['setting']['attachurl'].'common/'.$nav['icon']);
  824. }
  825. $iconnew = '';
  826. }
  827. $iconadd = ", icon='$iconnew'";
  828. $data = array(
  829. 'name' => $namenew,
  830. 'title' => $titlenew,
  831. 'target' => $targetnew,
  832. 'level' => $levelnew,
  833. 'icon' => $iconnew
  834. );
  835. if($nav['type'] != '0' && $urlnew) {
  836. $data['url'] = $urlnew;
  837. }
  838. C::t('common_nav')->update($id, $data);
  839. updatecache('setting');
  840. cpmsg('nav_add_succeed', 'action=nav&operation=mynav', 'succeed');
  841. }
  842. }
  843. } elseif($operation == 'topnav') {
  844. if(!$do) {
  845. if(!submitcheck('submit')) {
  846. shownav('style', 'nav_setting_customnav');
  847. showsubmenu('nav_setting_customnav', $navdata);
  848. showformheader('nav&operation=topnav');
  849. showtableheader();
  850. showsubtitle(array('', 'display_order', 'name', 'setting_styles_global_topnavtype', 'url', 'type', 'available', ''));
  851. $navlist = array();
  852. foreach(C::t('common_nav')->fetch_all_by_navtype(4) as $nav) {
  853. $navlist[$nav['id']] = $nav;
  854. }
  855. foreach($navlist as $nav) {
  856. $navtype = array();
  857. $navtype[$nav['subtype']] = 'selected="selected"';
  858. showtablerow('', array('class="td25"', 'class="td25"', '', ''), array(
  859. in_array($nav['type'], array('2', '1')) ? "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$nav[id]\">" : '<input type="checkbox" class="checkbox" value="" disabled="disabled" />',
  860. "<input type=\"text\" class=\"txt\" size=\"2\" name=\"displayordernew[$nav[id]]\" value=\"$nav[displayorder]\">",
  861. "<div><input type=\"text\" class=\"txt\" size=\"15\" name=\"namenew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['name'])."\">",
  862. "<select name=\"subtypenew[$nav[id]]\"><option value=\"0\" $navtype[0]>$lang[setting_styles_global_topnavtype_0]</option><option value=\"1\" $navtype[1]>$lang[setting_styles_global_topnavtype_1]</option></select>",
  863. $nav['type'] == '0' ? $nav['url'] : "<input type=\"text\" class=\"txt\" size=\"15\" name=\"urlnew[$nav[id]]\" value=\"".dhtmlspecialchars($nav['url'])."\">",
  864. cplang($nav['type'] == '0' ? 'inbuilt' : ($nav['type'] == '3' ? 'nav_plugin' : ($nav['type'] == '4' ? 'channel' : 'custom'))),
  865. "<input class=\"checkbox\" type=\"checkbox\" name=\"availablenew[$nav[id]]\" value=\"1\" ".($nav['available'] ? 'checked' : '').">",
  866. "<a href=\"".ADMINSCRIPT."?action=nav&operation=topnav&do=edit&id=$nav[id]\" class=\"act\">$lang[edit]</a>"
  867. ));
  868. }
  869. echo '<tr><td colspan="1"></td><td colspan="7"><div><a href="###" onclick="addrow(this, 0, 0)" class="addtr">'.$lang['nav_topnav_add'].'</a></div></td></tr>';
  870. showsubmit('submit', 'submit', 'del');
  871. showtablefooter();
  872. showformfooter();
  873. echo <<<EOT
  874. <script type="text/JavaScript">
  875. var rowtypedata = [
  876. [[1, '', 'td25'], [1,'<input name="newdisplayorder[]" value="" size="3" type="text" class="txt">', 'td25'], [1, '<input name="newname[]" value="" size="15" type="text" class="txt">'], [1, '<select name="newsubtype[]"><option value="0">$lang[setting_styles_global_topnavtype_0]</option><option value="1">$lang[setting_styles_global_topnavtype_1]</option></select>'], [4, '<input name="newurl[]" value="" size="15" type="text" class="txt">']],
  877. ];
  878. </script>
  879. EOT;
  880. } else {
  881. if($_GET['delete']) {
  882. C::t('common_nav')->delete_by_navtype_id(4, $_GET['delete']);
  883. }
  884. if(is_array($_GET['namenew'])) {
  885. foreach($_GET['namenew'] as $id => $name) {
  886. $name = trim(dhtmlspecialchars($name));
  887. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew'][$id]));
  888. $availablenew[$id] = $name && (!isset($_GET['urlnew'][$id]) || $_GET['urlnew'][$id]) && $_GET['availablenew'][$id];
  889. $displayordernew[$id] = intval($_GET['displayordernew'][$id]);
  890. $data = array(
  891. 'displayorder' => $displayordernew[$id],
  892. 'available' => $availablenew[$id]
  893. );
  894. if(!empty($_GET['urlnew'][$id])) {
  895. $data['url'] = $urlnew;
  896. }
  897. if(!empty($name)) {
  898. $data['name'] = $name;
  899. }
  900. if(isset($_GET['subtypenew'][$id])) {
  901. $data['subtype'] = intval($_GET['subtypenew'][$id]);
  902. }
  903. C::t('common_nav')->update($id, $data);
  904. }
  905. }
  906. if(is_array($_GET['newname'])) {
  907. foreach($_GET['newname'] as $k => $v) {
  908. $v = dhtmlspecialchars(trim($v));
  909. if(!empty($v)) {
  910. $newavailable = $v && $_GET['newurl'][$k];
  911. $newdisplayorder[$k] = intval($_GET['newdisplayorder'][$k]);
  912. $subtype = isset($_GET['newsubtype'][$k]) ? intval($_GET['newsubtype'][$k]) : 0;
  913. $newurl[$k] = str_replace('&amp;', '&', dhtmlspecialchars($_GET['newurl'][$k]));
  914. $data = array(
  915. 'name' => $v,
  916. 'displayorder' => $newdisplayorder[$k],
  917. 'subtype' => $subtype,
  918. 'url' => $newurl[$k],
  919. 'type' => 1,
  920. 'available' => $newavailable,
  921. 'navtype' => 4
  922. );
  923. C::t('common_nav')->insert($data);
  924. }
  925. }
  926. }
  927. updatecache('setting');
  928. cpmsg('nav_add_succeed', 'action=nav&operation=topnav', 'succeed');
  929. }
  930. } elseif($do == 'edit' && ($id = $_GET['id'])) {
  931. $nav = C::t('common_nav')->fetch_by_id_navtype($id, 4);
  932. if(!$nav) {
  933. cpmsg('nav_not_found', '', 'error');
  934. }
  935. if(!submitcheck('editsubmit')) {
  936. $string = sprintf('%02d', $nav['highlight']);
  937. shownav('global', 'misc_customnav');
  938. showsubmenu('nav_setting_customnav', $navdata);
  939. showformheader("nav&operation=topnav&do=edit&id=$id");
  940. showtableheader();
  941. showtitle(cplang('nav_nav_topnav').' - '.$nav['name']);
  942. showsetting('misc_customnav_name', 'namenew', $nav['name'], 'text');
  943. showsetting('setting_styles_global_topnavtype', array('subtypenew', array(
  944. array(0, cplang('setting_styles_global_topnavtype_0')),
  945. array(1, cplang('setting_styles_global_topnavtype_1')),
  946. )), $nav['subtype'], 'select');
  947. showsetting('misc_customnav_title', 'titlenew', $nav['title'], 'text');
  948. showsetting('misc_customnav_url', 'urlnew', $nav['url'], 'text', $nav['type'] == '0');
  949. showsetting('misc_customnav_style', array('stylenew', array(cplang('misc_customnav_style_underline'), cplang('misc_customnav_style_italic'), cplang('misc_customnav_style_bold'))), $string[0], 'binmcheckbox');
  950. showsetting('misc_customnav_style_color', array('colornew', array(
  951. array(0, '<span style="color: '.LINK.';">Default</span>'),
  952. array(1, '<span style="color: Red;">Red</span>'),
  953. array(2, '<span style="color: Orange;">Orange</span>'),
  954. array(3, '<span style="color: Yellow;">Yellow</span>'),
  955. array(4, '<span style="color: Green;">Green</span>'),
  956. array(5, '<span style="color: Cyan;">Cyan</span>'),
  957. array(6, '<span style="color: Blue;">Blue</span>'),
  958. array(7, '<span style="color: Purple;">Purple</span>'),
  959. array(8, '<span style="color: Gray;">Gray</span>'),
  960. )), $string[1], 'mradio2');
  961. showsetting('misc_customnav_url_open', array('targetnew', array(
  962. array(0, cplang('misc_customnav_url_open_default')),
  963. array(1, cplang('misc_customnav_url_open_blank'))
  964. ), TRUE), $nav['target'], 'mradio');
  965. if($nav['type']) {
  966. showsetting('misc_customnav_level', array('levelnew', array(
  967. array(0, cplang('nolimit')),
  968. array(1, cplang('member')),
  969. array(2, cplang('usergroups_system_3')),
  970. array(3, cplang('usergroups_system_1')),
  971. )), $nav['level'], 'select');
  972. }
  973. showtagfooter('tbody');
  974. showsubmit('editsubmit');
  975. showtablefooter();
  976. showformfooter();
  977. } else {
  978. $namenew = trim(dhtmlspecialchars($_GET['namenew']));
  979. $titlenew = trim(dhtmlspecialchars($_GET['titlenew']));
  980. $urlnew = str_replace(array('&amp;'), array('&'), dhtmlspecialchars($_GET['urlnew']));
  981. $colornew = $_GET['colornew'];
  982. $subtypenew = $_GET['subtypenew'];
  983. $stylebin = '';
  984. for($i = 3; $i >= 1; $i--) {
  985. $stylebin .= empty($_GET['stylenew'][$i]) ? '0' : '1';
  986. }
  987. $stylenew = bindec($stylebin);
  988. $targetnew = intval($_GET['targetnew']) ? 1 : 0;
  989. $levelnew = $nav['type'] ? (intval($_GET['levelnew']) && $_GET['levelnew'] > 0 && $_GET['levelnew'] < 4 ? intval($_GET['levelnew']) : 0) : 0;
  990. $urladd = $nav['type'] != '0' && $urlnew ? ", url='".$urlnew."'" : '';
  991. $data = array(
  992. 'name' => $namenew,
  993. 'title' => $titlenew,
  994. 'highlight' => "$stylenew$colornew",
  995. 'target' => $targetnew,
  996. 'level' => $levelnew,
  997. 'subtype' => $subtypenew
  998. );
  999. if($nav['type'] != '0' && $urlnew) {
  1000. $data['url'] = $urlnew;
  1001. }
  1002. C::t('common_nav')->update($id, $data);
  1003. updatecache('setting');
  1004. cpmsg('nav_add_succeed', 'action=nav&operation=topnav', 'succeed');
  1005. }
  1006. }
  1007. }
  1008. ?>