Thread: [Phpfreechat-svn] SF.net SVN: phpfreechat: [878] trunk/src/commands/invite.class.php
Status: Beta
Brought to you by:
kerphi
From: <ke...@us...> - 2006-11-27 17:36:53
|
Revision: 878 http://svn.sourceforge.net/phpfreechat/?rev=878&view=rev Author: kerphi Date: 2006-11-27 09:36:52 -0800 (Mon, 27 Nov 2006) Log Message: ----------- [en] New /invite command. Syntax is: /invite {nickname to invite} [{target channel}] (thanks to Benedikt Hallinger) [20min] [fr] Nouvelle commande /invite permettant d'inviter une personne dans un salon. La syntaxe de la commande est : /invite {pseudo a inviter} [{salon de destination}] (merci ?\195?\160 Benedikt Hallinger) [20min] Added Paths: ----------- trunk/src/commands/invite.class.php Added: trunk/src/commands/invite.class.php =================================================================== --- trunk/src/commands/invite.class.php (rev 0) +++ trunk/src/commands/invite.class.php 2006-11-27 17:36:52 UTC (rev 878) @@ -0,0 +1,82 @@ +<?php + +/** + * invite.class.php + * + * Copyright \xA9 2006 Stephane Gully <ste...@gm...> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +/** + * /invite command + * + * Invites other users into a channel + * Currently this is implemented as a "autojoin", so the invited user joins automatically. + * The parameter "target channel" is optional, if not set it defaults to the current channel + * + * @author Benedikt Hallinger <be...@ph...> + */ +class pfcCommand_invite extends pfcCommand +{ + var $usage = "/invite {nickname to invite} [{target channel}]"; + + function run(&$xml_reponse, $p) + { + $clientid = $p["clientid"]; + $param = $p["param"]; + $sender = $p["sender"]; + $recipient = $p["recipient"]; + $recipientid = $p["recipientid"]; + + $c =& $this->c; // pfcGlobalConfig + $u =& $this->u; // pfcUserConfig + $container =& $c->getContainerInstance(); // Connection to the chatbackend + + $p_array = split(' ', $param); // Split the parameters: [0]= targetnick, [1]=targetchannel + if (!isset($p_array[1])) $p_array[1] = $u->channels[$recipientid]["name"]; // Default: current channel + if (!isset($p_array[0]) || !isset($p_array[1])) + { + // Parameters not ok! + $cmdp = $p; + $cmdp["param"] = _pfc("Missing parameter"); + $cmdp["param"] .= " (".$this->usage.")"; + $cmd =& pfcCommand::Factory("error"); + $cmd->run($xml_reponse, $cmdp); + return; + } + + // inviting a user: just add a join command to play to the aimed user metadata. + $nickid = $container->getNickId($p_array[0]); // get the internal ID of that chatter + if ($nickid != "") + { + $cmdtoplay = $container->getUserMeta($nickid, 'cmdtoplay'); // get the users command queue + $cmdtoplay = ($cmdtoplay == NULL) ? array() : unserialize($cmdtoplay); + $cmdtmp = array("join", /* cmdname */ + $p_array[1], /* param */ + $sender, /* sender */ + $recipient, /* recipient */ + $recipientid,/* recipientid */ + ); + $cmdtoplay[] = $cmdtmp; // store the command in the queue + $container->setUserMeta($nickid, 'cmdtoplay', serialize($cmdtoplay)); // close and store the queue + + // Ok, the user is invited, now write something into the chat, so his tab opens + $container->write($recipient, 'SYSTEM', "notice", $p_array[0].' was invited by '.$sender); + } + } +} +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2007-01-31 09:17:34
|
Revision: 941 http://svn.sourceforge.net/phpfreechat/?rev=941&view=rev Author: kerphi Date: 2007-01-31 01:17:33 -0800 (Wed, 31 Jan 2007) Log Message: ----------- [en] Bug fix: don't allow to invite people in a channel if the inviter is not already present in this channel [0h25] [fr] Bug fix : on n'autorise pas l'invitation dans un salon si l'inviteur n'est pas deja present dans ce salon [0h25] Modified Paths: -------------- trunk/src/commands/invite.class.php Modified: trunk/src/commands/invite.class.php =================================================================== --- trunk/src/commands/invite.class.php 2007-01-31 09:15:15 UTC (rev 940) +++ trunk/src/commands/invite.class.php 2007-01-31 09:17:33 UTC (rev 941) @@ -64,14 +64,25 @@ $cmd->run($xml_reponse, $cmdp); return; } + + // check that the inviter is already in the channeltarget + if ($ct->isNickOnline(pfcCommand_join::GetRecipient($channeltarget),$u->nickid) == -1) + { + $cmdp = $p; + $cmdp["params"] = array(); + $cmdp["param"] = _pfc("You must join %s to invite users in this channel",$channeltarget); + $cmd =& pfcCommand::Factory("error"); + $cmd->run($xml_reponse, $cmdp); + return; + } // inviting a user: just add a join command to play to the aimed user metadata. - $nickidtoinvite = $ct->getNickId($nicktoinvite); + $nicktoinvite_id = $ct->getNickId($nicktoinvite); $cmdstr = 'join2'; $cmdp = array(); $cmdp['param'] = $channeltarget; // channel target name $cmdp['params'][] = $channeltarget; // channel target name - pfcCommand::AppendCmdToPlay($nickidtoinvite, $cmdstr, $cmdp); + pfcCommand::AppendCmdToPlay($nicktoinvite_id, $cmdstr, $cmdp); // notify the aimed channel that a user has been invited $cmdp = array(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |