]> Kevux Git Server - koopa/commitdiff
Progress: work on user pages
authorKevin Day <thekevinday@gmail.com>
Sun, 3 Sep 2017 03:38:27 +0000 (22:38 -0500)
committerKevin Day <thekevinday@gmail.com>
Sun, 3 Sep 2017 03:38:27 +0000 (22:38 -0500)
This makes the PATH_SELF constant for c_standard_path public.
Add new user session handling class.
Add a generic user-specific version of the c_standard_path and have most user path classes extend it.
Populate a basic version of the content menu for user paths.
User paths should accept user ids, handle the arguments.
The print, pdf, and ps paths are also in the url arguments as well as in a separate class path (I need to review the possibilities and pick only 1 method).
Just about all of the user paths, in their current form, are stubs and need to be implemented.

39 files changed:
common/base/classes/base_path.php
common/standard/classes/standard_path.php
common/standard/classes/standard_path_user.php [new file with mode: 0644]
common/standard/classes/standard_paths.php
common/standard/menus/ja/menu_content_user_view.php [new file with mode: 0644]
common/standard/menus/menu_content_user_view.php [new file with mode: 0644]
common/standard/menus/menu_utility.php
common/standard/paths/a/dashboard.php
common/standard/paths/m/dashboard.php
common/standard/paths/u/ja/user_check.php
common/standard/paths/u/ja/user_create.php
common/standard/paths/u/ja/user_delete.php
common/standard/paths/u/ja/user_edit.php
common/standard/paths/u/ja/user_lock.php
common/standard/paths/u/ja/user_pdf.php
common/standard/paths/u/ja/user_print.php
common/standard/paths/u/ja/user_ps.php
common/standard/paths/u/ja/user_refresh.php
common/standard/paths/u/ja/user_session.php [new file with mode: 0644]
common/standard/paths/u/ja/user_settings.php
common/standard/paths/u/ja/user_unlock.php
common/standard/paths/u/ja/user_view.php
common/standard/paths/u/user_check.php
common/standard/paths/u/user_create.php
common/standard/paths/u/user_dashboard.php
common/standard/paths/u/user_delete.php
common/standard/paths/u/user_edit.php
common/standard/paths/u/user_lock.php
common/standard/paths/u/user_login.php
common/standard/paths/u/user_logout.php
common/standard/paths/u/user_pdf.php
common/standard/paths/u/user_print.php
common/standard/paths/u/user_ps.php
common/standard/paths/u/user_refresh.php
common/standard/paths/u/user_session.php [new file with mode: 0644]
common/standard/paths/u/user_settings.php
common/standard/paths/u/user_unlock.php
common/standard/paths/u/user_view.php
database/sql/standard/standard-users.sql

