diff options
| author | Tim Almdal <tnalmdal@shaw.ca> | 2009-10-15 09:05:44 -0700 | 
|---|---|---|
| committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-10-15 09:05:44 -0700 | 
| commit | 7e4c0e7135976173ddfee799b84234a10b9c3fdb (patch) | |
| tree | 0e28c5c27c3b64aa033c8009bc84087016a6e4cf /modules/user/controllers/users.php | |
| parent | 1ca835cea7d738b911e7371f64e8c038a85b471d (diff) | |
| parent | f5dd8d487eefe9aa0b4e1f38db79d3ee952b783a (diff) | |
Merge branch 'master' into talmdal_dev
Diffstat (limited to 'modules/user/controllers/users.php')
| -rw-r--r-- | modules/user/controllers/users.php | 103 | 
1 files changed, 103 insertions, 0 deletions
diff --git a/modules/user/controllers/users.php b/modules/user/controllers/users.php new file mode 100644 index 00000000..b03a47cc --- /dev/null +++ b/modules/user/controllers/users.php @@ -0,0 +1,103 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2009 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA  02110-1301, USA. + */ +class Users_Controller extends Controller { +  public function update($id) { +    $user = user::lookup($id); + +    if ($user->guest || $user->id != user::active()->id) { +      access::forbidden(); +    } + +    $form = $this->_get_edit_form($user); +    $valid = $form->validate(); +    if ($valid) { +      $user->full_name = $form->edit_user->full_name->value; +      if ($form->edit_user->password->value) { +        $user->password = $form->edit_user->password->value; +      } +      $user->email = $form->edit_user->email->value; +      $user->url = $form->edit_user->url->value; +      if ($form->edit_user->locale) { +        $desired_locale = $form->edit_user->locale->value; +        $new_locale = $desired_locale == "none" ? null : $desired_locale; +        if ($new_locale != $user->locale) { +          // Delete the session based locale preference +          setcookie("g_locale", "", time() - 24 * 3600, "/"); +        } +        $user->locale = $new_locale; +      } +      $user->save(); +      module::event("user_edit_form_completed", $user, $form); + +      message::success(t("User information updated.")); +      print json_encode( +        array("result" => "success", +              "resource" => url::site("users/{$user->id}"))); +    } else { +      print json_encode( +        array("result" => "error", +              "form" => $form->__toString())); +    } +  } + +  public function form_edit($id) { +    $user = user::lookup($id); +    if ($user->guest || $user->id != user::active()->id) { +      access::forbidden(); +    } + +    print $this->_get_edit_form($user); +  } + +  private function _get_edit_form($user) { +    $form = new Forge("users/update/$user->id", "", "post", array("id" => "g-edit-user-form")); +    $form->set_attr("class", "g-narrow"); +    $group = $form->group("edit_user")->label(t("Edit User: %name", array("name" => $user->name))); +    $group->input("full_name")->label(t("Full Name"))->id("g-fullname")->value($user->full_name); +    self::_add_locale_dropdown($group, $user); +    $group->password("password")->label(t("Password"))->id("g-password"); +    $group->password("password2")->label(t("Confirm Password"))->id("g-password2") +      ->matches($group->password); +    $group->input("email")->label(t("Email"))->id("g-email")->value($user->email); +    $group->input("url")->label(t("URL"))->id("g-url")->value($user->url); +    $form->add_rules_from($user); + +    module::event("user_edit_form", $user, $form); +    $group->submit("")->value(t("Save")); +    return $form; +  } + +  /** @todo combine with Admin_Users_Controller::_add_locale_dropdown */ +  private function _add_locale_dropdown(&$form, $user=null) { +    $locales = locales::installed(); +    foreach ($locales as $locale => $display_name) { +      $locales[$locale] = SafeString::of_safe_html($display_name); +    } +    if (count($locales) > 1) { +      // Put "none" at the first position in the array +      $locales = array_merge(array("" => t("« none »")), $locales); +      $selected_locale = ($user && $user->locale) ? $user->locale : ""; +      $form->dropdown("locale") +        ->label(t("Language Preference")) +        ->options($locales) +        ->selected($selected_locale); +    } +  } +}  | 
