?? manager.pm
字號:
@_[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 + -