index fc0bacf03e552fcc6daac05b62f60e397f1279e6..da4d8640e2a5341917f8bcf384efc9655105b503 100644 (file)
@@ -1217,7 +1217,7 @@ class c_base_path extends c_base_rfc_string {
    *
    * This is normally done automatically, but in certain cases, this may need to be explicitly called.
    *
-   * Calling this will trigger default settings to be regernated, including the breadcrumbs.
+   * Calling this will trigger default settings to be regenerated, including the breadcrumbs.
    *
    * @param c_base_http &$http
    *   The entire HTTP information to allow for the execution to access anything that is necessary.
@@ -1234,7 +1234,7 @@ class c_base_path extends c_base_rfc_string {
    *
    * @see: self::do_execute()
    */
-  protected function set_parameters(&$http, &$database, &$session, $settings) {
+  public function set_parameters(&$http, &$database, &$session, $settings) {
     if (!($http instanceof c_base_http)) {
       $error = c_base_error::s_log(NULL, array('arguments' => array(':{argument_name}' => 'http', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::INVALID_ARGUMENT);
       return c_base_return_error::s_false($error);
index 20856c6b1ce786cf52bf86eca3b81898649b412c..583e19ddfa3a437dcaa3f4ae2a7cc4ab57610714 100644 (file)
@@ -14,6 +14,8 @@ require_once('common/base/classes/base_markup.php');
  * This is used primarily for generating HTML5 pages.
  */
 class c_standard_path extends c_base_path {
+  public const PATH_SELF = '';
+
   protected const CSS_AS_SECTION                = 'as-section';
   protected const CSS_AS_SECTION_HEADERS        = 'as-section-headers';
   protected const CSS_AS_WRAPPER                = 'as-wrapper';
@@ -69,8 +71,6 @@ class c_standard_path extends c_base_path {
   protected const CSS_PATH_PART = 'path-part-';
   protected const CSS_PATH_FULL = 'path-full-';
 
-  protected const PATH_SELF = '';
-
   protected const PATH_MENU_HEADER      = 'common/standard/menus/';
   protected const PATH_MENU_UTILITY     = 'common/standard/menus/';
   protected const PATH_MENU_BREADCRUMBS = 'common/standard/menus/';
@@ -163,7 +163,7 @@ class c_standard_path extends c_base_path {
   /**
    * Implements set_parameters().
    */
-  protected function set_parameters(&$http, &$database, &$session, $settings) {
+  public function set_parameters(&$http, &$database, &$session, $settings) {
     $result = parent::set_parameters($http, $database, $session, $settings);
     if (c_base_return::s_has_error($result)) {
       return $result;
@@ -1976,6 +1976,9 @@ class c_standard_path extends c_base_path {
    *   A number representing which block of text to return.
    * @param array $arguments
    *   (optional) An array of arguments to convert into text.
+   *
+   * @return string
+   *   A string is returned as the custom text.
    */
   protected function pr_get_text($code, $arguments = array()) {
     return '';
diff --git a/common/standard/classes/standard_path_user.php b/common/standard/classes/standard_path_user.php
new file mode 100644 (file)
index 0000000..4223616
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @file
+ * Provides the standard path handling class with user-path specific parts.
+ */
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+require_once('common/base/classes/base_path.php');
+require_once('common/base/classes/base_database.php');
+
+require_once('common/standard/classes/standard_path.php');
+
+require_once('common/theme/classes/theme_html.php');
+
+/**
+ * Provides user-specific extensions to standard paths.
+ */
+class c_standard_path_user extends c_standard_path {
+  protected const ID_USER_MINIMUM = 1000;
+
+  protected const CLASS_ID_USER          = 'id-user';
+  protected const CLASS_ID_USER_EXTERNAL = 'id-user-external';
+
+  /**
+   * Implements pr_get_text_title().
+   */
+  protected function pr_get_text_title($arguments = array()) {
+    return $this->pr_get_text(0, $arguments);
+  }
+}
index c5b57df68a12c6f4464206384b01edf4deca3e2b..e7ee9d36cbca73862dcb4aa13b6955f5dfa13e37 100644 (file)
@@ -28,6 +28,7 @@ class c_standard_paths extends c_base_return {
   const URI_USER_PRINT           = 'u/print';
   const URI_USER_PS              = 'u/ps';
   const URI_USER_REFRESH         = 'u/refresh';
+  const URI_USER_SESSION         = 'u/session';
   const URI_USER_SETTINGS        = 'u/settings';
   const URI_USER_UNLOCK          = 'u/unlock';
   const URI_USER_VIEW            = 'u/view';
@@ -57,6 +58,7 @@ class c_standard_paths extends c_base_return {
   protected const NAME_USER_PRINT           = 'user_print';
   protected const NAME_USER_PS              = 'user_ps';
   protected const NAME_USER_REFRESH         = 'user_refresh';
+  protected const NAME_USER_SESSION         = 'user_session';
   protected const NAME_USER_SETTINGS        = 'user_settings';
   protected const NAME_USER_UNLOCK          = 'user_unlock';
   protected const NAME_USER_VIEW            = 'user_view';
@@ -81,6 +83,7 @@ class c_standard_paths extends c_base_return {
   protected const HANDLER_USER_PRINT           = 'c_standard_path_user_print';
   protected const HANDLER_USER_PS              = 'c_standard_path_user_ps';
   protected const HANDLER_USER_REFRESH         = 'c_standard_path_user_refresh';
+  protected const HANDLER_USER_SESSION         = 'c_standard_path_user_session';
   protected const HANDLER_USER_SETTINGS        = 'c_standard_path_user_settings';
   protected const HANDLER_USER_UNLOCK          = 'c_standard_path_user_unlock';
   protected const HANDLER_USER_VIEW            = 'c_standard_path_user_view';
@@ -678,32 +681,39 @@ class c_standard_paths extends c_base_return {
   protected function pr_paths_create_user() {
     // dashboards
     $this->paths->add_path(static::URI_USER_DASHBOARD, static::HANDLER_USER_DASHBOARD, static::PATH_USER, static::NAME_USER_DASHBOARD);
+    $this->paths->add_path(static::URI_USER_DASHBOARD . static::WILDCARD_PATH, static::HANDLER_USER_DASHBOARD, static::PATH_USER, static::NAME_USER_DASHBOARD);
 
-    // user paths
-    $this->paths->add_path(static::URI_USER_CHECK, static::HANDLER_USER_CHECK, static::PATH_USER, static::NAME_USER_CHECK);
-    $this->paths->add_path(static::URI_USER_CHECK . static::WILDCARD_PATH, static::HANDLER_USER_CHECK, static::PATH_USER, static::NAME_USER_CHECK);
+    // pages / forms
     $this->paths->add_path(static::URI_USER_CREATE, static::HANDLER_USER_CREATE, static::PATH_USER, static::NAME_USER_CREATE);
     $this->paths->add_path(static::URI_USER_CREATE . static::WILDCARD_PATH, static::HANDLER_USER_CREATE, static::PATH_USER, static::NAME_USER_CREATE);
     $this->paths->add_path(static::URI_USER_DELETE, static::HANDLER_USER_DELETE, static::PATH_USER, static::NAME_USER_DELETE);
     $this->paths->add_path(static::URI_USER_DELETE . static::WILDCARD_PATH, static::HANDLER_USER_DELETE, static::PATH_USER, static::NAME_USER_DELETE);
     $this->paths->add_path(static::URI_USER_EDIT, static::HANDLER_USER_EDIT, static::PATH_USER, static::NAME_USER_EDIT);
     $this->paths->add_path(static::URI_USER_EDIT . static::WILDCARD_PATH, static::HANDLER_USER_EDIT, static::PATH_USER, static::NAME_USER_EDIT);
+    $this->paths->add_path(static::URI_USER_SETTINGS, static::HANDLER_USER_SETTINGS, static::PATH_USER, static::NAME_USER_SETTINGS);
+    $this->paths->add_path(static::URI_USER_SETTINGS . static::WILDCARD_PATH, static::HANDLER_USER_SETTINGS, static::PATH_USER, static::NAME_USER_SETTINGS);
+    $this->paths->add_path(static::URI_USER_VIEW, static::HANDLER_USER_VIEW, static::PATH_USER, static::NAME_USER_VIEW);
+    $this->paths->add_path(static::URI_USER_VIEW . static::WILDCARD_PATH, static::HANDLER_USER_VIEW, static::PATH_USER, static::NAME_USER_VIEW);
+
+    // actions / triggers
+    $this->paths->add_path(static::URI_USER_CHECK, static::HANDLER_USER_CHECK, static::PATH_USER, static::NAME_USER_CHECK);
+    $this->paths->add_path(static::URI_USER_CHECK . static::WILDCARD_PATH, static::HANDLER_USER_CHECK, static::PATH_USER, static::NAME_USER_CHECK);
     $this->paths->add_path(static::URI_USER_LOCK, static::HANDLER_USER_LOCK, static::PATH_USER, static::NAME_USER_LOCK);
     $this->paths->add_path(static::URI_USER_LOCK . static::WILDCARD_PATH, static::HANDLER_USER_LOCK, static::PATH_USER, static::NAME_USER_LOCK);
+    $this->paths->add_path(static::URI_USER_REFRESH, static::HANDLER_USER_REFRESH, static::PATH_USER, static::NAME_USER_REFRESH);
+    $this->paths->add_path(static::URI_USER_REFRESH . static::WILDCARD_PATH, static::HANDLER_USER_REFRESH, static::PATH_USER, static::NAME_USER_REFRESH);
+    $this->paths->add_path(static::URI_USER_SESSION, static::HANDLER_USER_SESSION, static::PATH_USER, static::NAME_USER_SESSION);
+    $this->paths->add_path(static::URI_USER_SESSION . static::WILDCARD_PATH, static::HANDLER_USER_SESSION, static::PATH_USER, static::NAME_USER_SESSION);
+    $this->paths->add_path(static::URI_USER_UNLOCK, static::HANDLER_USER_UNLOCK, static::PATH_USER, static::NAME_USER_UNLOCK);
+    $this->paths->add_path(static::URI_USER_UNLOCK . static::WILDCARD_PATH, static::HANDLER_USER_UNLOCK, static::PATH_USER, static::NAME_USER_UNLOCK);
+
+    // presentation / formats
     $this->paths->add_path(static::URI_USER_PDF, static::HANDLER_USER_PDF, static::PATH_USER, static::NAME_USER_PDF);
     $this->paths->add_path(static::URI_USER_PDF . static::WILDCARD_PATH, static::HANDLER_USER_PDF, static::PATH_USER, static::NAME_USER_PDF);
     $this->paths->add_path(static::URI_USER_PRINT, static::HANDLER_USER_PRINT, static::PATH_USER, static::NAME_USER_PRINT);
     $this->paths->add_path(static::URI_USER_PRINT . static::WILDCARD_PATH, static::HANDLER_USER_PRINT, static::PATH_USER, static::NAME_USER_PRINT);
     $this->paths->add_path(static::URI_USER_PS, static::HANDLER_USER_PS, static::PATH_USER, static::NAME_USER_PS);
     $this->paths->add_path(static::URI_USER_PS . static::WILDCARD_PATH, static::HANDLER_USER_PS, static::PATH_USER, static::NAME_USER_PS);
-    $this->paths->add_path(static::URI_USER_REFRESH, static::HANDLER_USER_REFRESH, static::PATH_USER, static::NAME_USER_REFRESH);
-    $this->paths->add_path(static::URI_USER_REFRESH . static::WILDCARD_PATH, static::HANDLER_USER_REFRESH, static::PATH_USER, static::NAME_USER_REFRESH);
-    $this->paths->add_path(static::URI_USER_SETTINGS, static::HANDLER_USER_SETTINGS, static::PATH_USER, static::NAME_USER_SETTINGS);
-    $this->paths->add_path(static::URI_USER_SETTINGS . static::WILDCARD_PATH, static::HANDLER_USER_SETTINGS, static::PATH_USER, static::NAME_USER_SETTINGS);
-    $this->paths->add_path(static::URI_USER_UNLOCK, static::HANDLER_USER_UNLOCK, static::PATH_USER, static::NAME_USER_UNLOCK);
-    $this->paths->add_path(static::URI_USER_UNLOCK . static::WILDCARD_PATH, static::HANDLER_USER_UNLOCK, static::PATH_USER, static::NAME_USER_UNLOCK);
-    $this->paths->add_path(static::URI_USER_VIEW, static::HANDLER_USER_VIEW, static::PATH_USER, static::NAME_USER_VIEW);
-    $this->paths->add_path(static::URI_USER_VIEW . static::WILDCARD_PATH, static::HANDLER_USER_VIEW, static::PATH_USER, static::NAME_USER_VIEW);
   }
 
   /**
diff --git a/common/standard/menus/ja/menu_content_user_view.php b/common/standard/menus/ja/menu_content_user_view.php
new file mode 100644 (file)
index 0000000..dcd4da6
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+/**
+ * @file
+ * Provides a language specific class.
+ */
+require_once('common/standard/menus/menu_content.php');
+
+/**
+ * A path-specific class for managing a content menu.
+ */
+class c_standard_menu_content_user_view_ja extends c_standard_menu_content_user_view {
+
+  /**
+   * Implements pr_get_text().
+   */
+  protected function pr_get_text($code, $arguments = array()) {
+    $string = '';
+    switch ($code) {
+      case 0:
+        $string = 'User Menu';
+        break;
+      case 1:
+        $string = 'Profile';
+        break;
+      case 2:
+        $string = 'Dashboard';
+        break;
+      case 3:
+        $string = 'Settings';
+        break;
+      case 4:
+        $string = 'Edit';
+        break;
+      case 5:
+        $string = 'Check';
+        break;
+      case 6:
+        $string = 'Refresh';
+        break;
+      case 7:
+        $string = 'Lock';
+        break;
+      case 8:
+        $string = 'Unlock';
+        break;
+      case 9:
+        $string = 'Delete';
+        break;
+      case 10:
+        $string = 'Copy'; // @todo: implement this in the project.
+        break;
+      case 11:
+        $string = 'Create New User';
+        break;
+    }
+
+    if (!empty($arguments)) {
+      $this->pr_process_replacements($string, $arguments);
+    }
+
+    return $string;
+  }
+}
diff --git a/common/standard/menus/menu_content_user_view.php b/common/standard/menus/menu_content_user_view.php
new file mode 100644 (file)
index 0000000..b2997a7
--- /dev/null
@@ -0,0 +1,162 @@
+<?php
+/**
+ * @file
+ * Provides a class for a path-specific content menu.
+ */
+require_once('common/base/classes/base_markup.php');
+
+require_once('common/standard/classes/standard_menu.php');
+require_once('common/standard/classes/standard_paths.php');
+require_once('common/standard/menus/menu_content.php');
+
+/**
+ * A path-specific class for managing a content menu.
+ */
+class c_standard_menu_content_user_view extends c_standard_menu_content {
+  protected const CLASS_USER_CHECK     = 'user-check';
+  protected const CLASS_USER_CREATE    = 'user-create';
+  protected const CLASS_USER_COPY      = 'user-copy';
+  protected const CLASS_USER_DASHBOARD = 'user-dashboard';
+  protected const CLASS_USER_DELETE    = 'user-delete';
+  protected const CLASS_USER_EDIT      = 'user-edit';
+  protected const CLASS_USER_LOCK      = 'user-lock';
+  protected const CLASS_USER_REFRESH   = 'user-refresh';
+  protected const CLASS_USER_SETTINGS  = 'user-settings';
+  protected const CLASS_USER_UNLOCK    = 'user-unlock';
+  protected const CLASS_USER_VIEW      = 'user-view';
+
+  /**
+   * Implements do_prepare().
+   */
+  public function do_build(&$http, &$database, &$session, $settings, $items = NULL) {
+    $result = parent::do_build($http, $database, $session, $settings);
+    if (c_base_return::s_has_error($result)) {
+      return $result;
+    }
+    unset($result);
+
+    if ($session->is_logged_in() instanceof c_base_return_false) {
+      return new c_base_return_false();
+    }
+
+    // @todo: this path should either have no trailing id if current user is viewing their own profile or it should have the user id appended for all urls below.
+    $path_id_user = '';
+
+    $menu = $this->pr_create_html_create_menu($settings['base_css'] . static::CLASS_NAME, $this->pr_get_text(0));
+
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(1), $settings['base_path'] . c_standard_paths::URI_USER_VIEW . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_VIEW);
+    $menu->set_tag($item);
+    unset($item);
+
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(2), $settings['base_path'] . c_standard_paths::URI_USER_DASHBOARD . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_DASHBOARD);
+    $menu->set_tag($item);
+    unset($item);
+
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(3), $settings['base_path'] . c_standard_paths::URI_USER_SETTINGS . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_SETTINGS);
+    $menu->set_tag($item);
+    unset($item);
+
+    // @todo: add access check to this menu item and only make it appear to authorized users.
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(4), $settings['base_path'] . c_standard_paths::URI_USER_EDIT . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_EDIT);
+    $menu->set_tag($item);
+    unset($item);
+
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(5), $settings['base_path'] . c_standard_paths::URI_USER_CHECK . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_CHECK);
+    $menu->set_tag($item);
+    unset($item);
+
+    $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(6), $settings['base_path'] . c_standard_paths::URI_USER_REFRESH . $path_id_user);
+    $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_REFRESH);
+    $menu->set_tag($item);
+    unset($item);
+
+    $roles = $session->get_user_current()->get_roles()->get_value_exact();
+    if (array_key_exists(c_base_roles::MANAGER, $roles) || array_key_exists(c_base_roles::ADMINISTER, $roles)) {
+      // @todo: only show lock user if account is unlocked.
+      $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(7), $settings['base_path'] . c_standard_paths::URI_USER_LOCK . $path_id_user);
+      $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_LOCK);
+      $menu->set_tag($item);
+      unset($item);
+
+      // @todo: only show unlock user if account is locked.
+      $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(8), $settings['base_path'] . c_standard_paths::URI_USER_UNLOCK . $path_id_user);
+      $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_UNLOCK);
+      $menu->set_tag($item);
+      unset($item);
+
+      $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(9), $settings['base_path'] . c_standard_paths::URI_USER_DELETE . $path_id_user);
+      $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_DELETE);
+      $menu->set_tag($item);
+      unset($item);
+
+      $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(10), $settings['base_path'] . c_standard_paths::URI_USER_COPY . $path_id_user);
+      $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_COPY);
+      $menu->set_tag($item);
+      unset($item);
+
+      $item = $this->pr_create_html_add_menu_item_link($this->pr_get_text(11), $settings['base_path'] . c_standard_paths::URI_USER_CREATE);
+      $item->set_attribute(c_base_markup_attributes::ATTRIBUTE_CLASS, static::CLASS_USER_CREATE);
+      $menu->set_tag($item);
+      unset($item);
+    }
+    unset($roles);
+
+    return $menu;
+  }
+
+  /**
+   * Implements pr_get_text().
+   */
+  protected function pr_get_text($code, $arguments = array()) {
+    $string = '';
+    switch ($code) {
+      case 0:
+        $string = 'User Menu';
+        break;
+      case 1:
+        $string = 'Profile';
+        break;
+      case 2:
+        $string = 'Dashboard';
+        break;
+      case 3:
+        $string = 'Settings';
+        break;
+      case 4:
+        $string = 'Edit';
+        break;
+      case 5:
+        $string = 'Check';
+        break;
+      case 6:
+        $string = 'Refresh';
+        break;
+      case 7:
+        $string = 'Lock';
+        break;
+      case 8:
+        $string = 'Unlock';
+        break;
+      case 9:
+        $string = 'Delete';
+        break;
+      case 10:
+        $string = 'Copy'; // @todo: implement this in the project.
+        break;
+      case 11:
+        $string = 'Create New User';
+        break;
+    }
+
+    if (!empty($arguments)) {
+      $this->pr_process_replacements($string, $arguments);
+    }
+
+    return $string;
+  }
+}
index 836f1edb08847f4088ccef9aea57da249b66fee6..0bc4f8ea03000e66d1e6d3f193b3c8fdf1dd373b 100644 (file)
@@ -111,7 +111,7 @@ class c_standard_menu_utility extends c_standard_menu {
         $string = 'Administration';
         break;
       case 6:
-        $string = 'Settings';
+        $string = 'Profile';
         break;
       case 7:
         $string = 'Logout';
index 7d28ced153546fd3d65aea96a3ff829d87d1cf50..a84f49195c064c2a53d8643d7f2a1224db3c7b8a 100644 (file)
@@ -13,7 +13,7 @@ require_once('common/standard/classes/standard_path.php');
 require_once('common/theme/classes/theme_html.php');
 
 class c_standard_path_administer_dashboard extends c_standard_path {
-  protected const PATH_SELF = 'a/dashboard';
+  public const PATH_SELF = 'a/dashboard';
 
   /**
    * Implements do_execute().
@@ -46,7 +46,7 @@ class c_standard_path_administer_dashboard extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
index cdd0d5fe8bdea350062d95e4c5c7e1cfe1535503..e3cb86286c68b238a0e4900b4ef7adedcb6751b0 100644 (file)
@@ -13,7 +13,7 @@ require_once('common/standard/classes/standard_path.php');
 require_once('common/theme/classes/theme_html.php');
 
 class c_standard_path_management_dashboard extends c_standard_path {
-  protected const PATH_SELF = 'm/dashboard';
+  public const PATH_SELF = 'm/dashboard';
 
   /**
    * Implements do_execute().
@@ -46,7 +46,7 @@ class c_standard_path_management_dashboard extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
index b2f5483d0cbda394210b86cdb46d4cd6e98ab839..d3d66432d4f6b823f6b5200cf937fd92c1038109 100644 (file)
@@ -15,6 +15,7 @@ class c_standard_path_user_check_ja extends c_standard_path_user_check {
   protected function pr_get_text($code, $arguments = array()) {
     $string = '';
     switch ($code) {
+      case 0:
         if (array_key_exists(':{user_name}', $arguments)) {
           $string = '照合:{user_name}';
         }
@@ -22,6 +23,9 @@ class c_standard_path_user_check_ja extends c_standard_path_user_check {
           $string = '照合';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 6012cd2260369b5bb8ad905fb7ff0873e74bf9f1..ccab40063dba426bdaab6185fa6c1fb8ab14b947 100644 (file)
@@ -15,6 +15,7 @@ class c_standard_path_user_create_ja extends c_standard_path_user_create {
   protected function pr_get_text($code, $arguments = array()) {
     $string = '';
     switch ($code) {
+      case 0:
         if (array_key_exists(':{user_name}', $arguments)) {
           $string = 'ユーザーをコピー:{user_name}';
         }
@@ -22,6 +23,9 @@ class c_standard_path_user_create_ja extends c_standard_path_user_create {
           $string = 'ユーザーを作成する';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 01b6023260fbe8720c792edab543cf01c8fe947c..15c135fa997793250f6421906b71da2b56fc27a5 100644 (file)
@@ -23,6 +23,9 @@ class c_standard_path_user_delete_ja extends c_standard_path_user_delete {
           $string = 'ユーザーを削除する';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index a8edae3aa560e2e1aef1e7faeb56ce85e996b5cd..0866841c75fa8adcac8c5b052f8753d4e31b2e33 100644 (file)
@@ -15,6 +15,7 @@ class c_standard_path_user_edit_ja extends c_standard_path_user_edit {
   protected function pr_get_text($code, $arguments = array()) {
     $string = '';
     switch ($code) {
+      case 0:
         if (array_key_exists(':{user_name}', $arguments)) {
           $string = 'ユーザーを編集:{user_name}';
         }
@@ -22,6 +23,9 @@ class c_standard_path_user_edit_ja extends c_standard_path_user_edit {
           $string = 'ユーザーを編集する';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 77b552b7f0ed1c9de38da41f05c77d3b9c16d369..a8a36f5a2811579a5e607a810852c7f219966245 100644 (file)
@@ -23,6 +23,9 @@ class c_standard_path_user_lock_ja extends c_standard_path_user_lock {
           $string = 'ユーザーをロックする';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 49866f3a6f0cae865bd078bd12f31c5b535822f8..b5becad97885d98ef799934d45a327d9e2a46d87 100644 (file)
@@ -18,6 +18,9 @@ class c_standard_path_user_pdf_ja extends c_standard_path_user_pdf {
       case 0:
         $string = '';
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 49b57289b6f5e0a69b18fc4246990f3c530db42c..03428e0fd7eefa6047a725723ad813b8a123542c 100644 (file)
@@ -18,6 +18,9 @@ class c_standard_path_user_print_ja extends c_standard_path_user_print {
       case 0:
         $string = '';
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index cd675c631e43708e252308017c8cf02053eac8ee..d626e1d4b79e2449756fbab66a05a58ed5afec23 100644 (file)
@@ -18,6 +18,9 @@ class c_standard_path_user_ps_ja extends c_standard_path_user_ps {
       case 0:
         $string = '';
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 325c522df38eba77366e0aa5b421cbc6d9d42565..e0b7ced237386dd8d05bb045b3a19472b672a07e 100644 (file)
@@ -15,6 +15,7 @@ class c_standard_path_user_refresh_ja extends c_standard_path_user_refresh {
   protected function pr_get_text($code, $arguments = array()) {
     $string = '';
     switch ($code) {
+      case 0:
         if (array_key_exists(':{user_name}', $arguments)) {
           $string = '晴らす:{user_name}';
         }
@@ -22,6 +23,9 @@ class c_standard_path_user_refresh_ja extends c_standard_path_user_refresh {
           $string = '晴らす';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
diff --git a/common/standard/paths/u/ja/user_session.php b/common/standard/paths/u/ja/user_session.php
new file mode 100644 (file)
index 0000000..c45cfb9
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/**
+ * @file
+ * Provides path handler for the user session actions.
+ */
+
+/**
+ * Implements c_standard_path_user_session().
+ */
+class c_standard_path_user_session_ja extends c_standard_path_user_session {
+
+  /**
+   * Implements pr_get_text().
+   */
+  protected function pr_get_text($code, $arguments = array()) {
+    return '';
+  }
+}
index afad815353addb3708a10aece303b3d5988a8793..22a80ddda2e3c0f6f8e5a0d7656abbf302f2ea7a 100644 (file)
@@ -63,6 +63,9 @@ class c_standard_path_user_dashboard_ja extends c_standard_path_user_dashboard {
       case 15:
         $string = '管理者';
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 95dece4d9e5537898ee7ed5961adceda60220a3a..83123283cdef6b542f0c1d8e07e2bfc0d906839f 100644 (file)
@@ -23,6 +23,9 @@ class c_standard_path_user_unlock_ja extends c_standard_path_user_unlock {
           $string = 'ユーザーをロック解除する';
         }
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 9105a5e87ea31cfec226375a933b61ae8d3998db..ae4928975848821acaa9110c8d4903c22a2e1018 100644 (file)
@@ -218,6 +218,9 @@ class c_standard_path_user_view_ja extends c_standard_path_user_view {
       case 63:
         $string = 'アクセス履歴';
         break;
+      default:
+        unset($string);
+        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 15a5aae8e3d5e11668c4853599af7d597dd9b9b5..25e0d1e8d2698119c3e691333c25d61ef8e33e48 100644 (file)
@@ -12,6 +12,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -20,8 +22,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/check
  */
-class c_standard_path_user_check extends c_standard_path {
-  protected const PATH_SELF = 'u/check';
+class c_standard_path_user_check extends c_standard_path_user {
+  public const PATH_SELF = 'u/check';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   /**
    * Implements do_execute().
@@ -33,6 +38,112 @@ class c_standard_path_user_check extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -52,18 +163,26 @@ class c_standard_path_user_check extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -76,20 +195,13 @@ class c_standard_path_user_check extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 4ad9db783fa35d4878acfe0c5b10923a7a125749..742b9399ec8dae547338241fa0ba15b7e718523b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * @file
- * Provides path handler for the user create.
+ * Provides path handler for the user create/copy.
  */
 
 require_once('common/base/classes/base_error.php');
@@ -9,16 +9,20 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
 /**
  * Provides a path handler for user creation.
  *
+ * By supplying a user id argument, this create instead functions as a create from the given user (aka: copy).
+ *
  * This listens on: /u/create
  */
-class c_standard_path_user_create extends c_standard_path {
-  protected const PATH_SELF = 'u/create';
+class c_standard_path_user_create extends c_standard_path_user {
+  public const PATH_SELF = 'u/create';
 
   /**
    * Implements do_execute().
@@ -30,6 +34,112 @@ class c_standard_path_user_create extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -49,18 +159,26 @@ class c_standard_path_user_create extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -73,20 +191,13 @@ class c_standard_path_user_create extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index e6e287f0959afcd04c7f5dc6b8968772bd82daa2..c3f0bed96c1507024c2c27cdb79796dd87ccc885 100644 (file)
@@ -9,6 +9,7 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -17,8 +18,8 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/dashboard
  */
-class c_standard_path_user_dashboard extends c_standard_path {
-  protected const PATH_SELF = 'u/dashboard';
+class c_standard_path_user_dashboard extends c_standard_path_user {
+  public const PATH_SELF = 'u/dashboard';
 
   /**
    * Implementation of pr_build_breadcrumbs().
@@ -35,7 +36,7 @@ class c_standard_path_user_dashboard extends c_standard_path {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -52,6 +53,112 @@ class c_standard_path_user_dashboard extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
     $wrapper->set_tag($this->pr_create_tag_text_block(1));
 
@@ -136,20 +243,13 @@ class c_standard_path_user_dashboard extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 559e2e768ee93120e316667f21fd7b30f29f5eec..a9bf73198f7383fd6a4d77070f58845c86820374 100644 (file)
@@ -9,6 +9,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -17,8 +19,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/delete
  */
-class c_standard_path_user_delete extends c_standard_path {
-  protected const PATH_SELF = 'u/delete';
+class c_standard_path_user_delete extends c_standard_path_user {
+  public const PATH_SELF = 'u/delete';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   /**
    * Implements do_execute().
@@ -30,6 +35,112 @@ class c_standard_path_user_delete extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -49,18 +160,26 @@ class c_standard_path_user_delete extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -73,20 +192,13 @@ class c_standard_path_user_delete extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 2bef7ce9434b3c004a36195adfce7c6be5a9ce01..3ee9c3b15dd50beaadfe22d0285c10e8a340b4a9 100644 (file)
@@ -9,6 +9,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -17,8 +19,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/edit
  */
-class c_standard_path_user_edit extends c_standard_path {
-  protected const PATH_SELF = 'u/edit';
+class c_standard_path_user_edit extends c_standard_path_user {
+  public const PATH_SELF = 'u/edit';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   protected const CLASS_USER_EDIT_ACCOUNT  = 'user_settings-account';
   protected const CLASS_USER_EDIT_PERSONAL = 'user_settings-personal';
@@ -29,9 +34,26 @@ class c_standard_path_user_edit extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    parent::pr_build_breadcrumbs();
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
+      unset($result);
+    }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text_breadcrumbs(1), static::PATH_SELF);
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $this->breadcrumbs = new c_base_menu_item();
+    }
+
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -48,7 +70,111 @@ class c_standard_path_user_edit extends c_standard_path {
       return $executed;
     }
 
-    $this->pr_assign_defaults($http, $database, $session, $settings);
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
 
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
@@ -71,20 +197,13 @@ class c_standard_path_user_edit extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 49d7c3b111f40079275f47f38e6512dee3be8ff2..e0d8571b9abf0040d6bd45ea85ac6036920bc78c 100644 (file)
@@ -9,6 +9,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -17,8 +19,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/lock
  */
-class c_standard_path_user_lock extends c_standard_path {
-  protected const PATH_SELF = 'u/lock';
+class c_standard_path_user_lock extends c_standard_path_user {
+  public const PATH_SELF = 'u/lock';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   /**
    * Implements do_execute().
@@ -30,6 +35,112 @@ class c_standard_path_user_lock extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -49,18 +160,26 @@ class c_standard_path_user_lock extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -73,20 +192,13 @@ class c_standard_path_user_lock extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index d8a8a927e075d7eb3f05b611df620d928b0a9e67..ca6603b0d69cdb18a492d5ba1c958939be7cc8e8 100644 (file)
@@ -27,8 +27,8 @@ require_once('common/theme/classes/theme_html.php');
  */
 class c_standard_path_user_login extends c_standard_path {
   public const SESSION_DATE_FORMAT = 'D, d-M-Y H:i:s T';
+  public const PATH_SELF           = 'u/login';
 
-  protected const PATH_SELF   = 'u/login';
   protected const USER_PUBLIC = 'u_standard_public';
 
   /**
@@ -299,7 +299,7 @@ class c_standard_path_user_login extends c_standard_path {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(12), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(12), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -955,7 +955,7 @@ class c_standard_path_user_login extends c_standard_path {
    * Implements pr_get_text_title().
    */
   protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
+    return self::pr_get_text(0, $arguments);
   }
 
   /**
index 8ab1d4cb34b7625109b44073ec992ef03559ffb4..4a775a51b67b8650efdccd2f1ba19872e62abd3f 100644 (file)
@@ -67,7 +67,7 @@ class c_standard_path_user_logout extends c_standard_path {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
index 05bad009b4a6e5f1132d541be41b5ed3ddf6348e..3fac85230f002195ab439b76d8bc8aaf48a8019f 100644 (file)
@@ -9,16 +9,19 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
 
 require_once('common/theme/classes/theme_html.php');
 
 /**
  * Provides a path handler for user in pdf format.
  *
+ * @fixme: this should probably be renamed to c_standard_path_user_view_pdf.
+ *
  * This listens on: /u/pdf
  */
-class c_standard_path_user_pdf extends c_standard_path {
-  protected const PATH_SELF = 'u/pdf';
+class c_standard_path_user_pdf extends c_standard_path_user_view {
+  public const PATH_SELF = 'u/pdf'; // @fixme: make path 'u/pdf/view'.
 
   /**
    * Implements do_execute().
@@ -30,8 +33,6 @@ class c_standard_path_user_pdf extends c_standard_path {
       return $executed;
     }
 
-    $this->pr_assign_defaults($http, $database, $session, $settings);
-
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -51,34 +52,9 @@ class c_standard_path_user_pdf extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
-
-  /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
-   * Implements pr_get_text().
-   */
-  protected function pr_get_text($code, $arguments = array()) {
-    $string = '';
-    switch ($code) {
-      case 0:
-        $string = 'Lock User';
-        break;
-    }
-
-    if (!empty($arguments)) {
-      $this->pr_process_replacements($string, $arguments);
-    }
-
-    return $string;
-  }
 }
index 4bea27f55e27936b18f8721941d8da4bb6574611..ff38f6d5a38f28876836c82dbbae82d8238e63eb 100644 (file)
@@ -9,16 +9,19 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
 
 require_once('common/theme/classes/theme_html.php');
 
 /**
  * Provides a path handler for user print format (printer-friendly).
  *
+ * @fixme: this should probably be renamed to c_standard_path_user_view_print.
+ *
  * This listens on: /u/print
  */
-class c_standard_path_user_print extends c_standard_path {
-  protected const PATH_SELF = 'u/print';
+class c_standard_path_user_print extends c_standard_path_user_view {
+  public const PATH_SELF = 'u/print'; // @fixme: make path 'u/print/view'.
 
   /**
    * Implements do_execute().
@@ -30,8 +33,6 @@ class c_standard_path_user_print extends c_standard_path {
       return $executed;
     }
 
-    $this->pr_assign_defaults($http, $database, $session, $settings);
-
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -51,34 +52,9 @@ class c_standard_path_user_print extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
-
-  /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
-   * Implements pr_get_text().
-   */
-  protected function pr_get_text($code, $arguments = array()) {
-    $string = '';
-    switch ($code) {
-      case 0:
-        $string = 'Lock User';
-        break;
-    }
-
-    if (!empty($arguments)) {
-      $this->pr_process_replacements($string, $arguments);
-    }
-
-    return $string;
-  }
 }
index a77cdad22d98f01808675956e95170d53362b65d..560267030bf50c0f550b875292fdbbdd087769db 100644 (file)
@@ -9,16 +9,19 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
 
 require_once('common/theme/classes/theme_html.php');
 
 /**
  * Provides a path handler for user postcript (postcript format).
  *
+ * @fixme: this should probably be renamed to c_standard_path_user_view_ps.
+ *
  * This listens on: /u/ps
  */
-class c_standard_path_user_ps extends c_standard_path {
-  protected const PATH_SELF = 'u/ps';
+class c_standard_path_user_ps extends c_standard_path_user_view {
+  public const PATH_SELF = 'u/ps'; // @fixme: make path 'u/ps/view'.
 
   /**
    * Implements do_execute().
@@ -30,8 +33,6 @@ class c_standard_path_user_ps extends c_standard_path {
       return $executed;
     }
 
-    $this->pr_assign_defaults($http, $database, $session, $settings);
-
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -51,34 +52,9 @@ class c_standard_path_user_ps extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
-
-  /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
-   * Implements pr_get_text().
-   */
-  protected function pr_get_text($code, $arguments = array()) {
-    $string = '';
-    switch ($code) {
-      case 0:
-        $string = 'Lock User';
-        break;
-    }
-
-    if (!empty($arguments)) {
-      $this->pr_process_replacements($string, $arguments);
-    }
-
-    return $string;
-  }
 }
index 951186d1b68528b89566a749ab3b68bc2c0c9a0f..e117965fc830d78a50e8f645f0a6c45f6150b3cf 100644 (file)
@@ -12,6 +12,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -20,8 +22,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/refresh
  */
-class c_standard_path_user_refresh extends c_standard_path {
-  protected const PATH_SELF = 'u/refresh';
+class c_standard_path_user_refresh extends c_standard_path_user {
+  public const PATH_SELF = 'u/refresh';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   /**
    * Implements do_execute().
@@ -33,6 +38,112 @@ class c_standard_path_user_refresh extends c_standard_path {
       return $executed;
     }
 
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
     $wrapper = $this->pr_create_tag_section(array(1 => 0));
 
     // initialize the content as HTML.
@@ -52,18 +163,26 @@ class c_standard_path_user_refresh extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -76,20 +195,13 @@ class c_standard_path_user_refresh extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
diff --git a/common/standard/paths/u/user_session.php b/common/standard/paths/u/user_session.php
new file mode 100644 (file)
index 0000000..0d79af9
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+/**
+ * @file
+ * Provides path handler for the user session actions.
+ *
+ * This is generally intended to be used to trigger one or more session actions against a user account or related data.
+ * This could be a simple reaction as is common with ajax but could also be a page containing forms.
+ */
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+require_once('common/base/classes/base_path.php');
+
+require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
+
+require_once('common/theme/classes/theme_html.php');
+
+/**
+ * Provides a path handler for user creation.
+ *
+ * This listens on: /u/session
+ */
+class c_standard_path_user_session extends c_standard_path_user {
+  public const PATH_SELF = 'u/session';
+
+  /**
+   * Implements do_execute().
+   */
+  public function do_execute(&$http, &$database, &$session, $settings = array()) {
+    // the parent function performs validation on the parameters.
+    $executed = parent::do_execute($http, $database, $session, $settings);
+    if (c_base_return::s_has_error($executed)) {
+      return $executed;
+    }
+
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
+    // @todo: json responses are expected to be returned for ajax purposes.
+    //        this will very likely support u/session/(ajax_action_name) such as u/session/ping for keeping the session and therefore session cookie alive.
+
+    return $executed;
+  }
+
+  /**
+   * Implements pr_get_text_title().
+   */
+  protected function pr_get_text_title($arguments = array()) {
+    return '';
+  }
+
+  /**
+   * Implements pr_get_text().
+   */
+  protected function pr_get_text($code, $arguments = array()) {
+    return '';
+  }
+}
index 30b67d2ce4017467cb85d29e0ce03d88ea05453d..9c233a0d23726649c94178304533a7c5036ba95e 100644 (file)
@@ -10,6 +10,8 @@ require_once('common/base/classes/base_path.php');
 require_once('common/base/classes/base_database.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -18,19 +20,16 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/settings
  */
-class c_standard_path_user_settings extends c_standard_path {
-  protected const PATH_SELF = 'u/settings';
-
-  protected const ID_USER_MINIMUM = 1000;
+class c_standard_path_user_settings extends c_standard_path_user {
+  public const PATH_SELF = 'u/settings';
 
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
   protected const CLASS_USER_SETTINGS_ACCOUNT  = 'user_settings-account';
   protected const CLASS_USER_SETTINGS_PERSONAL = 'user_settings-personal';
   protected const CLASS_USER_SETTINGS_ACCESS   = 'user_settings-access';
   protected const CLASS_USER_SETTINGS_HISTORY  = 'user_settings-history';
 
-  protected const CLASS_ID_USER          = 'id-user';
-  protected const CLASS_ID_USER_EXTERNAL = 'id-user-external';
-
   /**
    * Implements do_execute().
    */
@@ -58,6 +57,9 @@ class c_standard_path_user_settings extends c_standard_path {
         if ($id_user < static::ID_USER_MINIMUM) {
           $id_user = FALSE;
         }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
       }
       else {
         unset($arguments_total);
@@ -154,18 +156,26 @@ class c_standard_path_user_settings extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -178,20 +188,13 @@ class c_standard_path_user_settings extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 405fd4d98db9489e8c7315a139c7460c30ae364b..29d6d2861bafa88f4401fff53504d4fa4d297b06 100644 (file)
@@ -9,6 +9,8 @@ require_once('common/base/classes/base_return.php');
 require_once('common/base/classes/base_path.php');
 
 require_once('common/standard/classes/standard_path.php');
+require_once('common/standard/classes/standard_path_user.php');
+require_once('common/standard/paths/u/user_view.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -17,8 +19,11 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/unlock
  */
-class c_standard_path_user_unlock extends c_standard_path {
-  protected const PATH_SELF = 'u/unlock';
+class c_standard_path_user_unlock extends c_standard_path_user {
+  public const PATH_SELF = 'u/unlock';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
 
   /**
    * Implements do_execute().
@@ -30,7 +35,113 @@ class c_standard_path_user_unlock extends c_standard_path {
       return $executed;
     }
 
-    $wrapper = $this->pr_create_tag_section(array(1 => 0));
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
+    $wrapper = $this->pr_create_tag_section(array(1 => 1000));
 
     // initialize the content as HTML.
     $this->pr_create_html();
@@ -49,18 +160,26 @@ class c_standard_path_user_unlock extends c_standard_path {
    * Implementation of pr_build_breadcrumbs().
    */
   protected function pr_build_breadcrumbs() {
-    $result = parent::pr_build_breadcrumbs();
-    if ($result instanceof c_base_return_false) {
+    $path_user_view = new c_standard_path_user_view();
+    $path_user_view->set_parameters($this->http, $this->database, $this->session, $this->settings);
+    $path_user_view->set_path_tree($this->get_path_tree($this->path_tree));
+    $this->breadcrumbs = $path_user_view->get_breadcrumbs();
+    unset($path_user_view);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $result = parent::pr_build_breadcrumbs();
+      if ($result instanceof c_base_return_false) {
+        unset($result);
+        return new c_base_return_false();
+      }
       unset($result);
-      return new c_base_return_false();
     }
-    unset($result);
 
     if (!($this->breadcrumbs instanceof c_base_menu_item)) {
       $this->breadcrumbs = new c_base_menu_item();
     }
 
-    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), static::PATH_SELF);
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
     $this->breadcrumbs->set_item($item);
     unset($item);
 
@@ -73,20 +192,13 @@ class c_standard_path_user_unlock extends c_standard_path {
   protected function pr_create_html_add_header_link_canonical() {
     $tag = c_theme_html::s_create_tag(c_base_markup_tag::TYPE_LINK);
     $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_REL, 'canonical');
-    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . static::PATH_SELF);
+    $tag->set_attribute(c_base_markup_attributes::ATTRIBUTE_HREF, $this->settings['base_scheme'] . '://' . $this->settings['base_host'] . $this->settings['base_port'] . $this->settings['base_path'] . self::PATH_SELF);
     $this->html->set_header($tag);
 
     unset($tag);
   }
 
   /**
-   * Implements pr_get_text_title().
-   */
-  protected function pr_get_text_title($arguments = array()) {
-    return $this->pr_get_text(0, $arguments);
-  }
-
-  /**
    * Implements pr_get_text().
    */
   protected function pr_get_text($code, $arguments = array()) {
index 8e1658398a367c6fd4885417541aed1d9d37a24f..b8b977793fd76add7564d1ca50f4e88099534033 100644 (file)
@@ -10,7 +10,7 @@ require_once('common/base/classes/base_path.php');
 require_once('common/base/classes/base_database.php');
 
 require_once('common/standard/classes/standard_path.php');
-require_once('common/standard/paths/u/user_settings.php');
+require_once('common/standard/classes/standard_path_user.php');
 
 require_once('common/theme/classes/theme_html.php');
 
@@ -19,8 +19,164 @@ require_once('common/theme/classes/theme_html.php');
  *
  * This listens on: /u/view
  */
-class c_standard_path_user_view extends c_standard_path_user_settings {
-  protected const PATH_SELF = 'u/view';
+class c_standard_path_user_view extends c_standard_path_user {
+  public const PATH_SELF = 'u/view';
+
+  protected const NAME_MENU_CONTENT    = 'menu_content_user_view';
+  protected const HANDLER_MENU_CONTENT = 'c_standard_menu_content_user_view';
+
+  /**
+   * Implements do_execute().
+   */
+  public function do_execute(&$http, &$database, &$session, $settings = array()) {
+    // the parent function performs validation on the parameters.
+    $executed = parent::do_execute($http, $database, $session, $settings);
+    if (c_base_return::s_has_error($executed)) {
+      return $executed;
+    }
+
+    // @todo: this function needs to check to see if the user has administer (or manager?) roles (c_base_roles::MANAGER, c_base_roles::ADMINISTER) and if they do, set administrative to TRUE when calling do_load().
+    $user = $this->session->get_user_current();
+    $roles_current = $user->get_roles()->get_value_exact();
+
+    $id_user = NULL;
+    $arguments = $this->pr_get_path_arguments(static::PATH_SELF);
+    if (!empty($arguments)) {
+      $arguments_total = count($arguments);
+      $argument = reset($arguments);
+
+      if (is_numeric($argument)) {
+        $id_user = (int) $argument;
+
+        // do not allow view access to reserved/special accounts.
+        if ($id_user < static::ID_USER_MINIMUM) {
+          $id_user = FALSE;
+        }
+
+        // @todo: check to see if user id is valid and accessible.
+        //        If the current viewer cannot access the user, then deny access to this page as appropriate.
+      }
+      else {
+        unset($arguments_total);
+        unset($argument);
+        unset($id_user);
+        unset($user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+
+      if ($arguments_total > 1) {
+        $argument = next($arguments);
+
+        if ($argument == 'print') {
+          // @todo: execute custom print function and then return.
+          $id_user = NULL;
+        }
+        #elseif ($argument == 'pdf') {
+        #  // @todo: execute custom pdf function and then return.
+        #  $id_user = NULL;
+        #}
+        #elseif ($argument == 'ps') {
+        #  // @todo: execute custom postscript function and then return.
+        #  $id_user = NULL;
+        #}
+        else {
+          $id_user = FALSE;
+        }
+      }
+      unset($arguments_total);
+      unset($argument);
+
+      if ($id_user === FALSE) {
+        unset($user);
+        unset($id_user);
+
+        $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+        $executed->set_error($error);
+
+        unset($error);
+        unset($arguments);
+
+        return $executed;
+      }
+    }
+
+    $user = NULL;
+    if (is_null($id_user)) {
+      $user = $this->session->get_user_current();
+      $id_user = $user->get_id()->get_value_exact();
+
+      // do not allow view access to reserved/special accounts.
+      if ($id_user < static::ID_USER_MINIMUM) {
+        $id_user = FALSE;
+      }
+    }
+    else {
+      $user = new c_standard_users_user();
+
+      // @todo: handle database errors.
+      $loaded = $user->do_load($this->database, $id_user);
+      if ($loaded instanceof c_base_return_false) {
+        $id_user = FALSE;
+      }
+      unset($loaded);
+    }
+
+    if ($id_user === FALSE) {
+      unset($id_user);
+
+      $error = c_base_error::s_log(NULL, array('arguments' => array(':{path_name}' => static::PATH_SELF . '/' . implode('/', $arguments), ':{function_name}' => __CLASS__ . '->' . __FUNCTION__)), i_base_error_messages::NOT_FOUND_PATH);
+      $executed->set_error($error);
+
+      unset($error);
+
+      return $executed;
+    }
+    unset($arguments);
+    unset($id_user);
+
+    $wrapper = $this->pr_create_tag_section(array(1 => 0));
+
+    // initialize the content as HTML.
+    $this->pr_create_html();
+    $this->html->set_tag($wrapper);
+    unset($wrapper);
+
+    $this->pr_add_menus();
+
+    $executed->set_output($this->html);
+    unset($this->html);
+
+    return $executed;
+  }
+
+  /**
+   * Implementation of pr_build_breadcrumbs().
+   */
+  protected function pr_build_breadcrumbs() {
+    $result = parent::pr_build_breadcrumbs();
+    if ($result instanceof c_base_return_false) {
+      unset($result);
+      return new c_base_return_false();
+    }
+    unset($result);
+
+    if (!($this->breadcrumbs instanceof c_base_menu_item)) {
+      $this->breadcrumbs = new c_base_menu_item();
+    }
+
+    $item = $this->pr_create_breadcrumbs_item($this->pr_get_text(0), self::PATH_SELF);
+    $this->breadcrumbs->set_item($item);
+    unset($item);
+
+    return new c_base_return_true();
+  }
 
   /**
    * Implements pr_get_text().
@@ -36,9 +192,6 @@ class c_standard_path_user_view extends c_standard_path_user_settings {
           $string = 'View User';
         }
         break;
-      default:
-        // otherwise
-        return parent::pr_get_text($code, $arguments);
     }
 
     if (!empty($arguments)) {
index 8c87f96364bd7d2d65fbe32925900596ac80fdd3..d1ed751f0cad6c4bf322ebcedbd0af15f0aad5bd 100644 (file)
@@ -48,6 +48,10 @@ create table s_tables.t_users (
   date_locked timestamp with time zone,
   date_deleted timestamp with time zone,
 
+  image_original bytea,
+  image_cropped bytea,
+  image_icon bytea,
+
   settings json,
 
   constraint cp_users primary key (id),
@@ -103,51 +107,49 @@ create index i_users_id_sort_x on s_tables.t_users (id_sort) with (fillfactor =
 create index i_users_id_sort_y on s_tables.t_users (id_sort) with (fillfactor = 100) where id_sort = 121;
 create index i_users_id_sort_z on s_tables.t_users (id_sort) with (fillfactor = 100) where id_sort = 122;
 
-
-
 /*** provide current user access to their own information (system users are not allowed to update their account) ***/
 create view s_users.v_users_self with (security_barrier=true) as
-  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, settings from s_tables.t_users
+  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and (name_machine)::text = (current_user)::text;
 
 create view public.v_users_self_session with (security_barrier=true) as
-  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, settings from s_tables.t_users
+  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and (name_machine)::text = (session_user)::text;
 
 create view public.v_users_self_locked_not with (security_barrier=true) as
-  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, settings from s_tables.t_users
+  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and not is_locked and (name_machine)::text = (current_user)::text;
 
 create view public.v_users_self_exists with (security_barrier=true) as
-  select id, name_machine, is_system, is_public, is_locked, is_deleted from s_tables.t_users
+  select id, name_machine, is_system, is_public, is_locked, is_deleted, image_original, image_cropped, image_icon from s_tables.t_users
     where (name_machine)::text = (current_user)::text;
 
 create view s_users.v_users_self_insert with (security_barrier=true) as
-  select id_external, name_human, address_email, is_private, settings from s_tables.t_users
+  select id_external, name_human, address_email, is_private, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and not is_locked and not is_system and not is_public and (name_machine)::text = (current_user)::text
     with check option;
 
 create view s_users.v_users_self_update with (security_barrier=true) as
-  select address_email, is_private, settings from s_tables.t_users
+  select address_email, is_private, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and not is_locked and not is_system and not is_public and (name_machine)::text = (current_user)::text
     with check option;
 
 
 /**** anonymous user has uid = 1 ****/
 create view public.v_users_self with (security_barrier=true) as
-  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, settings from s_tables.t_users
+  select id, id_external, id_sort, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_system, is_public, is_locked, is_private, is_deleted, is_roler, date_created, date_changed, date_synced, date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted and id = 1;
 
 
 /*** provide public user information ***/
 create view public.v_users with (security_barrier=true) as
-  select id, null::bigint as id_external, id_sort, name_machine, name_human, null::public.ct_email as address_email, null::bool as is_administer, null::bool as is_manager, null::bool as is_auditor, null::bool as is_publisher, null::bool as is_insurer, null::bool as is_financer, null::bool as is_reviewer, null::bool as is_editor, null::bool as is_drafter, null::bool as is_requester, is_system, is_public, null::bool as is_locked, is_private, is_deleted, null::bool as is_roler, null::timestamp as date_created, null::timestamp as date_changed, null::timestamp as date_synced, null::timestamp as date_locked, null::timestamp as date_deleted, null::json as settings from s_tables.t_users
+  select id, null::bigint as id_external, id_sort, name_machine, name_human, null::public.ct_email as address_email, null::bool as is_administer, null::bool as is_manager, null::bool as is_auditor, null::bool as is_publisher, null::bool as is_insurer, null::bool as is_financer, null::bool as is_reviewer, null::bool as is_editor, null::bool as is_drafter, null::bool as is_requester, is_system, is_public, null::bool as is_locked, is_private, is_deleted, null::bool as is_roler, null::timestamp as date_created, null::timestamp as date_changed, null::timestamp as date_synced, null::timestamp as date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, null::json as settings from s_tables.t_users
     where (not is_deleted and not is_private) or (not is_deleted and (name_machine)::text = (current_user)::text);
 
 
 /*** provide e-mail address as public information only if it is explicitly allowed ***/
 create view public.v_users_email with (security_barrier=true) as
-  select id, null::bigint as id_external, id_sort, name_machine, name_human, address_email, null::bool as is_administer, null::bool as is_manager, null::bool as is_auditor, null::bool as is_publisher, null::bool as is_insurer, null::bool as is_financer, null::bool as is_reviewer, null::bool as is_editor, null::bool as is_drafter, null::bool as is_requester, is_system, is_public, null::bool as is_locked, is_private, is_deleted, null::bool as is_roler, null::timestamp as date_created, null::timestamp as date_changed, null::timestamp as date_synced, null::timestamp as date_locked, null::timestamp as date_deleted, null::json as settings from s_tables.t_users
+  select id, null::bigint as id_external, id_sort, name_machine, name_human, address_email, null::bool as is_administer, null::bool as is_manager, null::bool as is_auditor, null::bool as is_publisher, null::bool as is_insurer, null::bool as is_financer, null::bool as is_reviewer, null::bool as is_editor, null::bool as is_drafter, null::bool as is_requester, is_system, is_public, null::bool as is_locked, is_private, is_deleted, null::bool as is_roler, null::timestamp as date_created, null::timestamp as date_changed, null::timestamp as date_synced, null::timestamp as date_locked, null::timestamp as date_deleted, image_original, image_cropped, image_icon, null::json as settings from s_tables.t_users
     where (not is_deleted and not is_private and not (address_email).private) or (not is_deleted and (name_machine)::text = (current_user)::text);
 
 
@@ -157,16 +159,16 @@ create view s_managers.v_users with (security_barrier=true) as
     where not is_deleted;
 
 create view s_managers.v_users_insert with (security_barrier=true) as
-  select id, id_external, name_machine, name_human, address_email, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, settings from s_tables.t_users
+  select id, id_external, name_machine, name_human, address_email, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, image_original, image_cropped, image_icon, settings from s_tables.t_users
     with check option;
 
 create view s_managers.v_users_update with (security_barrier=true) as
-  select id, id_external, name_machine, name_human, address_email, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, settings from s_tables.t_users
+  select id, id_external, name_machine, name_human, address_email, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where not is_deleted
     with check option;
 
 create view s_managers.v_users_deleted with (security_barrier=true) as
-  select id, id_external, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, date_created, date_changed, date_synced, date_locked, settings from s_tables.t_users
+  select id, id_external, name_machine, name_human, address_email, is_administer, is_manager, is_auditor, is_publisher, is_insurer, is_financer, is_reviewer, is_editor, is_drafter, is_requester, is_locked, is_private, is_roler, date_created, date_changed, date_synced, date_locked, image_original, image_cropped, image_icon, settings from s_tables.t_users
     where is_deleted;