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'];
 }
Пример #2
0
 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>");
 }