summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/comment/views/admin_block_recent_comments.html.php3
-rw-r--r--modules/comment/views/comment.html.php3
-rw-r--r--modules/comment/views/comments.html.php3
-rw-r--r--modules/gallery/controllers/user_profile.php80
-rw-r--r--modules/gallery/helpers/gallery_event.php4
-rw-r--r--modules/gallery/helpers/user_profile.php55
-rw-r--r--modules/gallery/views/admin_block_log_entries.html.php2
-rw-r--r--modules/gallery/views/login_current_user.html.php9
-rw-r--r--modules/gallery/views/user_profile.html.php69
-rw-r--r--modules/recaptcha/helpers/recaptcha_event.php6
10 files changed, 222 insertions, 12 deletions
diff --git a/modules/comment/views/admin_block_recent_comments.html.php b/modules/comment/views/admin_block_recent_comments.html.php
index d9776def..99f72a30 100644
--- a/modules/comment/views/admin_block_recent_comments.html.php
+++ b/modules/comment/views/admin_block_recent_comments.html.php
@@ -8,8 +8,9 @@
width="32"
height="32" />
<?= gallery::date_time($comment->created) ?>
- <?= t('<a href="#">%author_name</a> said <em>%comment_text</em>',
+ <?= t('<a href="%url">%author_name</a> said <em>%comment_text</em>',
array("author_name" => html::clean($comment->author_name()),
+ "url" => user_profile::url($comment->author_id),
"comment_text" => text::limit_words(nl2br(html::purify($comment->text)), 50))); ?>
</li>
<? endforeach ?>
diff --git a/modules/comment/views/comment.html.php b/modules/comment/views/comment.html.php
index 2c485b53..c4cf1ce0 100644
--- a/modules/comment/views/comment.html.php
+++ b/modules/comment/views/comment.html.php
@@ -8,8 +8,9 @@
width="40"
height="40" />
</a>
- <?= t("on %date_time, <a href=\"#\">%name</a> said",
+ <?= t("on %date_time, <a href=\"%url\">%name</a> said",
array("date_time" => gallery::date_time($comment->created),
+ "url" => user_profile::url($comment->author_id),
"name" => html::clean($comment->author_name()))) ?>
</p>
<div>
diff --git a/modules/comment/views/comments.html.php b/modules/comment/views/comments.html.php
index fc54e3d2..c8236997 100644
--- a/modules/comment/views/comments.html.php
+++ b/modules/comment/views/comments.html.php
@@ -22,8 +22,9 @@
width="40"
height="40" />
</a>
- <?= t('on %date <a href="#">%name</a> said',
+ <?= t('on %date <a href="%url">%name</a> said',
array("date" => date("Y-M-d H:i:s", $comment->created),
+ "url" => user_profile::url($comment->author_id),
"name" => html::clean($comment->author_name()))); ?>
</p>
<div>
diff --git a/modules/gallery/controllers/user_profile.php b/modules/gallery/controllers/user_profile.php
new file mode 100644
index 00000000..808531da
--- /dev/null
+++ b/modules/gallery/controllers/user_profile.php
@@ -0,0 +1,80 @@
+<?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 User_Profile_Controller extends Controller {
+ public function show($id) {
+ // If we get here, then we should have a user id other than guest.
+ $user = identity::lookup_user($id);
+ $active_user = identity::active_user();
+ $is_current_active = $active_user->id == $id;
+ $display_all = $active_user->admin || ($is_current_active && !$active_user->guest);
+
+ $v = new Theme_View("page.html", "other", "profile");
+ $v->page_title = t("%name Profile", array("name" => $user->display_name()));
+ $v->content = new View("user_profile.html");
+
+ // @todo modify user_home to supply a link to their album,
+ // @todo add list of watches
+ // @todo add all comments
+ // @todo add rest api key
+ $v->content->user = $user;
+ $v->content->height = 250;
+ $v->content->not_current = !$is_current_active;
+ $v->content->editable = identity::is_writable() && $display_all;
+ $v->content->return = SafeString::of(Input::instance()->get("return"));
+
+ $fields = array("name" => t("Name"), "locale" => t("Locale"), "email" => t("Email"),
+ "full_name" => t("Full name"), "url" => "Web site");
+ if (!$display_all) {
+ $fields = array("name" => t("Name"), "full_name" => t("Full name"), "url" => "Web site");
+ }
+ $v->content->fields = array();
+ foreach ($fields as $field => $label) {
+ if (!empty($user->$field)) {
+ $v->content->fields[(string)$label->for_html()] = $user->$field;
+ }
+ }
+
+ print $v;
+ }
+
+ public function contact($id) {
+ $user = identity::lookup_user($id);
+ print user_profile::get_contact_form($user);
+ }
+
+ public function send($id) {
+ $user = identity::lookup_user($id);
+ $form = user_profile::get_contact_form($user);
+ if ($form->validate()) {
+ Sendmail::factory()
+ ->to($user->email)
+ ->subject($form->message->subject->value)
+ ->header("Mime-Version", "1.0")
+ ->header("Content-type", "text/html; charset=iso-8859-1")
+ ->reply_to($form->message->reply_to->value)
+ ->message($form->message->message->value)
+ ->send();
+ message::success(t("Sent message to %user_name", array("user_name" => $user->display_name())));
+ print json_encode(array("result" => "success"));
+ } else {
+ print json_encode(array("result" => "error", "form" => (string)$form));
+ }
+ }
+}
diff --git a/modules/gallery/helpers/gallery_event.php b/modules/gallery/helpers/gallery_event.php
index 6175e049..29940ac6 100644
--- a/modules/gallery/helpers/gallery_event.php
+++ b/modules/gallery/helpers/gallery_event.php
@@ -111,11 +111,11 @@ class gallery_event_Core {
->label(t("Login")));
} else {
$csrf = access::csrf_token();
- $menu->append(Menu::factory("dialog")
+ $menu->append(Menu::factory("link")
->id("user_menu_edit_profile")
->css_id("g-user-profile-link")
->view("login_current_user.html")
- ->url(url::site("form/edit/user/{$user->id}"))
+ ->url(user_profile::url($user->id))
->label($user->display_name()));
$menu->append(Menu::factory("link")
->id("user_menu_logout")
diff --git a/modules/gallery/helpers/user_profile.php b/modules/gallery/helpers/user_profile.php
new file mode 100644
index 00000000..018e1bd1
--- /dev/null
+++ b/modules/gallery/helpers/user_profile.php
@@ -0,0 +1,55 @@
+<?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 user_profile_Core {
+ /**
+ * Generate the url to display the profile
+ * @return url for the profile display
+ */
+ static function url($user_id) {
+ $return_url = urlencode(url::abs_current());
+ return url::site("user_profile/show/{$user_id}?return=$return_url");
+ }
+
+ static function get_contact_form($user) {
+ $form = new Forge("user_profile/send/{$user->id}", "", "post",
+ array("id" => "g-user-profile-contact-form"));
+ $group = $form->group("message")
+ ->label(t("Compose message to %name", array("name" => $user->display_name())));
+ $group->input("reply_to")
+ ->label(t("From:"))
+ ->rules("required|length[1, 256]|valid_email")
+ ->error_messages("required", t("Field is required"))
+ ->error_messages("max_length", t("Field exceeds 256 bytes"))
+ ->error_messages("valid_email", t("Field is not a valid email address"));
+ $group->input("subject")
+ ->label(t("Subject:"))
+ ->rules("required|length[1, 256]")
+ ->error_messages("required", t("Field is required"))
+ ->error_messages("max_length", t("Field exceeds 256 bytes"));
+ $group->textarea("message")
+ ->label(t("Message:"))
+ ->rules("required")
+ ->error_messages("required", t("Field is required"));
+ module::event("user_profile_contact_form", $form);
+ $group->submit("")->value(t("Send"));
+ return $form;
+ }
+}
diff --git a/modules/gallery/views/admin_block_log_entries.html.php b/modules/gallery/views/admin_block_log_entries.html.php
index 780ff2d0..90ce88a7 100644
--- a/modules/gallery/views/admin_block_log_entries.html.php
+++ b/modules/gallery/views/admin_block_log_entries.html.php
@@ -2,7 +2,7 @@
<ul>
<? foreach ($entries as $entry): ?>
<li class="<?= log::severity_class($entry->severity) ?>" style="direction: ltr">
- <a href="<?= url::site("user/$entry->user_id") ?>"><?= html::clean($entry->user->name) ?></a>
+ <a href="<?= user_profile::url($entryr->id) ?>"><?= html::clean($entry->user->name) ?></a>
<?= gallery::date_time($entry->timestamp) ?>
<?= $entry->message ?>
<?= $entry->html ?>
diff --git a/modules/gallery/views/login_current_user.html.php b/modules/gallery/views/login_current_user.html.php
index e3b3688f..39f52b51 100644
--- a/modules/gallery/views/login_current_user.html.php
+++ b/modules/gallery/views/login_current_user.html.php
@@ -1,11 +1,8 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<li>
<? $name = $menu->label->for_html() ?>
- <? if (identity::is_writable()): ?>
+ <? $hover_text = Identity::is_writable() ? t("Edit your profile")->for_html_attr() :
+ t("Display your profile")->for_html_attr() ?>
<?= t("Logged in as %name", array("name" => html::mark_clean(
- "<a href='$menu->url' title='" . t("Edit your profile")->for_html_attr() .
- "' id='$menu->id' class='g-dialog-link'>{$name}</a>"))) ?>
- <? else: ?>
- <?= t("Logged in as %name", array("name" => $name)) ?>
- <? endif ?>
+ "<a href='$menu->url' title='$hover_text' id='$menu->id'>{$name}</a>"))) ?>
</li>
diff --git a/modules/gallery/views/user_profile.html.php b/modules/gallery/views/user_profile.html.php
new file mode 100644
index 00000000..e7ce56b3
--- /dev/null
+++ b/modules/gallery/views/user_profile.html.php
@@ -0,0 +1,69 @@
+<?php defined("SYSPATH") or die("No direct script access.") ?>
+<style>
+ #g-user-profile #g-profile-buttons {
+ bottom: 0;
+ position: absolute;
+ right: 0;
+ }
+
+ #g-user-profile fieldset {
+ border: 1px solid #CCCCCC;
+ padding: 0 1em 0.8em;
+ }
+
+ #g-user-profile fieldset label {
+ font-weight: bold;
+ }
+
+ #g-user-profile fieldset div {
+ padding-left: 1em;
+ }
+
+ #g-user-profile td {
+ border: none;
+ padding: 0;
+ }
+
+</style>
+<script>
+ $("#g-user-profile").ready(function() {
+ //$("#g-profile-return").click(function(event) {
+ // window.location = <?= $return->for_js() ?>;
+ //});
+ });
+</script>
+<div id="g-user-profile" style="height: <?= $height ?>px">
+ <h1 style="display: none"><?= t("%name Profile", array("name" => $user->display_name())) ?></h1>
+ <div>
+ <fieldset>
+ <label><?= t("User information") ?></label>
+ <div>
+ <table>
+ <? foreach ($fields as $field => $value): ?>
+ <tr>
+ <td><?= $field ?></td>
+ <td><?= $value ?></td>
+ </tr>
+ <? endforeach ?>
+ </table>
+ </div>
+ </fieldset>
+ </div>
+ <div id="g-profile-buttons" class="ui-helper-clearfix g-right">
+ <? if (!$user->guest && $not_current && !empty($user->email)): ?>
+ <a class="g-button ui-icon-right ui-state-default ui-corner-all g-dialog-link"
+ href="<?= url::site("user_profile/contact/{$user->id}") ?>">
+ <?= t("Contact") ?>
+ </a>
+ <? endif ?>
+ <? if ($editable): ?>
+ <a class="g-button ui-icon-right ui-state-default ui-corner-all g-dialog-link" href="<?= url::site("form/edit/users/{$user->id}") ?>">
+ <?= t("Edit") ?>
+ </a>
+ <? endif ?>
+
+ <a class="g-button ui-icon-right ui-state-default ui-corner-all" href="<?= $return->for_html_attr() ?>">
+ <?= t("Return") ?>
+ </a>
+ </div>
+</div> \ No newline at end of file
diff --git a/modules/recaptcha/helpers/recaptcha_event.php b/modules/recaptcha/helpers/recaptcha_event.php
index e7ded3ab..a7f64bdd 100644
--- a/modules/recaptcha/helpers/recaptcha_event.php
+++ b/modules/recaptcha/helpers/recaptcha_event.php
@@ -18,6 +18,12 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class recaptcha_event_Core {
+ static function user_profile_contact_form($form) {
+ if (module::get_var("recaptcha", "public_key")) {
+ $form->message->recaptcha("recaptcha")->label("")->id("g-recaptcha");
+ }
+ }
+
static function comment_add_form($form) {
if (module::get_var("recaptcha", "public_key")) {
$form->add_comment->recaptcha("recaptcha")->label("")->id("g-recaptcha");