* added vcard support
git-svn-id: svn://netflint.net/xmpphp@71 ef36c318-a008-4979-b6e8-6b496270793b
This commit is contained in:
parent
b13761eb26
commit
eaf949de88
4
README
4
README
@ -31,12 +31,8 @@ documentation on the website.
|
|||||||
|
|
||||||
TODO
|
TODO
|
||||||
================================================================================
|
================================================================================
|
||||||
* Rosters (I know, a big one)
|
|
||||||
* Documentation
|
* Documentation
|
||||||
* TLS Cert Inspection (Even possible in PHP?)
|
|
||||||
* MUC Support
|
* MUC Support
|
||||||
* Plugins
|
|
||||||
* XML Masking Handlers
|
|
||||||
|
|
||||||
License Exception
|
License Exception
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
@ -45,12 +45,12 @@ class XMPPHP_XMPP extends XMPPHP_XMLStream {
|
|||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $server;
|
public $server;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $user;
|
public $user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
@ -380,4 +380,41 @@ class XMPPHP_XMPP extends XMPPHP_XMLStream {
|
|||||||
stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
|
stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
|
||||||
$this->reset();
|
$this->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the vcard
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getVCard($jid = Null) {
|
||||||
|
$id = $this->getID();
|
||||||
|
$this->addIdHandler($id, 'vcard_get_handler');
|
||||||
|
if($jid) {
|
||||||
|
$this->send("<iq type='get' id='$id' to='$jid'><vCard xmlns='vcard-temp' /></iq>");
|
||||||
|
} else {
|
||||||
|
$this->send("<iq type='get' id='$id'><vCard xmlns='vcard-temp' /></iq>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VCard retrieval handler
|
||||||
|
*
|
||||||
|
* @param XML Object $xml
|
||||||
|
*/
|
||||||
|
protected function vcard_get_handler($xml) {
|
||||||
|
$vcard_array = array();
|
||||||
|
$vcard = $xml->sub('vcard');
|
||||||
|
// go through all of the sub elements and add them to the vcard array
|
||||||
|
foreach ($vcard->subs as $sub) {
|
||||||
|
if ($sub->subs) {
|
||||||
|
$vcard_array[$sub->name] = array();
|
||||||
|
foreach ($sub->subs as $sub_child) {
|
||||||
|
$vcard_array[$sub->name][$sub_child->name] = $sub_child->data;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$vcard_array[$sub->name] = $sub->data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$vcard_array['from'] = $xml->attrs['from'];
|
||||||
|
$this->event('vcard', $vcard_array);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@ include 'XMPPHP/XMPP.php';
|
|||||||
$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO);
|
$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO);
|
||||||
$conn->autoSubscribe();
|
$conn->autoSubscribe();
|
||||||
|
|
||||||
|
$vcard_request = array();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$conn->connect();
|
$conn->connect();
|
||||||
while(!$conn->isDisconnected()) {
|
while(!$conn->isDisconnected()) {
|
||||||
@ -24,8 +26,15 @@ try {
|
|||||||
print $pl['body'] . "\n";
|
print $pl['body'] . "\n";
|
||||||
print "---------------------------------------------------------------------------------\n";
|
print "---------------------------------------------------------------------------------\n";
|
||||||
$conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);
|
$conn->message($pl['from'], $body="Thanks for sending me \"{$pl['body']}\".", $type=$pl['type']);
|
||||||
if($pl['body'] == 'quit') $conn->disconnect();
|
if($cmd[0] == 'quit') $conn->disconnect();
|
||||||
if($pl['body'] == 'break') $conn->send("</end>");
|
if($cmd[0] == 'break') $conn->send("</end>");
|
||||||
|
if($cmd[0] == 'vcard') {
|
||||||
|
if(!($cmd[1])) $cmd[1] = $conn->user . '@' . $conn->server;
|
||||||
|
// take a note which user requested which vcard
|
||||||
|
$vcard_request[$pl['from']] = $cmd[1];
|
||||||
|
// request the vcard
|
||||||
|
$conn->getVCard($cmd[1]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'presence':
|
case 'presence':
|
||||||
print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
|
print "Presence: {$pl['from']} [{$pl['show']}] {$pl['status']}\n";
|
||||||
@ -35,6 +44,30 @@ try {
|
|||||||
$conn->getRoster();
|
$conn->getRoster();
|
||||||
$conn->presence($status="Cheese!");
|
$conn->presence($status="Cheese!");
|
||||||
break;
|
break;
|
||||||
|
case 'vcard':
|
||||||
|
// check to see who requested this vcard
|
||||||
|
$deliver = array_keys($vcard_request, $pl['from']);
|
||||||
|
// work through the array to generate a message
|
||||||
|
print_r($pl);
|
||||||
|
$msg = '';
|
||||||
|
foreach($pl as $key => $item) {
|
||||||
|
$msg .= "$key: ";
|
||||||
|
if(is_array($item)) {
|
||||||
|
$msg .= "\n";
|
||||||
|
foreach($item as $subkey => $subitem) {
|
||||||
|
$msg .= " $subkey: $subitem\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$msg .= "$item\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// deliver the vcard msg to everyone that requested that vcard
|
||||||
|
foreach($deliver as $sendjid) {
|
||||||
|
// remove the note on requests as we send out the message
|
||||||
|
unset($vcard_request[$sendjid]);
|
||||||
|
$conn->message($sendjid, $msg, 'chat');
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user