X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab%2Fincludes%2Fplc_forms.php;h=7b68f2e626daa881a0f6d9ee771f926140f45643;hb=19ea00f9f677acff2b94f9c066c2949cc63d435c;hp=8a0e0b6e2ee930b683225317ca82ff59441c8f33;hpb=350bb4d9c096b0cfb877fb67ab94ebac753a98a5;p=plewww.git diff --git a/planetlab/includes/plc_forms.php b/planetlab/includes/plc_forms.php index 8a0e0b6..7b68f2e 100644 --- a/planetlab/includes/plc_forms.php +++ b/planetlab/includes/plc_forms.php @@ -93,6 +93,43 @@ class PlcForm { $html .= ""; return $html; } + + // helper function to handle role-oriented selectors + // because GetRoles does not correctly support filters, it's really painful to do this + static public function role_selectors($api,$role_ids=NULL,$current=NULL) { + function role_selector ($role) { return array('display'=>$role['name'],"value"=>$role['role_id']); } + function role_id ($role) { return $role['role_id']; } + + $all_roles=$api->GetRoles(); + if ( ! $role_ids) + $role_ids=array_map("role_id",$all_roles); + + $selectors=array(); + // preserve input order + foreach ($role_ids as $role_id) { + foreach ($all_roles as $all_role) { + if ($all_role['role_id'] == $role_id) { + $selector=role_selector($all_role); + if ($role_id == $current) + $selector['selected']=true; + $selectors []= $selector; + } + } + } + return $selectors; + } + + static public function role_selectors_excluding ($api,$exclude_role_ids=NULL,$current=NULL) { + if ( ! $exclude_role_ids ) $exclude_role_ids = array(); + $all_roles=$api->GetRoles(); + $role_ids = array(); + foreach ($all_roles as $role) { + if ( ! in_array ($role['role_id'],$exclude_role_ids)) { + $role_ids [] = $role['role_id']; + } + } + return PlcForm::role_selectors($api,$role_ids,$current); + } } // a form with a single button