mirror of https://github.com/BOINC/boinc.git
web: factor project prefs code into a separate file
I set out to make project-specific prefs use the same object framework (PREF_BOOL, PREF_NUM etc.) as other prefs. This turned out to be infeasible, so I settled for a code cleanup instead. The reason it's infeasible is that the "other prefs" code uses a SAX parser (xml_parser_create() etc.), while the code for project-specific prefs uses the primitive parse_element() and parse_next_element() functions in util_basic.inc. If I'm going to change anything, I want to switch to a DOM parser (e.g. simplexml) for both purposes.
This commit is contained in:
parent
c395efb161
commit
aa8c53773b
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2010 University of California
|
||||
// Copyright (C) 2014 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
|
@ -17,12 +17,10 @@
|
|||
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
// This file contains support functions for display and editing
|
||||
// preferences (global and project).
|
||||
// functions for display and editing global preferences.
|
||||
// Preferences are represented in two ways:
|
||||
// - As a PHP structure (usually called $prefs)
|
||||
// This has fields run_if_user_active, etc.
|
||||
// The fields "project_specific" is plain XML
|
||||
// - As XML (usually called $prefs_xml)
|
||||
//
|
||||
// This XML has the general structure
|
||||
|
@ -37,25 +35,6 @@
|
|||
// </venue>
|
||||
// </global_preferences>
|
||||
//
|
||||
// and
|
||||
//
|
||||
// <project_preferences>
|
||||
// <resource_share>4</resource_share>
|
||||
// [ <allow_beta_work>0|1</allow_beta_work> ]
|
||||
// [ <no_cpu>1</no_cpu> ]
|
||||
// [ <no_cuda>1</no_cuda> ]
|
||||
// [ <no_ati>1</no_ati> ]
|
||||
// [ <no_intel_gpu>1</no_intel_gpu> ]
|
||||
// <project-specific>
|
||||
// ... (arbitrary project-specific XML)
|
||||
// </project-specific>
|
||||
// <home>
|
||||
// ...
|
||||
// </home>
|
||||
// </project_preferences>
|
||||
//
|
||||
// In addition there are some fields of the user table
|
||||
// (send_email and show_hosts) that are treated as project preferences
|
||||
|
||||
// Various functions are defined below for converting between these forms,
|
||||
// and also to/from HTML form elements
|
||||
|
@ -65,11 +44,6 @@ 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();
|
||||
|
||||
$venues = array("home", "school", "work");
|
||||
|
||||
$cpu_prefs = array(
|
||||
new PREF_BOOL(
|
||||
|
@ -279,105 +253,6 @@ $net_prefs = array(
|
|||
),
|
||||
);
|
||||
|
||||
$project_pref_descs = array(
|
||||
new PREF_NUM(
|
||||
$x = tra("Resource share")
|
||||
."<br><span class=note>"
|
||||
.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")
|
||||
."</span>",
|
||||
"resource_share",
|
||||
new NUM_SPEC("", 0, 9999999, 100)
|
||||
),
|
||||
);
|
||||
|
||||
if (isset($accelerate_gpu_apps_pref) && $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->count > 1) {
|
||||
if ($app_types->cpu) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use CPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_cpu",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->ati) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use ATI GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_ati",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->cuda) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use NVIDIA GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_cuda",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->intel_gpu) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use Intel GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 7.2+")
|
||||
."</span>",
|
||||
"no_intel_gpu",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
//}
|
||||
|
||||
if (isset($project_has_beta) && $project_has_beta) {
|
||||
$project_pref_descs[] = new PREF_BOOL(
|
||||
tra("Run test applications?")
|
||||
."<br><span class=note>"
|
||||
.tra("This helps us develop applications, but may cause jobs to fail on your computer")
|
||||
."</span>",
|
||||
"allow_beta_work",
|
||||
false
|
||||
);
|
||||
}
|
||||
if (defined("EMAIL_FROM")) {
|
||||
$x = "<br><span class=note>"
|
||||
.tra("Emails will be sent from %1; make sure your spam filter accepts this address.", EMAIL_FROM)
|
||||
."</span>";
|
||||
} 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
|
||||
),
|
||||
);
|
||||
|
||||
define("DISK_LIMIT_DESC", tra("Disk and memory usage"));
|
||||
define("CPU_LIMIT_DESC", tra("Processor usage"));
|
||||
define("NETWORK_LIMIT_DESC", tra("Network usage"));
|
||||
|
@ -396,7 +271,6 @@ define("PREFS_FORM_ERROR_DESC",
|
|||
global $text;
|
||||
global $parse_result;
|
||||
global $top_parse_result;
|
||||
global $in_project_specific;
|
||||
global $venue_name;
|
||||
|
||||
// get default settings for disk space usage so the default user
|
||||
|
@ -409,7 +283,7 @@ global $venue_name;
|
|||
// in config.xml so the right default is set for minimum free disk space
|
||||
//
|
||||
function get_disk_space_config() {
|
||||
global $config;
|
||||
global $config;
|
||||
$config = get_config();
|
||||
$dp = new StdClass;
|
||||
$dp->disk_max_used_gb = parse_config($config, "<default_disk_max_used_gb>");
|
||||
|
@ -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 "<tr><td class=$class width=35%>$x</td>";
|
||||
echo "<td class=$class width=10%><b>".tra("Default")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("Home")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("School")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("Work")."</b></td>
|
||||
";
|
||||
echo "<td width=15%><br></td></tr>\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 "<tr><td class=fieldname>$pre</td>";
|
||||
row_field($gen, $type);
|
||||
row_field($hom, $type);
|
||||
row_field($schl, $type);
|
||||
row_field($wrk, $type);
|
||||
echo "<td align=left>$post</td></tr>\n";
|
||||
}
|
||||
|
||||
//
|
||||
// row_field - Display each field value, with selectable display modes
|
||||
//
|
||||
function row_field($value, $type) {
|
||||
echo "<td class=f_val valign=top>";
|
||||
$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 "</td>";
|
||||
}
|
||||
|
||||
//
|
||||
// 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 = "<a href=add_venue.php?venue=";
|
||||
$pre_edit = "<a href=prefs_edit.php?venue=";
|
||||
$pre_remove = "<a href=prefs_remove.php?venue=";
|
||||
$post_add = "&subset=$subset&cols=1$tokens>".tra("Add")."</a>";
|
||||
$post_edit = "&subset=$subset&cols=1$tokens>".tra("Edit")."</a>";
|
||||
$post_remove = "&subset=$subset&cols=1$tokens>".tra("Remove")."</a>";
|
||||
$gen = "<a href=prefs_edit.php?subset=$subset&cols=1$tokens>".tra("Edit")."</a>";
|
||||
|
||||
$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 "<tr><td class=fieldname> </td>";
|
||||
echo "<td>$gen</td>";
|
||||
echo "<td>$hom</td>";
|
||||
echo "<td>$schl</td>";
|
||||
echo "<td>$wrk</td>";
|
||||
echo "<td><br></td></tr>\n";
|
||||
|
||||
$hom = isset($prefs->home) ? $pre_remove."home".$post_remove : "<br>";
|
||||
$schl = isset($prefs->school) ? $pre_remove."school".$post_remove : "<br>";
|
||||
$wrk = isset($prefs->work) ? $pre_remove."work".$post_remove : "<br>";
|
||||
|
||||
echo "<tr><td class=fieldname> </td>";
|
||||
echo "<td> </td>";
|
||||
echo "<td>$hom</td>";
|
||||
echo "<td>$schl</td>";
|
||||
echo "<td>$wrk</td>";
|
||||
echo "<td><br></td></tr>\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 = " <font size=\"-2\"><a href=prefs.php?subset=project&cols=". (int)!$columns .">".tra("(Switch View)")."</a></font>";
|
||||
if ($columns) {
|
||||
row1(tra("Combined preferences").$switch_link, 2, "heading");
|
||||
echo "<tr><td colspan=2>";
|
||||
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 "</td></tr>\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 "<tr><td colspan=2>";
|
||||
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("", "<a href=prefs_edit.php?subset=project$tokens>".tra("Edit %1 preferences", PROJECT)."</a>");
|
||||
end_table();
|
||||
echo "</td></tr>\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 "<br><br>\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 = "<project_preferences>\n";
|
||||
}
|
||||
foreach ($project_pref_descs as $p) {
|
||||
$xml .= $p->xml_string($prefs);
|
||||
}
|
||||
if ($prefs->project_specific) {
|
||||
$x = trim($prefs->project_specific);
|
||||
$xml = $xml
|
||||
."<project_specific>\n$x\n</project_specific>\n";
|
||||
}
|
||||
if (isset($prefs->home)) {
|
||||
$xml = $xml."<venue name=\"home\">\n".project_prefs_make_xml($prefs->home, false)."</venue>\n";
|
||||
}
|
||||
if (isset($prefs->work)) {
|
||||
$xml = $xml."<venue name=\"work\">\n".project_prefs_make_xml($prefs->work, false)."</venue>\n";
|
||||
}
|
||||
if (isset($prefs->school)) {
|
||||
$xml = $xml."<venue name=\"school\">\n".project_prefs_make_xml($prefs->school, false)."</venue>\n";
|
||||
}
|
||||
if ($primary) {
|
||||
$xml = $xml."</project_preferences>\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;
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -0,0 +1,421 @@
|
|||
<?php
|
||||
// This file is part of BOINC.
|
||||
// http://boinc.berkeley.edu
|
||||
// Copyright (C) 2014 University of California
|
||||
//
|
||||
// BOINC is free software; you can redistribute it and/or modify it
|
||||
// under the terms of the GNU Lesser General Public License
|
||||
// as published by the Free Software Foundation,
|
||||
// either version 3 of the License, or (at your option) any later version.
|
||||
//
|
||||
// BOINC is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
// See the GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// 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
|
||||
//
|
||||
// <project_preferences>
|
||||
// <resource_share>4</resource_share>
|
||||
// [ <allow_beta_work>0|1</allow_beta_work> ]
|
||||
// [ <no_cpu>1</no_cpu> ]
|
||||
// [ <no_cuda>1</no_cuda> ]
|
||||
// [ <no_ati>1</no_ati> ]
|
||||
// [ <no_intel_gpu>1</no_intel_gpu> ]
|
||||
// <project-specific>
|
||||
// ... (arbitrary project-specific XML)
|
||||
// </project-specific>
|
||||
// <venue name="home">
|
||||
// ...
|
||||
// </venue>
|
||||
// </project_preferences>
|
||||
//
|
||||
// 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")
|
||||
."<br><span class=note>"
|
||||
.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")
|
||||
."</span>",
|
||||
"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")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_cpu",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->ati) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use ATI GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_ati",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->cuda) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use NVIDIA GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 6.10+")
|
||||
."</span>",
|
||||
"no_cuda",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
if ($app_types->intel_gpu) {
|
||||
$project_pref_descs[] = new PREF_BOOL (
|
||||
tra("Use Intel GPU")
|
||||
."<br><span class=note>"
|
||||
.tra("Enforced by version 7.2+")
|
||||
."</span>",
|
||||
"no_intel_gpu",
|
||||
false,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
if (isset($project_has_beta) && $project_has_beta) {
|
||||
$project_pref_descs[] = new PREF_BOOL(
|
||||
tra("Run test applications?")
|
||||
."<br><span class=note>"
|
||||
.tra("This helps us develop applications, but may cause jobs to fail on your computer")
|
||||
."</span>",
|
||||
"allow_beta_work",
|
||||
false
|
||||
);
|
||||
}
|
||||
if (defined("EMAIL_FROM")) {
|
||||
$x = "<br><span class=note>"
|
||||
.tra("Emails will be sent from %1; make sure your spam filter accepts this address.", EMAIL_FROM)
|
||||
."</span>";
|
||||
} 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 = " <font size=\"-2\"><a href=prefs.php?subset=project&cols=". (int)!$columns .">".tra("(Switch View)")."</a></font>";
|
||||
if ($columns) {
|
||||
row1(tra("Combined preferences").$switch_link, 2, "heading");
|
||||
echo "<tr><td colspan=2>";
|
||||
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 "</td></tr>\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 "<tr><td colspan=2>";
|
||||
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("", "<a href=prefs_edit.php?subset=project$tokens>".tra("Edit %1 preferences", PROJECT)."</a>");
|
||||
end_table();
|
||||
echo "</td></tr>\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 = "<project_preferences>\n";
|
||||
}
|
||||
foreach ($project_pref_descs as $p) {
|
||||
$xml .= $p->xml_string($prefs);
|
||||
}
|
||||
if ($prefs->project_specific) {
|
||||
$x = trim($prefs->project_specific);
|
||||
$xml = $xml
|
||||
."<project_specific>\n$x\n</project_specific>\n";
|
||||
}
|
||||
if (isset($prefs->home)) {
|
||||
$xml = $xml."<venue name=\"home\">\n".project_prefs_make_xml($prefs->home, false)."</venue>\n";
|
||||
}
|
||||
if (isset($prefs->work)) {
|
||||
$xml = $xml."<venue name=\"work\">\n".project_prefs_make_xml($prefs->work, false)."</venue>\n";
|
||||
}
|
||||
if (isset($prefs->school)) {
|
||||
$xml = $xml."<venue name=\"school\">\n".project_prefs_make_xml($prefs->school, false)."</venue>\n";
|
||||
}
|
||||
if ($primary) {
|
||||
$xml = $xml."</project_preferences>\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;
|
||||
}
|
||||
|
||||
?>
|
|
@ -17,7 +17,27 @@
|
|||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// 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 "<tr><td class=$class width=35%>$x</td>";
|
||||
echo "<td class=$class width=10%><b>".tra("Default")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("Home")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("School")."</b></td>
|
||||
<td class=$class width=10%><b>".tra("Work")."</b></td>
|
||||
";
|
||||
echo "<td width=15%><br></td></tr>\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 "<tr><td class=fieldname>$pre</td>";
|
||||
row_field($gen, $type);
|
||||
row_field($hom, $type);
|
||||
row_field($schl, $type);
|
||||
row_field($wrk, $type);
|
||||
echo "<td align=left>$post</td></tr>\n";
|
||||
}
|
||||
|
||||
//
|
||||
// row_field - Display each field value, with selectable display modes
|
||||
//
|
||||
function row_field($value, $type) {
|
||||
echo "<td class=f_val valign=top>";
|
||||
$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 "</td>";
|
||||
}
|
||||
|
||||
//
|
||||
// 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 = "<a href=add_venue.php?venue=";
|
||||
$pre_edit = "<a href=prefs_edit.php?venue=";
|
||||
$pre_remove = "<a href=prefs_remove.php?venue=";
|
||||
$post_add = "&subset=$subset&cols=1$tokens>".tra("Add")."</a>";
|
||||
$post_edit = "&subset=$subset&cols=1$tokens>".tra("Edit")."</a>";
|
||||
$post_remove = "&subset=$subset&cols=1$tokens>".tra("Remove")."</a>";
|
||||
$gen = "<a href=prefs_edit.php?subset=$subset&cols=1$tokens>".tra("Edit")."</a>";
|
||||
|
||||
$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 "<tr><td class=fieldname> </td>";
|
||||
echo "<td>$gen</td>";
|
||||
echo "<td>$hom</td>";
|
||||
echo "<td>$schl</td>";
|
||||
echo "<td>$wrk</td>";
|
||||
echo "<td><br></td></tr>\n";
|
||||
|
||||
$hom = isset($prefs->home) ? $pre_remove."home".$post_remove : "<br>";
|
||||
$schl = isset($prefs->school) ? $pre_remove."school".$post_remove : "<br>";
|
||||
$wrk = isset($prefs->work) ? $pre_remove."work".$post_remove : "<br>";
|
||||
|
||||
echo "<tr><td class=fieldname> </td>";
|
||||
echo "<td> </td>";
|
||||
echo "<td>$hom</td>";
|
||||
echo "<td>$schl</td>";
|
||||
echo "<td>$wrk</td>";
|
||||
echo "<td><br></td></tr>\n";
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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"));
|
||||
|
||||
|
|
Loading…
Reference in New Issue