⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manager.pm

📁 Punjab is a jabber XMLRPC/SOAP/REST client. It is a xmlrpc, soap, or REST server that allows for p
💻 PM
📖 第 1 页 / 共 2 页
字号:
		@_[SESSION, SENDER, KERNEL, HEAP, ARG0 .. ARG3];	my $attrs;	my $id    = 0;	if (defined($node)) {	    $attrs = $node->get_attrs();	}	if (defined($attrs->{'id'})) {	    $id = $attrs->{'id'};	} else {	    ++$heap->{'id'};	    $id = $heap->{'id'};	}	if ($event eq "return_contact") {	    $heap->{'start_contact'} = 1;	}	if ($heap->{'CONFIG'}->{debug}>0) {	    &debug("Manage Events ".$id."\n\n");	}	$heap->{'PENDING'}->{$id}->[0] = $sender;	$heap->{'PENDING'}->{$id}->[1] = $event;	$heap->{'PENDING'}->{$id}->[2] = $event_param;	$heap->{'PENDING'}->{$id}->[3] = $node;	$heap->{'PENDING'}->{$id}->[4] = $sid;	#$heap->{'start_roster'} = 1;	}sub manage_roster(){        my ($kernel, $heap, $node) = @_[KERNEL, HEAP, ARG0];	my ($name,$subscription,$ask);	my @items = $node->get_tag('query')->get_tag('item');	$heap->{'managed_roster'} = 1;	foreach my $item (@items)	{	    if (defined($item) and ref($item) eq "POE::Filter::XML::Node") {		my $attrs = $item->get_attrs();						my $children = $item->get_children();		my $catch = 0;		foreach my $group (@$children)		{		    eval {			$heap->{'ins_r'}->execute($attrs->{'jid'},						  $attrs->{'name'},						  $attrs->{'ask'},						  $attrs->{'subscription'},                                                  $group->data(),						  $item->to_str()						  );		    };		    $catch = 1;		}		$heap->{'ins_r'}->execute($attrs->{'jid'},					  $attrs->{'name'},					  $attrs->{'ask'},					  $attrs->{'subscription'},					  'General',					  $item->to_str()					  ) if $catch == 0;	       	    }	}			}sub get_managed_roster(){    my ($sender, $kernel, $heap, $event, $event_param) =	@_[SENDER, KERNEL, HEAP, ARG0, ARG1];        my $roster;        if (!$heap->{'select_roster'}->execute()) {	if ($heap->{'CONFIG'}->{debug}>0) {	    &debug("There was an error in retrieving the roster.\n\tQUERY: \n\t$DBI::errstr");	}	return "<error>There was an error in retrieving the roster.\n\tQUERY: \n\t$DBI::errstr</error>";    }    my $iter = 0;    while (my $ret = $heap->{'select_roster'}->fetchrow_hashref) {	    	$ret->{'iter'} = $iter;	push(@$roster,$ret);	$iter++;    }        if(defined $event) {	   	$kernel->post($sender, $event,$roster,$event_param);	        } else {	return $roster;    }}sub manage_message(){    my ($self, $sender, $kernel, $heap, $node) = 	@_[SESSION, SENDER, KERNEL, HEAP, ARG0];        my $to = $node->attr('to');    my $attrs = $node->get_attrs();        my ($id,$body,$subject,$thread,$error);        my $children = $node->get_children();    foreach my $child (@$children) {	my $data = $child->data();	$data =~ s/'/\\'/gi;	    	eval("\$".$child->name()." = '".$data."';");    }    $heap->{'insert_message'}->execute($attrs->{'to'},				       $attrs->{'from'},				       $attrs->{'type'},				       $attrs->{'id'},				       $body,				       $subject,				       $thread,				       $node->to_str()				       );    foreach my $event (@{$heap->{'manage_message_event'}}) {	$kernel->post( $event->{'sender'}, 		       $event->{'event'},		       $node,   		       $event->{'param'});    }}sub get_managed_message(){    my ($sender, $kernel, $heap, $to, $from, $id,$type, $event,$event_param) =	@_[SENDER, KERNEL, HEAP, ARG0..ARG5];        my ($ret_val,$where_set);    my $message;     my $m_sql = "SELECT *                   FROM message ";        #if (defined($id)) {	#if (defined($where_set)) {	    	 #   $m_sql .= "$where_set thread = '".$id."' ";	#} else {	#    $where_set = " AND ";	#    $m_sql .= " WHERE thread = '".$id."' ";	#}    #}    if (defined($to) and $to ne "") {	# this may change, I think it is crazy. :) 	if (defined($where_set)) {	    	    $m_sql .= "$where_set from_attr LIKE '".$to."%' ";	} else {	    $where_set = " AND ";	    $m_sql .= " WHERE from_attr LIKE '".$to."%' ";	}    }    if (defined($from) and $from ne "") {	if (defined($where_set)) {	    	    $m_sql .= "$where_set to_attr LIKE '".$from."%' ";	} else {	    $where_set = " AND ";	    $m_sql .= " WHERE to_attr LIKE '".$from."%' ";	}    }    if (defined($type) and $type ne "") {	if (defined($where_set)) {	    	    $m_sql .= "$where_set type = '".$type."' ";	} else {	    $where_set = " AND ";	    $m_sql .= " WHERE type = '".$type."' ";	}    }    $m_sql .= " ORDER BY time_stamp,message_id";         my $sth = $heap->{dbh}->prepare($m_sql);    # needs to support error    if (!$sth->execute()) {	if ($heap->{'CONFIG'}->{debug}>0) {	    &debug("There was an error in retrieving the message.\n\tQUERY: \n\t$DBI::errstr");	}	return "<error>There was an error in retrieving the message.\n\tQUERY: \n\t$DBI::errstr</error>";    }    my @m_ids;    while (my $ret = $sth->fetchrow_hashref) {	push(@$message,$ret);	push(@m_ids,$ret->{'message_id'});	    }    foreach my $message_id (@m_ids) {	$heap->{dbh}->do(			 "DELETE FROM message WHERE message_id = ".$message_id			 );    }        if(defined $event) {	$kernel->post($sender, $event, $message,$event_param);    } else {	return $message;    }}sub check_managed_message(){    my ($sender, $kernel, $heap, $to, $from, $event,$event_param) =	@_[SENDER, KERNEL, HEAP, ARG0..ARG5];        my ($ret_val,$where_set);    my $message;    my $m_sql = "SELECT *                   FROM message ";    # should we have a time_stamp?    #if (defined($heap->{'message_timestamp'})) {	#$m_sql .= " WHERE time_stamp > '".$heap->{'message_timestamp'}."'";    #}    $m_sql .= " ORDER BY time_stamp,message_id";    # maybe define some select params       my $sth = $heap->{dbh}->prepare($m_sql);        if (!$sth->execute()) {	if ($heap->{'CONFIG'}->{debug}>0) {	    &debug("There was an error in retrieving the message.\n\tQUERY: \n\t$DBI::errstr");	}	return "<error>There was an error in retrieving the message.\n\tQUERY: \n\t$DBI::errstr</error>";    }        while (my $ret = $sth->fetchrow_hashref) {	push(@$message,$ret);    }         my $timestamp =  strftime "%Y%m%d%H%M%S", localtime;    if (not $heap->{'message_timestamp'}) {	$heap->{'message_timestamp'} = $timestamp;    }        if (defined $event) {	$kernel->post($sender, $event, $message,$event_param);	    } else {	return $message;    }    }sub manage_presence(){    my ($self, $sender, $kernel, $heap, $node) = 	@_[SESSION, SENDER, KERNEL, HEAP, ARG0];        my ($show,$status,$priority,$error);    my $attrs = $node->get_attrs();        my $children = $node->get_children();    foreach my $child (@$children)    {	my $data = $child->data();	$data =~ s/'/\\'/gi;	    	eval("\$".$child->name()." = '".$data."';");    }    # trigger events based on type?        $heap->{dbh}->do(		     "DELETE FROM presence WHERE from_attr =".$heap->{dbh}->quote($attrs->{'from'})		     );	        if (defined($attrs->{'type'}) and $attrs->{'type'} eq "unsubscribed") {		#my $iqnode = POE::Filter::XML::Node->new('iq');	#$iqnode->attr('type', +IQ_SET);	#$iqnode->attr('id', $id);	#my $iqquery = $iqnode->insert_tag('query', +NS_JABBER_ROSTER);	#$iqquery	    }    $heap->{'insert_presence'}->execute($attrs->{'to'},					$attrs->{'from'},					$attrs->{'type'},					$show,					$status,					$priority,					$attrs->{'id'},					$node->to_str()					);    foreach my $event (@{$heap->{'manage_presence_event'}}) {	$kernel->post( $event->{'sender'}, 		       $event->{'event'},		       $node,   		       $event->{'param'});    }    }sub get_managed_presence(){	my ($sender, $kernel, $heap,$to, $from, $event,$event_param) =		@_[SENDER, KERNEL, HEAP, ARG0..ARG3];		my $where_set;		my $presence;	my $sql = "SELECT *                    FROM presence ";	if (defined($to) and $to ne "") {	    # this may change, I think it is crazy. :) 	    if (defined($where_set)) {	    		$sql .= "$where_set to_attr LIKE '".$to."%' ";	    } else {		$where_set = " AND ";		$sql .= " WHERE to_attr LIKE '".$to."%' ";	    }	}	if (defined($from) and $from ne "") {	    if (defined($where_set)) {	    		$sql .= "$where_set from_attr = '".$from."%' ";	    } else {		$where_set = " AND ";		$sql .= " WHERE from_attr LIKE '".$from."%' ";	    }	}	$sql .= " ORDER BY time_stamp ";	my $sth = $heap->{dbh}->prepare($sql) if defined $heap->{dbh};	if (defined $sth) {	    if (!$sth->execute()) {		if ($heap->{'CONFIG'}->{debug}>0) {		    &debug("There was an error in retrieving the presence.\n\tQUERY: \n\t$DBI::errstr");		}		return "<error>There was an error in retrieving the presence.\n\tQUERY: \n\t$DBI::errstr</error>";	    }	}	my $iter = 0;	while (my $ret = $sth->fetchrow_hashref) {	    $ret->{'iter'} = $iter;	    	    push(@$presence,$ret);	    	    $iter++;	}	if(defined $event)	{	    $kernel->post($sender, $event, $presence,$event_param);	} 	else 	{			    return $presence;	}}sub delete_presence(){    my ($self, $sender, $kernel, $heap, $jid) = 	@_[SESSION, SENDER, KERNEL, HEAP, ARG0];            $heap->{dbh}->do(		     "DELETE FROM presence WHERE from_attr =".$heap->{dbh}->quote($jid)		     );    return;    }sub manage_iq(){	my ($self, $sender, $kernel, $heap, $node) = 		@_[SESSION, SENDER, KERNEL, HEAP, ARG0];	my $id;	my $to = $node->attr('to');	my $attrs = $node->get_attrs();	if (defined($attrs->{'id'})) {	    $id = $attrs->{'id'};	} else {	    ++$heap->{'id'};	    $id = $heap->{'id'};	}	# need a better way to handle iqs		$heap->{'iq'}->{$id} = $node;}sub get_managed_iq(){	my ($sender, $kernel, $heap, $id, $event,$event_param) =		@_[SENDER, KERNEL, HEAP, ARG0, ARG1,ARG2];	my $ret_val;		if (defined($id) and defined($heap->{'iq'}->{$id})) {	    if ($heap->{'CONFIG'}->{debug}>0) {		&debug("\n\n\n\nGET MANAGED IQ $id\n\n\n");	    }	    # attach the id to the return hash.	    $ret_val->{$id} = delete $heap->{'iq'}->{$id};	} else {	    if ($heap->{'CONFIG'}->{debug}>0) {		&debug("\n\n\n\nGET MANAGED IQ ALL\n\n\n");	    }	    $ret_val = delete $heap->{'iq'};	}			if(defined $event)	{	    $kernel->post($sender, $event, $ret_val,$event_param);		} else {	    return $ret_val;	}	}1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -