");
@@ -431,47 +305,8 @@ function get_disk_space_config() {
return $dp;
}
-function check_venue($x) {
- if ($x == "") return;
- if ($x == "home") return;
- if ($x == "work") return;
- if ($x == "school") return;
- error_page(tra("bad venue: %1", $x));
-}
-
-function check_subset($x) {
- if ($x == "global") return;
- if ($x == "project") return;
- error_page(tra("bad subset: %1", $x));
-}
-
// functions to parse preferences XML into a struct
//
-function element_start_project($parser, $name, $attrs) {
- global $top_parse_result;
- global $parse_result;
- global $text;
- global $in_project_specific;
- global $venue_name;
-
- switch($name) {
- case "venue":
- $venue_name = $attrs["name"];
- $top_parse_result = $parse_result;
- $parse_result = default_prefs_project();
- break;
- case "project_specific":
- $in_project_specific = 1;
- $text = "";
- break;
- default:
- if ($in_project_specific) {
- $text= $text."<$name>";
- } else {
- $text = "";
- }
- }
-}
function element_start_global($parser, $name, $attrs) {
global $top_parse_result;
@@ -489,39 +324,6 @@ function element_start_global($parser, $name, $attrs) {
$text = "";
}
-function element_end_project($parser, $name) {
- global $text;
- global $parse_result;
- global $in_project_specific;
- global $top_parse_result;
- global $venue_name;
- global $project_pref_descs;
-
- foreach($project_pref_descs as $p) {
- if ($p->xml_parse($parse_result, $name, $text)) {
- return;
- }
- }
- switch($name) {
- case "venue":
- $top_parse_result->$venue_name = $parse_result;
- $parse_result = $top_parse_result;
- break;
- case "project_specific":
- $parse_result->project_specific = $text;
- $in_project_specific = false;
- break;
- case "project_preferences":
- break;
- default:
- if ($in_project_specific) {
- $text = $text."$name>";
- } else {
- //echo "Unknown tag: $name\n";
- }
- }
-}
-
function element_end_global($parser, $name) {
global $text;
global $parse_result;
@@ -588,29 +390,8 @@ function default_prefs_global() {
return $p;
}
-function default_prefs_project() {
- global $project_pref_descs;
-
- $p = new StdClass;
- foreach ($project_pref_descs as $pref) {
- $pref->set_default($p);
- }
- $p->project_specific = project_specific_prefs_default();
- return $p;
-}
-
// parse prefs from XML to a struct
//
-function prefs_parse_project($prefs_xml) {
- global $parse_result;
- $parse_result = default_prefs_project();
- $xml_parser = xml_parser_create();
- xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
- xml_set_element_handler($xml_parser, "element_start_project", "element_end_project");
- xml_set_character_data_handler($xml_parser, "char_handler");
- xml_parse($xml_parser, $prefs_xml, 1);
- return $parse_result;
-}
function prefs_parse_global($prefs_xml) {
global $parse_result;
@@ -623,106 +404,6 @@ function prefs_parse_global($prefs_xml) {
return $parse_result;
}
-////////////////////////////////////////////
-//
-// display preference subsets as Columns
-//
-function row_top($x, $ncols=6, $class="heading") {
- echo "$x | ";
- echo "".tra("Default")." |
- ".tra("Home")." |
- ".tra("School")." |
- ".tra("Work")." |
- ";
- echo "
|
\n";
-}
-
-//
-// row_defs - Display a value for all 4 venues in one row
-//
-function row_defs($pre, $item, $post, $type, $prefs) {
- $gen = $prefs->$item;
- $hom = (isset($prefs->home) && isset($prefs->home->$item)) ? $prefs->home->$item : "--";
- $schl = (isset($prefs->school) && isset($prefs->school->$item)) ? $prefs->school->$item : "--";
- $wrk = (isset($prefs->work) && isset($prefs->work->$item)) ? $prefs->work->$item : "--";
-
- echo "$pre | ";
- row_field($gen, $type);
- row_field($hom, $type);
- row_field($schl, $type);
- row_field($wrk, $type);
- echo "$post |
\n";
-}
-
-//
-// row_field - Display each field value, with selectable display modes
-//
-function row_field($value, $type) {
- echo "";
- $type = $value === "--" ? "--" : $type;
- switch($type) {
- case "yesno":
- echo $value ?tra("yes"):tra("no");
- break;
- case "noyes":
- echo $value ?tra("no"):tra("yes");
- break;
- case "limit":
- $x = max_bytes_display_mode($value);
- $y = "$x " . BYTE_ABBR;
- echo $x ? "$y" : tra("no limit");
- break;
- case "minutes":
- if ($value) {
- echo $value;
- } else {
- echo '--';
- }
- break;
- default:
- echo $value;
- break;
- }
- echo " | ";
-}
-
-//
-// row_links - Display Edit/Add/Remove links for all venues in 1 row
-//
-function row_links($subset, $prefs) {
- global $g_logged_in_user;
- $tokens = url_tokens($g_logged_in_user->authenticator);
- $pre_add = "".tra("Add")."";
- $post_edit = "&subset=$subset&cols=1$tokens>".tra("Edit")."";
- $post_remove = "&subset=$subset&cols=1$tokens>".tra("Remove")."";
- $gen = "".tra("Edit")."";
-
- $hom = isset($prefs->home) ? $pre_edit."home".$post_edit : $pre_add."home".$post_add;
- $schl = isset($prefs->school) ? $pre_edit."school".$post_edit : $pre_add."school".$post_add;
- $wrk = isset($prefs->work) ? $pre_edit."work".$post_edit : $pre_add."work".$post_add;
-
- echo " | ";
- echo "$gen | ";
- echo "$hom | ";
- echo "$schl | ";
- echo "$wrk | ";
- echo "
|
\n";
-
- $hom = isset($prefs->home) ? $pre_remove."home".$post_remove : "
";
- $schl = isset($prefs->school) ? $pre_remove."school".$post_remove : "
";
- $wrk = isset($prefs->work) ? $pre_remove."work".$post_remove : "
";
-
- echo " | ";
- echo " | ";
- echo "$hom | ";
- echo "$schl | ";
- echo "$wrk | ";
- echo "
|
\n";
-}
-
// Display all venues as columns next to descriptions
//
function prefs_show_columns_global($prefs) {
@@ -764,44 +445,6 @@ function prefs_show_global($prefs) {
}
}
-function prefs_show_project($prefs, $columns=false) {
- global $project_pref_descs;
- if ($columns) {
- foreach ($project_pref_descs as $p) {
- $p->show_cols($prefs);
- }
- } else {
- foreach ($project_pref_descs as $p) {
- $p->show($prefs);
- }
- }
-}
-
-function prefs_show_privacy($user, $columns) {
- global $privacy_pref_descs;
- if ($columns) {
- foreach ($privacy_pref_descs as $p) {
- $p->show_cols($user);
- }
- } else {
- foreach ($privacy_pref_descs as $p) {
- $p->show($user);
- }
- }
-}
-
-function prefs_show_project_specific($prefs, $columns=false) {
- if ($columns) {
- $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
- $project_specific_prefs->home = isset($prefs->home) ? project_specific_prefs_parse($prefs->home->project_specific) : "";
- $project_specific_prefs->work = isset($prefs->work) ? project_specific_prefs_parse($prefs->work->project_specific) : "";
- $project_specific_prefs->school = isset($prefs->school) ? project_specific_prefs_parse($prefs->school->project_specific) : "";
- } else {
- $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
- }
- project_specific_prefs_show($project_specific_prefs, $columns);
-}
-
function subset_name($subset) {
if ($subset == "global") return tra("Computing");
return PROJECT;
@@ -834,44 +477,6 @@ function prefs_display_venue($prefs, $venue, $subset) {
}
}
-function print_prefs_display_project($user, $columns=false) {
- $project_prefs = prefs_parse_project($user->project_prefs);
-
- start_table();
- $switch_link = " ".tra("(Switch View)")."";
- if ($columns) {
- row1(tra("Combined preferences").$switch_link, 2, "heading");
- echo "";
- start_table();
- prefs_show_privacy($user, true);
- venue_show($user);
- row_top(tra("Project specific settings"));
- prefs_show_project($project_prefs, true);
- prefs_show_project_specific($project_prefs, true);
- row_links("project", $project_prefs);
- end_table();
- echo " |
\n";
- } else {
- if (isset($project_prefs->home) || isset($project_prefs->work) || isset($project_prefs->school)) {
- row1(tra("Primary (default) preferences").$switch_link, 2, "heading");
- }
- echo "";
- start_table();
- prefs_show_project($project_prefs, false);
- prefs_show_privacy($user, false);
- venue_show($user);
- prefs_show_project_specific($project_prefs, false);
- $tokens = url_tokens($user->authenticator);
- row2("", "".tra("Edit %1 preferences", PROJECT)."");
- end_table();
- echo " |
\n";
- prefs_display_venue($project_prefs, "home", "project");
- prefs_display_venue($project_prefs, "school", "project");
- prefs_display_venue($project_prefs, "work", "project");
- }
- end_table();
-}
-
function print_prefs_display_global($user, $columns=false) {
$global_prefs = prefs_parse_global($user->global_prefs);
@@ -916,12 +521,6 @@ function print_prefs_display_global($user, $columns=false) {
end_table();
}
-function print_prefs_display($user) {
- print_prefs_display_project($user);
- echo "
\n";
- print_prefs_display_global($user);
-}
-
// This functions is used in prefs_edit.php to be able to display
// the prefs form in case of an error again.
// $error and $project_error should be an object of the form:
@@ -989,25 +588,6 @@ function prefs_form_global($user, $prefs, $error=false) {
}
}
-function prefs_form_privacy($user) {
- global $privacy_pref_descs;
- foreach ($privacy_pref_descs as $p) {
- $p->show_form_row($user, false);
- }
-}
-
-function prefs_form_project($prefs, $error=false) {
- global $project_pref_descs;
- foreach ($project_pref_descs as $p) {
- $p->show_form_row($prefs, $error);
- }
-}
-
-function prefs_form_project_specific($prefs_xml, $error=false) {
- $prefs = project_specific_prefs_parse($prefs_xml);
- project_specific_prefs_edit($prefs, $error);
-}
-
// returns a set of translated yes/no radio buttons for editing prefs forms
// Example: prefs_form_radio_buttons("allow_beta_work", $user->allow_beta_work);
//
@@ -1073,33 +653,6 @@ function prefs_global_parse_form(&$prefs) {
return $error;
}
-function prefs_resource_parse_form(&$prefs) {
- global $project_pref_descs;
- $error = false;
- foreach ($project_pref_descs as $p) {
- $p->parse_form($prefs, $error);
- }
- return $error;
-}
-
-function prefs_privacy_parse_form(&$user) {
- global $privacy_pref_descs;
- $error = false;
- foreach ($privacy_pref_descs as $p) {
- $p->parse_form($user, $error);
- }
- return $error;
-}
-
-// Parse the project specific prefs form.
-// For details see project/project_specific_prefs.inc
-//
-function prefs_project_parse_form(&$prefs) {
- $error = false;
- $prefs->project_specific = project_specific_prefs_parse_form($error);
- return $error;
-}
-
////////////////////////////////////////////
//
@@ -1142,37 +695,6 @@ function global_prefs_make_xml($prefs, $primary=true) {
return $xml;
}
-// given a prefs structure, return the corresponding XML string
-//
-function project_prefs_make_xml($prefs, $primary=true) {
- global $project_pref_descs;
- $xml = "";
- if ($primary) {
- $xml = "\n";
- }
- foreach ($project_pref_descs as $p) {
- $xml .= $p->xml_string($prefs);
- }
- if ($prefs->project_specific) {
- $x = trim($prefs->project_specific);
- $xml = $xml
- ."\n$x\n\n";
- }
- if (isset($prefs->home)) {
- $xml = $xml."\n".project_prefs_make_xml($prefs->home, false)."\n";
- }
- if (isset($prefs->work)) {
- $xml = $xml."\n".project_prefs_make_xml($prefs->work, false)."\n";
- }
- if (isset($prefs->school)) {
- $xml = $xml."\n".project_prefs_make_xml($prefs->school, false)."\n";
- }
- if ($primary) {
- $xml = $xml."\n";
- }
- return $xml;
-}
-
////////////////////////////////////////////
//
// Update user's prefs in database, from a given structure
@@ -1187,16 +709,4 @@ function global_prefs_update(&$user, $prefs) {
return 0;
}
-function project_prefs_update(&$user, $prefs) {
- $prefs_xml = BoincDb::escape_string(project_prefs_make_xml($prefs));
- $send_email = $user->send_email?1:0;
- $show_hosts = $user->show_hosts?1:0;
- $retval = $user->update("project_prefs='$prefs_xml', send_email=$send_email, show_hosts=$show_hosts");
- if (!$retval) {
- return 1;
- }
- $user->project_prefs = $prefs_xml;
- return 0;
-}
-
?>
diff --git a/html/inc/prefs_project.inc b/html/inc/prefs_project.inc
new file mode 100644
index 0000000000..a69438859b
--- /dev/null
+++ b/html/inc/prefs_project.inc
@@ -0,0 +1,421 @@
+.
+
+// functions for display and editing project preferences
+// Preferences are represented in two ways:
+// - As a PHP structure (usually called $prefs)
+// The field "project_specific" is plain XML
+// - As XML (usually called $prefs_xml)
+//
+// This XML has the general structure
+//
+//
+// 4
+// [ 0|1 ]
+// [ 1 ]
+// [ 1 ]
+// [ 1 ]
+// [ 1 ]
+//
+// ... (arbitrary project-specific XML)
+//
+//
+// ...
+//
+//
+//
+// In addition there are some fields of the user table
+// (send_email and show_hosts) that are treated as project preferences
+
+error_reporting(E_ALL);
+ini_set('display_errors', true);
+ini_set('display_startup_errors', true);
+
+include_once("../inc/prefs_util.inc");
+include_once("../project/project_specific_prefs.inc");
+
+$app_types = get_app_types();
+
+$project_pref_descs = array(
+ new PREF_NUM(
+ $x = tra("Resource share")
+ ."
"
+ .tra("Determines the proportion of your computer's resources allocated to this project. Example: if you participate in two BOINC projects with resource shares of 100 and 200, the first will get 1/3 of your resources and the second will get 2/3. %2")
+ ."",
+ "resource_share",
+ new NUM_SPEC("", 0, 9999999, 100)
+ ),
+);
+
+if (!empty($accelerate_gpu_apps_pref)) {
+ $project_pref_descs[] = new PREF_BOOL(
+ tra("Accelerate GPU tasks by dedicating a CPU to each one?"),
+ "accelerate_gpu_apps",
+ false
+ );
+}
+
+if ($app_types->cpu) {
+ $project_pref_descs[] = new PREF_BOOL (
+ tra("Use CPU")
+ ."
"
+ .tra("Enforced by version 6.10+")
+ ."",
+ "no_cpu",
+ false,
+ true
+ );
+}
+if ($app_types->ati) {
+ $project_pref_descs[] = new PREF_BOOL (
+ tra("Use ATI GPU")
+ ."
"
+ .tra("Enforced by version 6.10+")
+ ."",
+ "no_ati",
+ false,
+ true
+ );
+}
+if ($app_types->cuda) {
+ $project_pref_descs[] = new PREF_BOOL (
+ tra("Use NVIDIA GPU")
+ ."
"
+ .tra("Enforced by version 6.10+")
+ ."",
+ "no_cuda",
+ false,
+ true
+ );
+}
+if ($app_types->intel_gpu) {
+ $project_pref_descs[] = new PREF_BOOL (
+ tra("Use Intel GPU")
+ ."
"
+ .tra("Enforced by version 7.2+")
+ ."",
+ "no_intel_gpu",
+ false,
+ true
+ );
+}
+
+if (isset($project_has_beta) && $project_has_beta) {
+ $project_pref_descs[] = new PREF_BOOL(
+ tra("Run test applications?")
+ ."
"
+ .tra("This helps us develop applications, but may cause jobs to fail on your computer")
+ ."",
+ "allow_beta_work",
+ false
+ );
+}
+if (defined("EMAIL_FROM")) {
+ $x = "
"
+ .tra("Emails will be sent from %1; make sure your spam filter accepts this address.", EMAIL_FROM)
+ ."";
+} else {
+ $x = "";
+}
+
+$privacy_pref_descs = array (
+ new PREF_BOOL(
+ tra("Is it OK for %1 and your team (if any) to email you?", PROJECT).$x,
+ "send_email",
+ true,
+ false
+ ),
+ new PREF_BOOL(
+ tra("Should %1 show your computers on its web site?", PROJECT),
+ "show_hosts",
+ true,
+ false
+ ),
+);
+
+global $text;
+global $parse_result;
+global $top_parse_result;
+global $in_project_specific;
+global $venue_name;
+
+// functions to parse preferences XML into a struct
+//
+function element_start_project($parser, $name, $attrs) {
+ global $top_parse_result;
+ global $parse_result;
+ global $text;
+ global $in_project_specific;
+ global $venue_name;
+
+ switch($name) {
+ case "venue":
+ $venue_name = $attrs["name"];
+ $top_parse_result = $parse_result;
+ $parse_result = default_prefs_project();
+ break;
+ case "project_specific":
+ $in_project_specific = 1;
+ $text = "";
+ break;
+ default:
+ if ($in_project_specific) {
+ $text= $text."<$name>";
+ } else {
+ $text = "";
+ }
+ }
+}
+
+function element_end_project($parser, $name) {
+ global $text;
+ global $parse_result;
+ global $in_project_specific;
+ global $top_parse_result;
+ global $venue_name;
+ global $project_pref_descs;
+
+ foreach($project_pref_descs as $p) {
+ if ($p->xml_parse($parse_result, $name, $text)) {
+ return;
+ }
+ }
+ switch($name) {
+ case "venue":
+ $top_parse_result->$venue_name = $parse_result;
+ $parse_result = $top_parse_result;
+ break;
+ case "project_specific":
+ $parse_result->project_specific = $text;
+ $in_project_specific = false;
+ break;
+ case "project_preferences":
+ break;
+ default:
+ if ($in_project_specific) {
+ $text = $text."$name>";
+ } else {
+ //echo "Unknown tag: $name\n";
+ }
+ }
+}
+
+function default_prefs_project() {
+ global $project_pref_descs;
+
+ $p = new StdClass;
+ foreach ($project_pref_descs as $pref) {
+ $pref->set_default($p);
+ }
+ $p->project_specific = project_specific_prefs_default();
+ return $p;
+}
+
+// parse prefs from XML to a struct
+//
+function prefs_parse_project($prefs_xml) {
+ global $parse_result;
+ $parse_result = default_prefs_project();
+ $xml_parser = xml_parser_create();
+ xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
+ xml_set_element_handler($xml_parser, "element_start_project", "element_end_project");
+ xml_set_character_data_handler($xml_parser, "char_handler");
+ xml_parse($xml_parser, $prefs_xml, 1);
+ return $parse_result;
+}
+
+function prefs_show_project($prefs, $columns=false) {
+ global $project_pref_descs;
+ if ($columns) {
+ foreach ($project_pref_descs as $p) {
+ $p->show_cols($prefs);
+ }
+ } else {
+ foreach ($project_pref_descs as $p) {
+ $p->show($prefs);
+ }
+ }
+}
+
+function prefs_show_privacy($user, $columns) {
+ global $privacy_pref_descs;
+ if ($columns) {
+ foreach ($privacy_pref_descs as $p) {
+ $p->show_cols($user);
+ }
+ } else {
+ foreach ($privacy_pref_descs as $p) {
+ $p->show($user);
+ }
+ }
+}
+
+function prefs_show_project_specific($prefs, $columns=false) {
+ if ($columns) {
+ $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
+ $project_specific_prefs->home = isset($prefs->home) ? project_specific_prefs_parse($prefs->home->project_specific) : "";
+ $project_specific_prefs->work = isset($prefs->work) ? project_specific_prefs_parse($prefs->work->project_specific) : "";
+ $project_specific_prefs->school = isset($prefs->school) ? project_specific_prefs_parse($prefs->school->project_specific) : "";
+ } else {
+ $project_specific_prefs = project_specific_prefs_parse($prefs->project_specific);
+ }
+ project_specific_prefs_show($project_specific_prefs, $columns);
+}
+
+function print_prefs_display_project($user, $columns=false) {
+ $project_prefs = prefs_parse_project($user->project_prefs);
+
+ start_table();
+ $switch_link = " ".tra("(Switch View)")."";
+ if ($columns) {
+ row1(tra("Combined preferences").$switch_link, 2, "heading");
+ echo "";
+ start_table();
+ prefs_show_privacy($user, true);
+ venue_show($user);
+ row_top(tra("Project specific settings"));
+ prefs_show_project($project_prefs, true);
+ prefs_show_project_specific($project_prefs, true);
+ row_links("project", $project_prefs);
+ end_table();
+ echo " |
\n";
+ } else {
+ if (isset($project_prefs->home) || isset($project_prefs->work) || isset($project_prefs->school)) {
+ row1(tra("Primary (default) preferences").$switch_link, 2, "heading");
+ }
+ echo "";
+ start_table();
+ prefs_show_project($project_prefs, false);
+ prefs_show_privacy($user, false);
+ venue_show($user);
+ prefs_show_project_specific($project_prefs, false);
+ $tokens = url_tokens($user->authenticator);
+ row2("", "".tra("Edit %1 preferences", PROJECT)."");
+ end_table();
+ echo " |
\n";
+ prefs_display_venue($project_prefs, "home", "project");
+ prefs_display_venue($project_prefs, "school", "project");
+ prefs_display_venue($project_prefs, "work", "project");
+ }
+ end_table();
+}
+
+////////////////////////////////////////////
+//
+// Functions to display preference subsets as forms
+//
+
+function prefs_form_privacy($user) {
+ global $privacy_pref_descs;
+ foreach ($privacy_pref_descs as $p) {
+ $p->show_form_row($user, false);
+ }
+}
+
+function prefs_form_project($prefs, $error=false) {
+ global $project_pref_descs;
+ foreach ($project_pref_descs as $p) {
+ $p->show_form_row($prefs, $error);
+ }
+}
+
+function prefs_form_project_specific($prefs_xml, $error=false) {
+ $prefs = project_specific_prefs_parse($prefs_xml);
+ project_specific_prefs_edit($prefs, $error);
+}
+
+function prefs_resource_parse_form(&$prefs) {
+ global $project_pref_descs;
+ $error = false;
+ foreach ($project_pref_descs as $p) {
+ $p->parse_form($prefs, $error);
+ }
+ return $error;
+}
+
+function prefs_privacy_parse_form(&$user) {
+ global $privacy_pref_descs;
+ $error = false;
+ foreach ($privacy_pref_descs as $p) {
+ $p->parse_form($user, $error);
+ }
+ return $error;
+}
+
+// Parse the project specific prefs form.
+// For details see project/project_specific_prefs.inc
+//
+function prefs_project_parse_form(&$prefs) {
+ $error = false;
+ $prefs->project_specific = project_specific_prefs_parse_form($error);
+ return $error;
+}
+
+////////////////////////////////////////////
+//
+// convert prefs from structure to XML
+//
+
+// given a prefs structure, return the corresponding XML string
+//
+function project_prefs_make_xml($prefs, $primary=true) {
+ global $project_pref_descs;
+ $xml = "";
+ if ($primary) {
+ $xml = "\n";
+ }
+ foreach ($project_pref_descs as $p) {
+ $xml .= $p->xml_string($prefs);
+ }
+ if ($prefs->project_specific) {
+ $x = trim($prefs->project_specific);
+ $xml = $xml
+ ."\n$x\n\n";
+ }
+ if (isset($prefs->home)) {
+ $xml = $xml."\n".project_prefs_make_xml($prefs->home, false)."\n";
+ }
+ if (isset($prefs->work)) {
+ $xml = $xml."\n".project_prefs_make_xml($prefs->work, false)."\n";
+ }
+ if (isset($prefs->school)) {
+ $xml = $xml."\n".project_prefs_make_xml($prefs->school, false)."\n";
+ }
+ if ($primary) {
+ $xml = $xml."\n";
+ }
+ return $xml;
+}
+
+////////////////////////////////////////////
+//
+// Update user's prefs in database, from a given structure
+//
+function project_prefs_update(&$user, $prefs) {
+ $prefs_xml = BoincDb::escape_string(project_prefs_make_xml($prefs));
+ $send_email = $user->send_email?1:0;
+ $show_hosts = $user->show_hosts?1:0;
+ $retval = $user->update("project_prefs='$prefs_xml', send_email=$send_email, show_hosts=$show_hosts");
+ if (!$retval) {
+ return 1;
+ }
+ $user->project_prefs = $prefs_xml;
+ return 0;
+}
+
+?>
diff --git a/html/inc/prefs_util.inc b/html/inc/prefs_util.inc
index 1f954e7042..c1c2edf65a 100644
--- a/html/inc/prefs_util.inc
+++ b/html/inc/prefs_util.inc
@@ -17,7 +17,27 @@
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see .
-// classes for different kinds of preferences. See prefs.inc
+// classes for different kinds of global preferences. See prefs.inc
+// PREF_BOOL: boolean
+// PREF_NUM: a number, possibly constrained to a range
+// PREF_NUM2: a pair of numbers (e.g. transfer limit)
+// PREF_HOUR_RANGE: a range of hours
+
+$venues = array("home", "school", "work");
+
+function check_venue($x) {
+ if ($x == "") return;
+ if ($x == "home") return;
+ if ($x == "work") return;
+ if ($x == "school") return;
+ error_page(tra("bad venue: %1", $x));
+}
+
+function check_subset($x) {
+ if ($x == "global") return;
+ if ($x == "project") return;
+ error_page(tra("bad subset: %1", $x));
+}
abstract class PREF {
public $desc;
@@ -352,4 +372,104 @@ class PREF_HOUR_RANGE extends PREF {
}
}
+////////////////////////////////////////////
+//
+// display preference subsets as Columns
+//
+function row_top($x, $ncols=6, $class="heading") {
+ echo "$x | ";
+ echo "".tra("Default")." |
+ ".tra("Home")." |
+ ".tra("School")." |
+ ".tra("Work")." |
+ ";
+ echo "
|
\n";
+}
+
+//
+// row_defs - Display a value for all 4 venues in one row
+//
+function row_defs($pre, $item, $post, $type, $prefs) {
+ $gen = $prefs->$item;
+ $hom = (isset($prefs->home) && isset($prefs->home->$item)) ? $prefs->home->$item : "--";
+ $schl = (isset($prefs->school) && isset($prefs->school->$item)) ? $prefs->school->$item : "--";
+ $wrk = (isset($prefs->work) && isset($prefs->work->$item)) ? $prefs->work->$item : "--";
+
+ echo "$pre | ";
+ row_field($gen, $type);
+ row_field($hom, $type);
+ row_field($schl, $type);
+ row_field($wrk, $type);
+ echo "$post |
\n";
+}
+
+//
+// row_field - Display each field value, with selectable display modes
+//
+function row_field($value, $type) {
+ echo "";
+ $type = $value === "--" ? "--" : $type;
+ switch($type) {
+ case "yesno":
+ echo $value ?tra("yes"):tra("no");
+ break;
+ case "noyes":
+ echo $value ?tra("no"):tra("yes");
+ break;
+ case "limit":
+ $x = max_bytes_display_mode($value);
+ $y = "$x " . BYTE_ABBR;
+ echo $x ? "$y" : tra("no limit");
+ break;
+ case "minutes":
+ if ($value) {
+ echo $value;
+ } else {
+ echo '--';
+ }
+ break;
+ default:
+ echo $value;
+ break;
+ }
+ echo " | ";
+}
+
+//
+// row_links - Display Edit/Add/Remove links for all venues in 1 row
+//
+function row_links($subset, $prefs) {
+ global $g_logged_in_user;
+ $tokens = url_tokens($g_logged_in_user->authenticator);
+ $pre_add = "".tra("Add")."";
+ $post_edit = "&subset=$subset&cols=1$tokens>".tra("Edit")."";
+ $post_remove = "&subset=$subset&cols=1$tokens>".tra("Remove")."";
+ $gen = "".tra("Edit")."";
+
+ $hom = isset($prefs->home) ? $pre_edit."home".$post_edit : $pre_add."home".$post_add;
+ $schl = isset($prefs->school) ? $pre_edit."school".$post_edit : $pre_add."school".$post_add;
+ $wrk = isset($prefs->work) ? $pre_edit."work".$post_edit : $pre_add."work".$post_add;
+
+ echo " | ";
+ echo "$gen | ";
+ echo "$hom | ";
+ echo "$schl | ";
+ echo "$wrk | ";
+ echo "
|
\n";
+
+ $hom = isset($prefs->home) ? $pre_remove."home".$post_remove : "
";
+ $schl = isset($prefs->school) ? $pre_remove."school".$post_remove : "
";
+ $wrk = isset($prefs->work) ? $pre_remove."work".$post_remove : "
";
+
+ echo " | ";
+ echo " | ";
+ echo "$hom | ";
+ echo "$schl | ";
+ echo "$wrk | ";
+ echo "
|
\n";
+}
+
?>
diff --git a/html/user/add_venue.php b/html/user/add_venue.php
index 2783c72c28..5dec83b082 100644
--- a/html/user/add_venue.php
+++ b/html/user/add_venue.php
@@ -18,6 +18,7 @@
require_once("../inc/util.inc");
require_once("../inc/prefs.inc");
+require_once("../inc/prefs_project.inc");
$user = get_logged_in_user();
check_tokens($user->authenticator);
diff --git a/html/user/prefs.php b/html/user/prefs.php
index 64cddcac6b..144b0284e9 100644
--- a/html/user/prefs.php
+++ b/html/user/prefs.php
@@ -18,6 +18,7 @@
require_once("../inc/util.inc");
require_once("../inc/prefs.inc");
+require_once("../inc/prefs_project.inc");
$user = get_logged_in_user();
diff --git a/html/user/prefs_edit.php b/html/user/prefs_edit.php
index 305deaf49e..d99abcab30 100644
--- a/html/user/prefs_edit.php
+++ b/html/user/prefs_edit.php
@@ -19,6 +19,7 @@
include_once("../inc/db.inc");
include_once("../inc/util.inc");
include_once("../inc/prefs.inc");
+include_once("../inc/prefs_project.inc");
$user = get_logged_in_user();
diff --git a/html/user/prefs_remove.php b/html/user/prefs_remove.php
index 0e53eb0e27..fa4109e29b 100644
--- a/html/user/prefs_remove.php
+++ b/html/user/prefs_remove.php
@@ -18,6 +18,7 @@
include_once("../inc/util.inc");
include_once("../inc/prefs.inc");
+include_once("../inc/prefs_project.inc");
check_get_args(array("subset", "venue", "confirmed", "cols", "tnow", "ttok"));