add the ability to send PMs (and make it an event, so other extensions can send them)
git-svn-id: file:///home/shish/svn/shimmie2/trunk@1033 7f39781d-f577-437e-ae19-be835c7a54ca
This commit is contained in:
parent
2511b79935
commit
d5955e97a8
@ -6,6 +6,16 @@
|
|||||||
* Description: Allow users to send messages to eachother
|
* Description: Allow users to send messages to eachother
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
class SendPMEvent extends Event {
|
||||||
|
public function SendPMEvent($from_id, $from_ip, $to_id, $subject, $message) {
|
||||||
|
$this->from_id = $from_id;
|
||||||
|
$this->from_ip = $from_ip;
|
||||||
|
$this->to_id = $to_id;
|
||||||
|
$this->subject = $subject;
|
||||||
|
$this->message = $message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PM implements Extension {
|
class PM implements Extension {
|
||||||
var $theme;
|
var $theme;
|
||||||
|
|
||||||
@ -30,7 +40,7 @@ class PM implements Extension {
|
|||||||
if($event instanceof UserPageBuildingEvent) {
|
if($event instanceof UserPageBuildingEvent) {
|
||||||
global $user;
|
global $user;
|
||||||
$duser = $event->user;
|
$duser = $event->user;
|
||||||
if(!$user->is_anonymous()) {
|
if(!$user->is_anonymous() && !$duser->is_anonymous()) {
|
||||||
if(($user->id == $duser->id) || $user->is_admin()) {
|
if(($user->id == $duser->id) || $user->is_admin()) {
|
||||||
$this->theme->display_pms($event->page, $this->get_pms($duser));
|
$this->theme->display_pms($event->page, $this->get_pms($duser));
|
||||||
}
|
}
|
||||||
@ -40,41 +50,65 @@ class PM implements Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(($event instanceof PageRequestEvent) && $event->page_matches("pm/read")) {
|
if(($event instanceof PageRequestEvent) && $event->page_matches("pm")) {
|
||||||
global $database;
|
global $database;
|
||||||
global $config;
|
global $config;
|
||||||
global $user;
|
global $user;
|
||||||
$pm_id = int_escape($event->get_arg(0));
|
if(!$user->is_anonymous()) {
|
||||||
$pm = $database->get_row("SELECT * FROM private_message WHERE id = ?", array($pm_id));
|
switch($event->get_arg(0)) {
|
||||||
if(is_null($pm)) {
|
case "read":
|
||||||
// error
|
$pm_id = int_escape($event->get_arg(1));
|
||||||
}
|
$pm = $database->get_row("SELECT * FROM private_message WHERE id = ?", array($pm_id));
|
||||||
else if(($pm["to_id"] == $user->id) || $user->is_admin()) {
|
if(is_null($pm)) {
|
||||||
$from_user = User::by_id($config, $database, int_escape($pm["from_id"]));
|
$this->theme->display_error($event->page, "No such PM", "There is no PM #$pm_id");
|
||||||
$this->theme->display_message($event->page, $from_user, $event->user, $pm);
|
}
|
||||||
}
|
else if(($pm["to_id"] == $user->id) || $user->is_admin()) {
|
||||||
else {
|
$from_user = User::by_id($config, $database, int_escape($pm["from_id"]));
|
||||||
// else
|
$database->get_row("UPDATE private_message SET is_read='Y' WHERE id = ?", array($pm_id));
|
||||||
|
$this->theme->display_message($event->page, $from_user, $event->user, $pm);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// permission denied
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "delete":
|
||||||
|
$pm_id = int_escape($event->get_arg(1));
|
||||||
|
$pm = $database->get_row("SELECT * FROM private_message WHERE id = ?", array($pm_id));
|
||||||
|
if(is_null($pm)) {
|
||||||
|
$this->theme->display_error($event->page, "No such PM", "There is no PM #$pm_id");
|
||||||
|
}
|
||||||
|
else if(($pm["to_id"] == $user->id) || $user->is_admin()) {
|
||||||
|
$database->execute("DELETE FROM private_message WHERE id = ?", array($pm_id));
|
||||||
|
$event->page->set_mode("redirect");
|
||||||
|
$event->page->set_redirect(make_link("user"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// permission denied
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "send":
|
||||||
|
$to_id = int_escape($_POST["to_id"]);
|
||||||
|
$from_id = $user->id;
|
||||||
|
$subject = $_POST["subject"];
|
||||||
|
$message = $_POST["message"];
|
||||||
|
send_event(new SendPMEvent($from_id, $_SERVER["REMOTE_ADDR"], $to_id, $subject, $message));
|
||||||
|
$event->page->set_mode("redirect");
|
||||||
|
$event->page->set_redirect(make_link($_SERVER["REFERER"]));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(($event instanceof PageRequestEvent) && $event->page_matches("pm/delete")) {
|
if($event instanceof SendPMEvent) {
|
||||||
global $database;
|
global $database;
|
||||||
global $config;
|
$database->execute("
|
||||||
global $user;
|
INSERT INTO private_message(
|
||||||
$pm_id = int_escape($event->get_arg(0));
|
from_id, from_ip, to_id,
|
||||||
$pm = $database->get_row("SELECT * FROM private_message WHERE id = ?", array($pm_id));
|
sent_date, subject, message)
|
||||||
if(is_null($pm)) {
|
VALUES(?, ?, ?, now(), ?, ?)",
|
||||||
// error
|
array($event->from_id, $event->from_ip,
|
||||||
}
|
$event->to_id, $event->subject, $event->message)
|
||||||
else if(($pm["to_id"] == $user->id) || $user->is_admin()) {
|
);
|
||||||
$database->execute("DELETE FROM private_message WHERE id = ?", array($pm_id));
|
|
||||||
$event->page->set_mode("redirect");
|
|
||||||
$event->page->set_redirect(make_link("user"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// else
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user