// // 1.3 // ... // // // and // // // 4 // // ... (arbitrary project-specific XML) // // // // // Various functions are defined below for converting between these forms, // and also to/from HTML form elements // First: functions to parse preferences XML into a struct include_once("project_specific_prefs.inc"); global $text; global $parse_result; global $in_project_specific; // the following will parse either global or project prefs // TODO: split up into separate functions // function element_start($parser, $name, $attrs) { global $text; global $project; global $in_project_specific; switch($name) { case "project_specific": $in_project_specific = 1; $text = ""; break; default: if ($in_project_specific) { $text= $text."<$name>"; } else { $text = ""; } } } function element_end($parser, $name) { global $text; global $parse_result; global $in_project_specific; switch($name) { case "project_specific": $parse_result->project_specific = $text; $in_project_specific = false; break; case "dont_run_on_batteries": $parse_result->dont_run_on_batteries = 1; break; case "dont_run_if_user_active": $parse_result->dont_run_if_user_active = 1; break; case "confirm_before_connecting": $parse_result->confirm_before_connecting = 1; break; case "run_minimized": $parse_result->run_minimized = 1; break; case "run_on_startup": $parse_result->run_on_startup = 1; break; case "low_water_days": $parse_result->low_water_days = $text; break; case "high_water_days": $parse_result->high_water_days = $text; break; case "disk_max_used_gb": $parse_result->disk_max_used_gb = $text; break; case "disk_max_used_pct": $parse_result->disk_max_used_pct = $text; break; case "disk_min_free_gb": $parse_result->disk_min_free_gb = $text; break; case "resource_share": $parse_result->resource_share = $text; break; case "show_email": $parse_result->show_email = $text; break; case "send_email": $parse_result->send_email = $text; break; case "mod_time": $parse_result->mod_time = $text; break; case "global_preferences": break; case "project_preferences": break; default: if ($in_project_specific) { $text = $text."\n"; } else { echo "Unknown tag: $name\n"; } } } function char_handler($parser, $x) { global $text; $text = $text.$x; } function prefs_parse($prefs_xml) { global $parse_result; $parse_result = null; $parse_result->dont_run_on_batteries = 0; $parse_result->dont_run_if_user_active = 0; $parse_result->confirm_before_connecting = 0; $parse_result->run_minimized = 0; $parse_result->run_on_startup = 0; $parse_result->low_water_days = 1; $parse_result->high_water_days = 3; $parse_result->disk_max_used_gb = 1000; $parse_result->disk_max_used_pct = 50; $parse_result->disk_min_free_gb = 1; $parse_result->resource_share = 1; $parse_result->show_email = 1; $parse_result->send_email = 1; $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0); xml_set_element_handler($xml_parser, "element_start", "element_end"); xml_set_character_data_handler($xml_parser, "char_handler"); xml_parse($xml_parser, $prefs_xml, 1); return $parse_result; } //////////////////////////////////////////// // // display preference subsets, with Edit buttons // function prefs_show_global($prefs) { echo "

"; echo "\n"; echo "".TD2.LG_FONT."Global preferences
These apply to all BOINC projects in which you participate\n"; $batteries = $prefs->dont_run_on_batteries?"No":"Yes"; $in_use = $prefs->dont_run_if_user_active?"No":"Yes"; $confirm = $prefs->confirm_before_connecting?"Yes":"No"; $minimized = $prefs->run_minimized?"Yes":"No"; $startup = $prefs->run_on_startup?"Yes":"No"; row2a("Work if computer on batteries: ", $batteries); row2a("Work if computer in use: ", $in_use); row2a("Confirm before connecting to network: ", $confirm); row2a("Run minimized: ", $minimized); row2a("Run on startup: ", $startup); row2a("Minimum amount of work to buffer: ", "$prefs->low_water_days days"); row2a("Maximum amount of work to buffer: ", "$prefs->high_water_days days"); echo "

"; row2a("Maximum disk space to use: ", "$prefs->disk_max_used_gb GB"); row2a("Minimum disk space to leave free: ", "$prefs->disk_min_free_gb GB"); row2a("Maximum % of disk allowed to used: ", "$prefs->disk_max_used_pct %"); echo "

\n"; echo "
Edit global preferences
\n"; } function prefs_show_project($prefs) { echo "

