| Line 66... |
Line 66... |
| 66 |
* what to use for html input fields
|
66 |
* what to use for html input fields
|
| 67 |
* These are passed to sprintf, with label, fieldname, title, placeholder and current value, in that order
|
67 |
* These are passed to sprintf, with label, fieldname, title, placeholder and current value, in that order
|
| 68 |
*/
|
68 |
*/
|
| 69 |
'screens' => array (
|
69 |
'screens' => array (
|
| 70 |
'login form' => "<h1>Login</h1>\n<form class='login_form' action='%s' method='post'>\n%s\n<input type='submit' value='Login'></form>\n",
|
70 |
'login form' => "<h1>Login</h1>\n<form class='login_form' action='%s' method='post'>\n%s\n<input type='submit' value='Login'></form>\n",
|
| 71 |
'edit form' => "<form class='login_form' action='%s' method='post'>\n%s\n<input type='submit' id='btnUpdate' name='btnUpdate' value='Update'>\n</form>",
|
71 |
'edit form' => "<form class='login_form' action='%s' method='post'>\n%s\n<input type='submit' name='btnUpdate' value='Update'>\n</form>",
|
| 72 |
'loginScreen' => "<div class='login_field'>\n<input class='login_field' type='text' name='username' placeholder='Username' required autofocus>\n</div>\n<div class='login_field'>\n<input class='login_field' type='password' name='password' placeholder='Password' required>\n</div>",
|
72 |
'loginScreen' => "<div class='login_field'>\n<input class='login_field' type='text' name='username' placeholder='Username' required autofocus>\n</div>\n<div class='login_field'>\n<input class='login_field' type='password' name='password' placeholder='Password' required>\n</div>",
|
| 73 |
'adminScreen' => "<input type='hidden' name='doAdmin' value='1'>\n",
|
73 |
'adminScreen' => "<input type='hidden' name='doAdmin' value='1'>\n",
|
| 74 |
'validateScript' => '',
|
74 |
'validateScript' => '',
|
| 75 |
),
|
75 |
),
|
| 76 |
'html input fields' => array(
|
76 |
'html input fields' => array(
|
| Line 218... |
Line 218... |
| 218 |
*
|
218 |
*
|
| 219 |
*/
|
219 |
*/
|
| 220 |
protected function validate( $username, $password, $connection ) {
|
220 |
protected function validate( $username, $password, $connection ) {
|
| 221 |
$result = $connection->getPassword( $username );
|
221 |
$result = $connection->getPassword( $username );
|
| 222 |
if ( password_verify( $password, $result['pass'] ) ) {
|
222 |
if ( password_verify( $password, $result['pass'] ) ) {
|
| 223 |
$result = $connection->getRecord( $username );
|
223 |
$result = $connection->getARecord( array( 'login' => $username ) );
|
| 224 |
$this->data['id'] = $result['id'];
|
224 |
$this->data['id'] = $result['id'];
|
| 225 |
foreach ( $this->configuration['tables']['users']['fields'] as $key => $record ) {
|
225 |
foreach ( $this->configuration['tables']['users']['fields'] as $key => $record ) {
|
| 226 |
if ( $key != 'pass' )
|
226 |
if ( $key != 'pass' )
|
| 227 |
$this->data[$key] = $result[$key];
|
227 |
$this->data[$key] = $result[$key];
|
| 228 |
}
|
228 |
}
|
| Line 380... |
Line 380... |
| 380 |
* @return string HTML containing all of the INPUT records a user can edit
|
380 |
* @return string HTML containing all of the INPUT records a user can edit
|
| 381 |
*/
|
381 |
*/
|
| 382 |
public function editScreen( $connection ) {
|
382 |
public function editScreen( $connection ) {
|
| 383 |
$return = array();
|
383 |
$return = array();
|
| 384 |
$return[] = $this->configuration['screens']['adminScreen'];
|
384 |
$return[] = $this->configuration['screens']['adminScreen'];
|
| 385 |
$return[] = "<input type='hidden' name='id' value=" . $this->workingOn['id'] . "'>\n";
|
385 |
$return[] = "<input type='hidden' name='id' value='" . $this->workingOn['id'] . "'>\n";
|
| 386 |
foreach ( $this->configuration['tables']['users']['fields'] as $field => $record ) {
|
386 |
foreach ( $this->configuration['tables']['users']['fields'] as $field => $record ) {
|
| 387 |
// if this field is restricted and we are not admin, just skip it
|
387 |
// if this field is restricted and we are not admin, just skip it
|
| 388 |
// also skip if it is our record
|
388 |
// also skip if it is our record
|
| 389 |
if ( isset( $record['restrict'] ) && ( $this->data['id'] == $this->workingOn['id'] ) )
|
389 |
if ( isset( $record['restrict'] ) && ( $this->data['id'] == $this->workingOn['id'] ) )
|
| 390 |
continue;
|
390 |
continue;
|
| Line 460... |
Line 460... |
| 460 |
return 'Error';
|
460 |
return 'Error';
|
| 461 |
}
|
461 |
}
|
| 462 |
if ( $data ) {
|
462 |
if ( $data ) {
|
| 463 |
$data['id'] = $this->workingOn['id'];
|
463 |
$data['id'] = $this->workingOn['id'];
|
| 464 |
$return = $connection->update( $data ) ? "Updated" : "Failed";
|
464 |
$return = $connection->update( $data ) ? "Updated" : "Failed";
|
| 465 |
if ( $this->workingOn['id'] == $this->data['id'] ) // we just updated us, reload record
|
- |
|
| 466 |
$this->data = $connection->getARecord( array( 'id' => $this->data['id'] ) );
|
- |
|
| 467 |
} else {
|
465 |
} else {
|
| 468 |
$return = "No changes";
|
466 |
$return = "No changes";
|
| 469 |
}
|
467 |
}
|
| 470 |
}
|
468 |
}
|
| 471 |
|
469 |
|
| 472 |
protected function initWorkingOn( $connection, $id ) {
|
470 |
protected function initWorkingOn( $connection, $id ) {
|
| 473 |
if ( ! isset($id) ) {
|
- |
|
| 474 |
// we're working on ourself
|
- |
|
| 475 |
$this->workingOn = $this->data;
|
- |
|
| 476 |
} elseif ( isset($id ) && $this->workingOn['id'] != $id ) {
|
- |
|
| 477 |
// we're working on a different user
|
- |
|
| 478 |
if ( $id == -1 ) { // we are adding a new user
|
- |
|
| 479 |
$this->workingOn = $this->emptyWorkingOn();
|
- |
|
| 480 |
} else { // this is an existing user
|
- |
|
| 481 |
$this->workingOn = $connection->getARecord( array( 'id' => $id ) );
|
- |
|
| 482 |
}
|
- |
|
| 483 |
}
|
- |
|
| 484 |
// default to working on ourself
|
- |
|
| 485 |
if ( ! ( isset( $this->workingOn ) && count( $this->workingOn ) ) ) {
|
471 |
if ( ! isset($id) || $id == $this->data['id'] ) { // we're working on ourself
|
| 486 |
$this->workingOn = $this->data;
|
472 |
$this->workingOn = $this->data;
|
| - |
|
473 |
} elseif ( $id == -1 ) { // a new user
|
| - |
|
474 |
$this->workingOn = $this->emptyWorkingOn();
|
| - |
|
475 |
} else { // this is an existing user
|
| - |
|
476 |
$this->workingOn = $connection->getARecord( array( 'id' => $id ) );
|
| 487 |
}
|
477 |
}
|
| - |
|
478 |
} // initWorkingOn
|
| - |
|
479 |
|
| 488 |
}
|
480 |
|
| 489 |
|
481 |
|
| 490 |
/**
|
482 |
/**
|
| 491 |
* Sets up the admin function which allows users to edit themselves and, optionally, others
|
483 |
* Sets up the admin function which allows users to edit themselves and, optionally, others
|
| 492 |
*
|
484 |
*
|
| 493 |
* This should be called the first time, then repeatedly called until it is done
|
485 |
* This should be called the first time, then repeatedly called until it is done
|
| Line 509... |
Line 501... |
| 509 |
* @param string $nextPage The URL of the page to be used in the link
|
501 |
* @param string $nextPage The URL of the page to be used in the link
|
| 510 |
*
|
502 |
*
|
| 511 |
* @return string This may be an HTML table or a single screen
|
503 |
* @return string This may be an HTML table or a single screen
|
| 512 |
*/
|
504 |
*/
|
| 513 |
public function admin ( $connection, $nextScript = null ) {
|
505 |
public function admin ( $connection, $nextScript = null ) {
|
| - |
|
506 |
/*
|
| - |
|
507 |
* Entering for first time,
|
| - |
|
508 |
* admin=1, $workingOn not set
|
| - |
|
509 |
* update workingOn
|
| - |
|
510 |
* display screen
|
| - |
|
511 |
* entering after selecting a user
|
| - |
|
512 |
* doAdmin=1, id=#, $workingOn[id] <> id
|
| - |
|
513 |
* update workingOn
|
| - |
|
514 |
* display screen
|
| - |
|
515 |
* Have pressed update button
|
| - |
|
516 |
* update
|
| - |
|
517 |
*/
|
| - |
|
518 |
|
| 514 |
$nextScript = $this->getNextScript( $nextScript );
|
519 |
$nextScript = $this->getNextScript( $nextScript );
|
| 515 |
// set workingOn if not set
|
520 |
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
|
| 516 |
if ( ! $this->workingOn || isset($_REQUEST['id']) )
|
521 |
if ( ! $this->workingOn || $this->workingOn['id'] !== $id ) {
|
| 517 |
$this->initWorkingOn( $connection, isset($_REQUEST['id']) ? $_REQUEST['id'] : null );
|
522 |
$this->initWorkingOn( $connection, $id );
|
| 518 |
// we have no data, so we should create a form for them to enter something
|
- |
|
| 519 |
if ( ! isset( $_REQUEST[$this->configuration['input prefix'] . $this->configuration['tables']['users']['form test']] ) ) {
|
- |
|
| 520 |
// create the screen
|
- |
|
| 521 |
$return = $this->editScreen( $connection );
|
523 |
$return = $this->editScreen( $connection );
|
| 522 |
if ( $this->data['admin'] ) {
|
524 |
if ( $this->data['admin'] ) {
|
| 523 |
$return .= $this->allUsersHTML( $connection );
|
525 |
$return .= $this->allUsersHTML( $connection );
|
| 524 |
}
|
526 |
}
|
| 525 |
return sprintf( $this->configuration['screens']['edit form'],
|
527 |
return sprintf( $this->configuration['screens']['edit form'],
|
| 526 |
$nextScript,
|
528 |
$nextScript,
|
| 527 |
$return
|
529 |
$return
|
| 528 |
);
|
530 |
);
|
| 529 |
} else { // we are processing
|
531 |
} elseif ( $_SERVER['REQUEST_METHOD'] === 'POST' ) { // they submitted the form
|
| 530 |
$return = $this->addEdit( $connection );
|
532 |
$return = $this->addEdit( $connection );
|
| - |
|
533 |
/*
|
| - |
|
534 |
* if ( $this->workingOn['id'] == $this->data['id'] ) // we just updated us, reload record
|
| - |
|
535 |
$this->data = $connection->getARecord( array( 'id' => $this->data['id'] ) );
|
| - |
|
536 |
*/
|
| 531 |
unset( $this->workingOn );
|
537 |
unset( $this->workingOn );
|
| 532 |
return $return;
|
538 |
return $return;
|
| 533 |
} // else
|
539 |
}
|
| 534 |
} // admin
|
540 |
} // admin
|
| 535 |
|
541 |
|
| 536 |
} // class Users
|
542 |
} // class Users
|
| 537 |
|
543 |
|
| 538 |
?>
|
544 |
?>
|