PageRenderTime 35ms CodeModel.GetById 62ms RepoModel.GetById 0ms app.codeStats 0ms

/Zone/Fdl/popup_util.php

https://github.com/CircleCode/dynacase-core
PHP | 345 lines | 271 code | 36 blank | 38 comment | 34 complexity | ba85102170d6e020ca579c04ed224afc MD5 | raw file
  1. <?php
  2. /*
  3. * @author Anakeen
  4. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License
  5. * @package FDL
  6. */
  7. /**
  8. * Utilities functions to generate popup menu
  9. *
  10. * @author Anakeen
  11. * @version $Id: popup_util.php,v 1.15 2005/10/07 14:07:53 eric Exp $
  12. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License
  13. * @package FDL
  14. * @subpackage
  15. */
  16. /**
  17. */
  18. include_once ("FDL/Class.Doc.php");
  19. function popupInit($name, $items)
  20. {
  21. global $menuitems;
  22. global $tmenus;
  23. global $tsubmenu;
  24. // ------------------------------------------------------
  25. // definition of popup menu
  26. $menuitems[$name] = $items;
  27. $tsubmenu[$name] = array();
  28. if (count($menuitems[$name]) == 0) {
  29. $jsarray = "[]";
  30. } else {
  31. $jsarray = "[";
  32. foreach ($menuitems[$name] as $ki => $imenu) {
  33. $jsarray.= '"' . $imenu . '",';
  34. global $ {
  35. $imenu
  36. };
  37. $ {
  38. $imenu
  39. } = 'v' . $ki;
  40. $tsubmenu[$name]['v' . $ki] = "";
  41. }
  42. // replace last comma by ']'
  43. $jsarray[strlen($jsarray) - 1] = "]";
  44. }
  45. $tmenus[$name]["menuitems"] = $jsarray;
  46. $tmenus[$name]["name"] = $name;
  47. $tmenus[$name]["nbmitem"] = count($menuitems[$name]);
  48. $tmenus[$name]["menulabel"] = '["' . implode('","', $tsubmenu[$name]) . '"]';
  49. $tmenus[$name]["nbdiv"] = "";
  50. }
  51. function popupAddItem($name, $imenu)
  52. {
  53. global $menuitems;
  54. global $tmenus;
  55. global $tsubmenu;
  56. // ------------------------------------------------------
  57. // definition of popup menu
  58. $menuitems[$name][] = $imenu;
  59. $ki = count($menuitems[$name]) - 1;
  60. global $
  61. {
  62. $imenu
  63. };
  64. $
  65. {
  66. $imenu
  67. } = 'v' . $ki;
  68. $tsubmenu[$name]['v' . $ki] = "";
  69. $tmenus[$name]["menuitems"] = '["' . implode('","', $menuitems[$name]) . '"]';
  70. $tmenus[$name]["nbmitem"] = count($menuitems[$name]);
  71. $tmenus[$name]["menulabel"] = '["' . implode('","', $tsubmenu[$name]) . '"]';
  72. }
  73. function popupInitItem($name, $k)
  74. {
  75. global $tmenuaccess;
  76. global $menuitems;
  77. if (!isset($tmenuaccess[$name][$k]["divid"])) {
  78. $tmenuaccess[$name][$k]["divid"] = $k;
  79. reset($menuitems[$name]);
  80. while (list($ki, $v) = each($menuitems[$name])) {
  81. $tmenuaccess[$name][$k]['v' . $ki] = 2; // invisible
  82. }
  83. }
  84. }
  85. function popupSubMenu($name, $nameid, $mlabel)
  86. {
  87. global $tsubmenu;
  88. global $$nameid;
  89. $tsubmenu[$name][$$nameid] = $mlabel;
  90. }
  91. function popupGetSubItems($name, $mlabel)
  92. {
  93. global $menuitems;
  94. global $tmenus;
  95. global $tsubmenu;
  96. $ti = array();
  97. $ki = 0;
  98. foreach ($tsubmenu[$name] as $k => $v) {
  99. if ($v == $mlabel) {
  100. $ti[] = $menuitems[$name][$ki];
  101. }
  102. $ki++;
  103. }
  104. return $ti;
  105. }
  106. function popupActive($name, $k, $nameid)
  107. {
  108. global $tmenuaccess;
  109. global $$nameid;
  110. popupInitItem($name, $k);
  111. $tmenuaccess[$name][$k][$$nameid] = POPUP_ACTIVE;
  112. }
  113. function popupInactive($name, $k, $nameid)
  114. {
  115. global $tmenuaccess;
  116. global $$nameid;
  117. popupInitItem($name, $k);
  118. $tmenuaccess[$name][$k][$$nameid] = POPUP_INACTIVE;
  119. }
  120. function popupInvisible($name, $k, $nameid)
  121. {
  122. global $tmenuaccess;
  123. global $$nameid;
  124. popupInitItem($name, $k);
  125. $tmenuaccess[$name][$k][$$nameid] = POPUP_INVISIBLE;
  126. }
  127. // active if Ctrl Key Pushed
  128. function popupCtrlActive($name, $k, $nameid)
  129. {
  130. global $tmenuaccess;
  131. global $$nameid;
  132. popupInitItem($name, $k);
  133. $tmenuaccess[$name][$k][$$nameid] = POPUP_CTRLACTIVE;
  134. }
  135. // inactive if Ctrl Key Pushed
  136. function popupCtrlInactive($name, $k, $nameid)
  137. {
  138. global $tmenuaccess;
  139. global $$nameid;
  140. popupInitItem($name, $k);
  141. $tmenuaccess[$name][$k][$$nameid] = POPUP_CTRLINACTIVE;
  142. }
  143. function popupGetAccessItem($name, $k, $nameid)
  144. {
  145. global $tmenuaccess;
  146. global $$nameid;
  147. return ($tmenuaccess[$name][$k][$$nameid]);
  148. }
  149. function vcompare($a, $b)
  150. {
  151. $na = intval(substr($a, 1));
  152. $nb = intval(substr($b, 1));
  153. if ($na == $nb) return 0;
  154. return ($na < $nb) ? -1 : 1;
  155. }
  156. function popupNoCtrlKey()
  157. {
  158. global $tmenuaccess;
  159. global $tsubmenu;
  160. if (isset($tmenuaccess)) {
  161. $kv = 0; // index for item
  162. foreach ($tmenuaccess as $name => $v) foreach ($v as $ki => $vi) foreach ($vi as $kj => $vj) {
  163. if ($vj == 3) {
  164. $tmenuaccess[$name][$ki][$kj] = 1;
  165. if ($tsubmenu[$name][$kj] == "") $tsubmenu[$name][$kj] = "ctrlkey";
  166. }
  167. }
  168. }
  169. }
  170. function popupGetAccess($popname)
  171. {
  172. global $tmenuaccess;
  173. global $menuitems;
  174. $ta = $tmenuaccess[$popname][1];
  175. array_shift($ta);
  176. $ti = $menuitems[$popname];
  177. $tu = array();
  178. foreach ($ta as $v) {
  179. $tu[current($ti) ] = $v;
  180. next($ti);
  181. }
  182. return $tu;
  183. }
  184. function popupSetAccess($popname, $ta)
  185. {
  186. global $tmenuaccess;
  187. global $menuitems;
  188. $ti = $menuitems[$popname];
  189. foreach ($ta as $i => $a) {
  190. $kt = array_keys($ti, $i);
  191. if (count($kt) == 1) {
  192. $k = $kt[0];
  193. $tmenuaccess[$popname][1]["v$k"] = $a;
  194. }
  195. }
  196. }
  197. function popupGen($kdiv = "nothing")
  198. {
  199. global $tmenuaccess;
  200. global $menuitems;
  201. global $tmenus;
  202. /**
  203. * @var Action $action
  204. */
  205. global $action;
  206. static $first = 1;
  207. global $tcmenus; // closeAll menu
  208. global $tsubmenu;
  209. if ($first) {
  210. // static part
  211. $action->parent->AddJsRef($action->GetParam("CORE_JSURL") . "/DHTMLapi.js");
  212. $action->parent->AddJsRef($action->GetParam("CORE_JSURL") . "/geometry.js");
  213. $action->parent->AddJsRef($action->GetParam("CORE_PUBURL") . "/FDL/Layout/common.js");
  214. $action->parent->AddJsRef($action->Getparam("CORE_PUBURL") . "/FDL/Layout/popupfunc.js");
  215. // css pour popup
  216. // $cssfile=$action->Getparam("CORE_PUBDIR")."/FDL/Layout/popup.css";
  217. // $csslay = new Layout($cssfile,$action);
  218. // $action->parent->AddCssCode($csslay->gen());
  219. $action->parent->AddCssRef("FDL:POPUP.CSS", true);
  220. $first = 0;
  221. }
  222. $lpopup = new Layout($action->Getparam("CORE_PUBDIR") . "/FDL/Layout/popup.js", $action);
  223. if (isset($tmenuaccess)) {
  224. $kv = 0; // index for item
  225. $tma = array();
  226. foreach ($tmenuaccess as $name => $v2) {
  227. $nbdiv = 0;
  228. while (list($k, $v) = each($v2)) {
  229. uksort($v, 'vcompare');
  230. $tma[$kv]["vmenuitems"] = "[";
  231. foreach ($v as $ki => $vi) {
  232. if ($ki[0] == 'v') // its a value
  233. $tma[$kv]["vmenuitems"].= "" . $vi . ",";
  234. }
  235. // replace last comma by ']'
  236. $tma[$kv]["vmenuitems"][strlen($tma[$kv]["vmenuitems"]) - 1] = "]";
  237. $tma[$kv]["name"] = $name;
  238. $tma[$kv]["divid"] = $v["divid"];
  239. $kv++;
  240. $nbdiv++;
  241. }
  242. $tmenus[$name]["nbdiv"] = $nbdiv;
  243. $tmenus[$name]["menulabel"] = '["' . implode('","', $tsubmenu[$name]) . '"]';
  244. }
  245. $lpopup->SetBlockData("MENUACCESS", $tma);
  246. $lpopup->SetBlockData("MENUS", $tmenus);
  247. if (isset($tcmenus)) $tcmenus = array_merge($tcmenus, $tmenus);
  248. else $tcmenus = $tmenus;
  249. foreach ($tsubmenu as $kl => $vl) foreach ($vl as $sm) if ($sm != "") $tcmenus[$sm]["name"] = $sm;
  250. $lpopup->SetBlockData("CMENUS", $tcmenus);
  251. }
  252. $action->parent->AddJsCode($lpopup->gen());
  253. if ($action->Read("navigator", "") == "EXPLORER") $action->lay->Set("divpos", "absolute");
  254. else $action->lay->Set("divpos", "fixed");
  255. $tmenus = array(); // re-init (for next time)
  256. $tmenuaccess = array();
  257. // $menuitems[$name] = array();
  258. unset($tmenus);
  259. unset($tmenusaccess);
  260. unset($tsubmenu);
  261. unset($tmenuitems);
  262. }
  263. function popupAddGen($kdiv = "nothing")
  264. {
  265. global $tmenuaccess;
  266. global $menuitems;
  267. global $tmenus;
  268. /**
  269. * @var Action $action
  270. */
  271. global $action;
  272. global $tsubmenu;
  273. $lpopup = new Layout($action->Getparam("CORE_PUBDIR") . "/FDL/Layout/popupadd.js");
  274. if (isset($tmenuaccess)) {
  275. reset($tmenuaccess);
  276. $kv = 0; // index for item
  277. $tma = array();
  278. while (list($name, $v2) = each($tmenuaccess)) {
  279. $nbdiv = 0;
  280. while (list($k, $v) = each($v2)) {
  281. uksort($v, 'vcompare');
  282. $tma[$kv]["vmenuitems"] = "[";
  283. while (list($ki, $vi) = each($v)) {
  284. if ($ki[0] == 'v') // its a value
  285. $tma[$kv]["vmenuitems"].= "" . $vi . ",";
  286. }
  287. // replace last comma by ']'
  288. $tma[$kv]["vmenuitems"][strlen($tma[$kv]["vmenuitems"]) - 1] = "]";
  289. $tma[$kv]["name"] = $name;
  290. $tma[$kv]["divid"] = $v["divid"];
  291. $kv++;
  292. $nbdiv++;
  293. }
  294. $tmenus[$name]["nbdiv"] = $nbdiv;
  295. $tmenus[$name]["menulabel"] = '["' . implode('","', $tsubmenu[$name]) . '"]';
  296. }
  297. $lpopup->SetBlockData("ADDMENUACCESS", $tma);
  298. $lpopup->SetBlockData("ADDMENUS", $tmenus);
  299. }
  300. $action->parent->AddJsCode($lpopup->gen());
  301. $tmenus = array(); // re-init (for next time)
  302. $tmenuaccess = array();
  303. // $menuitems[$name] = array();
  304. unset($tmenus);
  305. unset($tmenusaccess);
  306. unset($tsubmenu);
  307. unset($tmenuitems);
  308. }
  309. ?>