"; echo "\n"; echo "".TD2.LG_FONT."Project preferences
These apply only to this project\n"; row2a("Resource Share: ", $prefs->resource_share); $prefs = project_specific_prefs_parse($prefs); project_specific_prefs_show($prefs); echo "\n"; echo "
Edit project preferences
"; } function print_prefs_display($user) { prefs_show_global(prefs_parse($user->global_prefs)); prefs_show_project(prefs_parse($user->project_prefs)); } //////////////////////////////////////////// // // Functions to display preference subsets as forms // function prefs_form_global($user, $prefs) { echo "

\n \n \n \n"; printf(" \n", $prefs->dont_run_on_batteries?"checked":""); echo " \n \n \n"; printf(" \n", $prefs->dont_run_if_user_active?"checked":""); echo " \n \n \n"; printf(" \n", $prefs->confirm_before_connecting?"checked":""); echo " \n \n \n"; printf(" \n", $prefs->run_minimized?"checked":""); echo " \n \n \n"; printf(" \n", $prefs->run_on_startup?"checked":""); echo " \n \n \n"; printf(" \n"); echo " \n \n \n"; printf(" \n"); echo " \n \n \n \n \n \n \n \n \n \n \n \n \n
Don't run if computer is on batteries
Don't run if user is active
Confirm before connecting
Run minimized
Run on startup
Minimum amount of work to buffer days
Maximum amount of work to buffer days
Maximum disk space allowed
to be used for BOINC
Gbytes
Minimum disk space to leave free Gbytes
Maximum % of disk space to
use for BOINC
\n \n
\n"; } function prefs_form_project($prefs) { echo "
\n \n \n \n \n \n"; $prefs = project_specific_prefs_parse($prefs); project_specific_prefs_edit($prefs); echo " \n
Resource share:
If you participate in multiple projects,
this is the proportion of resources
allocated to this project.

\n
\n"; } //////////////////////////////////////////// // // Functions to parse form elements, modifying a preferences structure // function prefs_global_parse_form(&$prefs) { parse_str(getenv("QUERY_STRING")); $prefs->dont_run_on_batteries = isset($dont_run_on_batteries)?1:0; $prefs->dont_run_if_user_active = isset($dont_run_if_user_active)?1:0; $prefs->confirm_before_connecting = isset($confirm_before_connecting)?1:0; $prefs->run_minimized = isset($run_minimized)?1:0; $prefs->run_on_startup = isset($run_on_startup)?1:0; $prefs->low_water_days = $low_water_days; $prefs->high_water_days = $high_water_days; $prefs->disk_max_used_gb = $disk_max_used_gb; $prefs->disk_max_used_pct = $disk_max_used_pct; $prefs->disk_min_free_gb = $disk_min_free_gb; } function prefs_project_parse_form(&$prefs) { parse_str(getenv("QUERY_STRING")); $prefs->resource_share = $resource_share; $prefs->project_specific = project_specific_prefs_parse_form(); } //////////////////////////////////////////// // // convert prefs from structure to XML // function global_prefs_make_xml($prefs) { $xml = "\n"; $now = time(); $xml = $xml." $now\n"; if ($prefs->dont_run_on_batteries) { $xml = $xml." \n"; } if ($prefs->dont_run_if_user_active) { $xml = $xml." \n"; } if ($prefs->confirm_before_connecting) { $xml = $xml." \n"; } if ($prefs->run_minimized) { $xml = $xml." \n"; } if ($prefs->run_on_startup) { $xml = $xml." \n"; } $xml = $xml ." $prefs->low_water_days\n" ." $prefs->high_water_days\n"; $xml = $xml ." $prefs->disk_max_used_gb\n" ." $prefs->disk_max_used_pct\n" ." $prefs->disk_min_free_gb\n"; $xml = $xml."\n"; return $xml; } function project_prefs_make_xml($prefs) { $xml = "\n"; $xml = $xml ."$prefs->resource_share\n" ."\n$prefs->project_specific\n\n"; $xml = $xml."\n"; return $xml; } //////////////////////////////////////////// // // Update user's prefs in database, from a given structure // function global_prefs_update(&$user, $prefs) { $prefs_xml = global_prefs_make_xml($prefs); mysql_query("update user set global_prefs='$prefs_xml' where id=$user->id"); $user->global_prefs = $prefs_xml; } function project_prefs_update(&$user, $prefs) { $prefs_xml = project_prefs_make_xml($prefs); mysql_query("update user set project_prefs='$prefs_xml' where id=$user->id"); $user->project_prefs = $prefs_xml; } ?>