public function loadRole() { global $db; //getRoles $r2a = new Role2Account(); $role2acc = $r2a->getRoles($this->admin_id); $_SESSION["roles"] = array(); foreach ($role2acc as $x) { $role = $x->role_id; if (!in_array($role, $_SESSION["roles"]) && isset($role)) { $_SESSION["roles"][] = $role; } } /* * LOAD smaller roles */ $r2r = new Role2Role(); $udahdi = array(); $sem = sizeof($_SESSION['roles']) ? $_SESSION["roles"] : array(); while (sizeof($sem) > 0) { $r = array_pop($sem); if (!in_array($r, $udahdi)) { $role2role = $r2r->getSmallerRoles($r); foreach ($role2role as $ri) { if (!in_array($ri->role_small, $_SESSION["roles"]) && $ri->role_small != "") { $_SESSION["roles"][] = $ri->role_small; $sem[] = $ri->role_small; } } $udahdi[] = $r; } } $this->roles = $_SESSION['roles']; }
public function findLevels() { //create the model object $cal = new Role2Role(); //get all role2role to work with $arr = $cal->getAll(); $arrUrutan = array(); $arrBig = array(); $arrSmall = array(); $arrSkip = array(); $bigger = 0; $smaller = 0; /* * init all the urutan with 0, it stay 0 if it was a leaf */ foreach ($arr as $rr) { $rb = $rr->role_big; $rs = $rr->role_small; // $arrUrutan[$rr->role_big][] = $rr->role_small; if (!in_array($rs, $arrSmall)) { $arrSmall[] = $rr->role_small; } if (!in_array($rb, $arrBig)) { $arrBig[] = $rr->role_big; } $arrUrutan[$rs] = 0; $arrUrutan[$rb] = 0; // $arrUrutan[$rr->role_small] = $smaller; } //get leaves to get started $arrLeaves = array(); foreach ($arrSmall as $rr) { if (!in_array($rr, $arrBig)) { //$arrLeaves[] = $rr; $arrSkip[] = $rr; } } while (count($arr) > 0) { // echo count($arrSkip)."<br>"; //cari yang punya leaves foreach ($arr as $num => $rr) { $rb = $rr->role_big; $rs = $rr->role_small; //is direkt grosser than the leaves if (in_array($rs, $arrSkip)) { $arrUrutan[$rb] = $arrUrutan[$rs] + 1; $arrSkip[] = $rb; unset($arr[$num]); } } //pr($arrSkip); } // urutkan untuk penampilan $finArr = array(); foreach ($arrUrutan as $rname => $level) { $finArr[$level][] = $rname; } // pr($arrUrutan); ksort($finArr); //pr($finArr); return $finArr; }
public function saveTree() { $tree = addslashes($_POST['tree']); $arr = json_decode($_POST['tree']); $showlog = 0; /*pr($tree); echo "haa"; pr($arr); * */ if (count($arr) < 1) { die("Arr ERR"); } $arrNachLevel = array(); $maxLvl = 0; $minLvl = 0; foreach ($arr as $c) { $id = $c->id; $level = $c->level; $arrNachLevel[$level][] = $id; if ($level > $maxLvl) { $maxLvl = $level; } if ($level < $minLvl) { $minLvl = $level; } } ksort($arrNachLevel); //cek apakah level berurutan $active = $minLvl; foreach ($arrNachLevel as $lvl => $num) { if ($lvl - $active > 1) { die("<div class='alert alert-danger'>No empty Level Please</div>"); } else { $active = $lvl; } } /* * pertama empty dulu semuanya * dipunyai role_big dan role_small */ $role = new Role2Role(); $role->truncate(); if ($showlog) { echo "<h1>maxlvl " . $maxLvl . "</h1>"; } $active = 0; $nextlvl = 1; foreach ($arrNachLevel as $lvl => $arrA) { if ($showlog) { echo "lvl : " . $lvl . "<br>"; } $active = (int) $lvl; $nextlvl = $active + 1; if ($showlog) { echo "active " . $active . " next " . $nextlvl . " <br>"; } if ($showlog) { pr($arrA); } if ($nextlvl <= $maxLvl) { foreach ($arrA as $rolesmall) { foreach ($arrNachLevel[$nextlvl] as $rolebig) { if ($rolebig != $rolesmall) { $rr = new Role2Role(); $rr->role_big = $rolebig; $rr->role_small = $rolesmall; $rr->save(); //pr($rr); if ($showlog) { echo " SMALL : " . $rolesmall . " BIG : " . $rolebig . "<br>"; } } } } } } if ($showlog) { pr($arrNachLevel); } die("<div class='alert alert-info'>Success</div>"); }