. // Interface for project-wide functions: // - control user quotas and permissions to submit jobs // - create apps (not implemented yet) require_once("../inc/submit_db.inc"); require_once("../inc/util.inc"); function user_row($u) { $user = BoincUser::lookup_id($u->user_id); echo " user_id>$user->name (ID: $user->id) "; echo ""; if ($u->submit_all) { echo "All applications\n"; } else { $uas = BoincUserSubmitApp::enum("user_id=$u->user_id"); foreach ($uas as $ua) { $app = BoincApp::lookup_id($ua->app_id); echo "$app->name "; } if (count($uas) == 0) { echo "---"; } } echo "\n"; echo "$u->quota\n"; echo "$u->max_jobs_in_progress\n"; echo ""; if ($u->logical_start_time > time()) { echo local_time_str($u->logical_start_time); } else { echo "---"; } echo " "; } function handle_list() { page_head("Job submission access control"); echo "The following users are allowed to submit jobs.

"; $us = BoincUserSubmit::enum(""); start_table(); table_header( "User

Click to change permissions or quota

", "Can submit jobs for", "Quota", "Max jobs in progress

0 means no limit

", "Current priority

Later time = lower priority

" ); foreach ($us as $u) { user_row($u); } end_table(); show_button("manage_project.php?action=add_form", "Add user", "Allow a new user to submit jobs" ); page_tail(); } function handle_edit_form() { $user_id = get_int('user_id'); $user = BoincUser::lookup_id($user_id); $usub = BoincUserSubmit::lookup_userid($user_id); page_head("Job submission permissions for $user->name"); echo " $user->name can submit jobs for:

"; if ($usub->submit_all) { $all_checked = "checked"; $not_all_checked = ""; } else { $all_checked = ""; $not_all_checked = "checked"; } echo " All apps
Only selected apps: "; $apps = BoincApp::enum("deprecated=0"); foreach ($apps as $app) { $us = BoincUserSubmitApp::lookup("user_id=$user_id and app_id=$app->id"); $checked = $us?"checked":""; echo "
    id $checked> $app->name\n"; } $q = (string) $usub->quota; $mj = $usub->max_jobs_in_progress; $sav = $usub->create_app_versions?"checked":""; $sa = $usub->create_apps?"checked":""; echo "

Quota: This determines how much computing capacity is allocated to $user->name.

Max jobs in progress:

Return to project-wide management functions "; page_tail(); } function handle_edit_action() { $user_id = get_int('user_id'); $us = BoincUserSubmit::lookup_userid($user_id); if (!$us) error_page("user not found"); BoincUserSubmitApp::delete_user($user_id); $submit_all = get_str('submit_all'); if ($submit_all) { $us->update("submit_all=1"); } else { $us->update("submit_all=0"); $apps = BoincApp::enum("deprecated=0"); foreach ($apps as $app) { $x = "app_$app->id"; if (get_str($x, true)) { BoincUserSubmitApp::insert("(user_id, app_id) values ($user_id, $app->id)"); } } } $quota = (double) get_str('quota'); if ($quota != $us->quota) { $us->update("quota=$quota"); } $mj = (int) get_str('max_jobs_in_progress'); if ($mj != $us->max_jobs_in_progress) { $us->update("max_jobs_in_progress=$mj"); } header('Location: manage_project.php'); } function handle_add_form() { page_head("Add user"); echo "

User ID:
"; page_tail(); } function handle_add_action() { $user_id = get_int('user_id'); $user = BoincUser::lookup_id($user_id); if (!$user) error_page("no such user"); $us = BoincUserSubmit::lookup_userid($user_id); if (!$us) { if (!BoincUserSubmit::insert("(user_id) values ($user_id)")) { error_page("Insert failed"); } } header("Location: manage_project.php?action=edit_form&user_id=$user_id"); } $user = get_logged_in_user(); $bus = BoincUserSubmit::lookup_userid($user->id); if (!$bus) { error_page("no access"); } $action = get_str('action', true); switch ($action) { case 'list': case '': handle_list(); break; case 'add_form': handle_add_form(); break; case 'add_action': handle_add_action(); break; case 'edit_form': handle_edit_form(); break; case 'edit_action': handle_edit_action(); break; default: error_page("unknown action: $action"); } ?>