Net_NNTP
[ class tree: Net_NNTP ] [ index: Net_NNTP ] [ all elements ]

Source for file Client.php

Documentation is available at Client.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
  3. // +-----------------------------------------------------------------------+
  4. // |                                                                       |
  5. // |                  http://www.heino.gehlsen.dk/software/license         |
  6. // |                                                                       |
  7. // +-----------------------------------------------------------------------+
  8. // |                                                                       |
  9. // | This work (including software, documents, or other related items) is  |
  10. // | being provided by the copyright holders under the following license.  |
  11. // | By obtaining, using and/or copying this work, you (the licensee)      |
  12. // | agree that you have read, understood, and will comply with the        |
  13. // | following terms and conditions:                                       |
  14. // |                                                                       |
  15. // | Permission to use, copy, modify, and distribute this software and     |
  16. // | its documentation, with or without modification, for any purpose and  |
  17. // | without fee or royalty is hereby granted, provided that you include   |
  18. // | the following on ALL copies of the software and documentation or      |
  19. // | portions thereof, including modifications, that you make:             |
  20. // |                                                                       |
  21. // | 1. The full text of this NOTICE in a location viewable to users of    |
  22. // |    the redistributed or derivative work.                              |
  23. // |                                                                       |
  24. // | 2. Any pre-existing intellectual property disclaimers, notices, or    |
  25. // |    terms and conditions. If none exist, a short notice of the         |
  26. // |    following form (hypertext is preferred, text is permitted) should  |
  27. // |    be used within the body of any redistributed or derivative code:   |
  28. // |     http://www.heino.gehlsen.dk/software/license"                     |
  29. // |                                                                       |
  30. // | 3. Notice of any changes or modifications to the files, including     |
  31. // |    the date changes were made. (We recommend you provide URIs to      |
  32. // |    the location from which the code is derived.)                      |
  33. // |                                                                       |
  34. // | THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT    |
  35. // | HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,    |
  36. // | INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR        |
  37. // | FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE    |
  38. // | OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,           |
  39. // | COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.                               |
  40. // |                                                                       |
  41. // | COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,        |
  42. // | SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE        |
  43. // | SOFTWARE OR DOCUMENTATION.                                            |
  44. // |                                                                       |
  45. // | The name and trademarks of copyright holders may NOT be used in       |
  46. // | advertising or publicity pertaining to the software without specific, |
  47. // | written prior permission. Title to copyright in this software and any |
  48. // | associated documentation will at all times remain with copyright      |
  49. // | holders.                                                              |
  50. // |                                                                       |
  51. // +-----------------------------------------------------------------------+
  52. // |                                                                       |
  53. // | except for the references to the copyright holder, which has either   |
  54. // | been changes or removed.                                              |
  55. // |                                                                       |
  56. // +-----------------------------------------------------------------------+
  57. // $Id: Client.php,v 1.4.2.7 2005/05/13 20:41:27 heino Exp $
  58.  
  59. require_once 'Net/NNTP/Protocol/Client.php';
  60.  
  61.  
  62. // {{{ constants
  63.  
  64. /* NNTP Authentication modes */
  65. define('NET_NNTP_CLIENT_AUTH_ORIGINAL''original');
  66. define('NET_NNTP_CLIENT_AUTH_SIMPLE',   'simple');
  67. define('NET_NNTP_CLIENT_AUTH_GENERIC',  'generic');
  68.  
  69. // }}}
  70. // {{{ Net_NNTP_Client
  71.  
  72. /**
  73.  * Implementation of the client side of NNTP (Network News Transfer Protocol)
  74.  *
  75.  * The Net_NNTP_Client class is a frontend class to the Net_NNTP_Protocol_Client class.
  76.  *
  77.  * @category   Net
  78.  * @package    Net_NNTP
  79.  * @author     Heino H. Gehlsen <heino@gehlsen.dk>
  80.  * @version    $Id: Client.php,v 1.4.2.7 2005/05/13 20:41:27 heino Exp $
  81.  * @access     public
  82.  * @see        Net_NNTP_Protocol_Client
  83.  * @since      Class available since Release 0.11.0
  84.  */
  85. {
  86.     // {{{ properties
  87.  
  88.     /**
  89.      * Used for storing information about the currently selected group
  90.      *
  91.      * @var array 
  92.      * @access private
  93.      * @since 0.3
  94.      */
  95.     var $_currentGroup = null;
  96.  
  97.     // }}}
  98.     // {{{ constructor
  99.  
  100.     /**
  101.      * Constructor
  102.      *
  103.      * @access public
  104.      */
  105.     function Net_NNTP_Client()
  106.     {
  107.         parent::Net_NNTP_Protocol_Client();
  108.     }
  109.  
  110.     // }}}
  111.     // {{{ connect()
  112.  
  113.     /**
  114.      * Connect to the NNTP-server.
  115.      *
  116.      * @param optional string $host The adress of the NNTP-server to connect to.
  117.      * @param optional int $port The port to connect to.
  118.      *
  119.      * @return mixed (bool) true on success or (object) pear_error on failure
  120.      * @access public
  121.      * @see Net_NNTP_Client::quit()
  122.      * @see Net_NNTP_Client::authenticate()
  123.      */
  124.     function connect($host = NET_NNTP_PROTOCOL_CLIENT_DEFAULT_HOST,
  125.                      $port = NET_NNTP_PROTOCOL_CLIENT_DEFAULT_PORT)
  126.     {
  127.         return parent::connect($host$port);
  128.     }
  129.  
  130.     // }}}
  131.     // {{{ quit()
  132.  
  133.     /**
  134.      * Close connection to the newsserver
  135.      *
  136.      * @access public
  137.      * @see Net_NNTP_Client::connect()
  138.      */
  139.     function quit()
  140.     {
  141.         return $this->cmdQuit();
  142.     }
  143.  
  144.     // }}}
  145.     // {{{ authenticate()
  146.  
  147.     /**
  148.      * Authenticate
  149.      * 
  150.      * Auth process (not yet standarized but used any way)
  151.      * http://www.mibsoftware.com/userkt/nntpext/index.html
  152.      *
  153.      * @param string $user The username
  154.      * @param optional string $pass The password
  155.      * @param optional string $mode The authentication mode (original, simple, generic).
  156.      *
  157.      * @return mixed (bool) true on success or (object) pear_error on failure
  158.      * @access public
  159.      * @see Net_NNTP_Client::connect()
  160.      */
  161.     function authenticate($user$pass$mode = NET_NNTP_CLIENT_AUTH_ORIGINAL)
  162.     {
  163.         // Username is a must...
  164.         if ($user == null{
  165.             return PEAR::throwError('No username supplied'null);
  166.         }
  167.  
  168.         // Use selected authentication method
  169.         switch ($mode{
  170.             case NET_NNTP_CLIENT_AUTH_ORIGINAL:
  171.                 return $this->cmdAuthinfo($user$pass);
  172.                 break;
  173.             case NET_NNTP_CLIENT_AUTH_SIMPLE:
  174.                 return $this->cmdAuthinfoSimple($user$pass);
  175.                 break;
  176.             case NET_NNTP_CLIENT_AUTH_GENERIC:
  177.                 return $this->cmdAuthinfoGeneric($user$pass);
  178.                 break;
  179.             default:
  180.                 return PEAR::throwError("The auth mode: '$mode' is unknown"null);
  181.         }
  182.     }
  183.  
  184.     // }}}
  185.     // {{{ isConnected()
  186.  
  187.     /**
  188.      * Test whether a connection is currently open.
  189.      *
  190.      * @return bool true or false
  191.      * @access public
  192.      * @see Net_NNTP_Client::connect()
  193.      * @see Net_NNTP_Client::quit()
  194.      */
  195.     function isConnected()
  196.     {
  197.         return parent::isConnected();
  198.     }
  199.  
  200.     // }}}
  201.     // {{{ selectGroup()
  202.  
  203.     /**
  204.      * Selects a newsgroup
  205.      *
  206.      * @param string $newsgroup Newsgroup name
  207.      *
  208.      * @return mixed (array) Info about the newsgroup on success or (object) pear_error on failure
  209.      * @access public
  210.      * @see Net_NNTP_Client::group()
  211.      * @see Net_NNTP_Client::first()
  212.      * @see Net_NNTP_Client::last()
  213.      * @see Net_NNTP_Client::count()
  214.      * @see Net_NNTP_Client::getGroups()
  215.      */
  216.     function selectGroup($newsgroup)
  217.     {
  218.         $response_arr $this->cmdGroup($newsgroup);
  219.         if (PEAR::isError($response_arr)) {
  220.             return $response_arr;
  221.         }
  222.  
  223.         // Store group info in the object
  224.         $this->_currentGroup $response_arr;
  225.  
  226.         return $response_arr;
  227.     }
  228.  
  229.     // }}}
  230.     // {{{ getGroups()
  231.  
  232.     /**
  233.      * Fetches a list of all avaible newsgroups
  234.      *
  235.      * @return mixed (array) nested array with informations about existing newsgroups on success or (object) pear_error on failure
  236.      * @access public
  237.      * @see Net_NNTP_Client::selectGroup()
  238.      * @see Net_NNTP_Client::getDescriptions()
  239.      */
  240.     function getGroups()
  241.     {
  242.         // Get groups
  243.         $groups $this->cmdList();
  244.         if (PEAR::isError($groups)) {
  245.             return $groups;
  246.         }
  247.  
  248.         return $groups;
  249.     }
  250.  
  251.     // }}}
  252.     // {{{ getDescriptions()
  253.  
  254.     /**
  255.      * Fetches a list of all avaible newsgroup descriptions.
  256.      *
  257.      * @return mixed (array) nested array with description of existing newsgroups on success or (object) pear_error on failure
  258.      * @access public
  259.      * @see Net_NNTP_Client::getGroups()
  260.      */
  261.     function getDescriptions()
  262.     {
  263.         // Get group descriptions
  264.         $descriptions $this->cmdListNewsgroups();
  265.         if (PEAR::isError($descriptions)) {
  266.             return $descriptions;
  267.         }
  268.     
  269.         return $descriptions;
  270.     }
  271.  
  272.     // }}}
  273.     // {{{ getOverview()
  274.  
  275.     /**
  276.      * Fetch message header fields from message number $first to $last
  277.      *
  278.      * The format of the returned array is:
  279.      * $messages[message_id][header_name]
  280.      *
  281.      * @param integer $first first article to fetch
  282.      * @param integer $last  last article to fetch
  283.      *
  284.      * @return mixed (array) nested array of message and their headers on success or (object) pear_error on failure
  285.      * @access public
  286.      * @see Net_NNTP_Client::getOverviewFormat()
  287.      * @see Net_NNTP_Client::getReferencesOverview()
  288.      */
  289.     function getOverview($first$last)
  290.     {
  291.         $overview $this->cmdXOver($first.'-'.$last);
  292.         if (PEAR::isError($overview)) {
  293.             return $overview;
  294.         }
  295.     
  296.         return $overview;
  297.     }
  298.  
  299.     // }}}
  300.     // {{{ getOverviewFmt()
  301.  
  302.     /**
  303.      * Returns a list of avaible headers which are send from NNTP-server to the client for every news message
  304.      *
  305.      * @return mixed (array) header names on success or (object) pear_error on failure
  306.      * @access public
  307.      * @see Net_NNTP_Client::getOverview()
  308.      */
  309.     function getOverviewFormat()
  310.     {
  311.         return $this->cmdListOverviewFmt();
  312.     }
  313.  
  314.     // }}}
  315.     // {{{ getReferencesOverview()
  316.  
  317.     /**
  318.      * Fetch a list of each message's reference header.
  319.      *
  320.      * @param integer $first first article to fetch
  321.      * @param integer $last  last article to fetch
  322.      *
  323.      * @return mixed (array) nested array of references on success or (object) pear_error on failure
  324.      * @access public
  325.      * @see Net_NNTP_Client::getOverview()
  326.      */
  327.     function getReferencesOverview($first$last)
  328.     {
  329.         $overview $this->cmdXROver($first.'-'.$last);
  330.         if (PEAR::isError($overview)) {
  331.             return $overview;
  332.         }
  333.     
  334.         return $overview;
  335.     }
  336.  
  337.     // }}}
  338.     // {{{ post()
  339.  
  340.     /**
  341.      * Post an article to a number of newsgroups.
  342.      *
  343.      * (Among the aditional headers you might think of adding could be:
  344.      * "NNTP-Posting-Host: <ip-of-author>", which should contain the IP-address
  345.      * of the author of the post, so the message can be traced back to him.
  346.      * Or "Organization: <org>" which contain the name of the organization
  347.      * the post originates from)
  348.      *
  349.      * @param string $newsgroups The newsgroup to post to.
  350.      * @param string $subject The subject of the post.
  351.      * @param string $body The body of the post itself.
  352.      * @param string $from Name + email-adress of sender.
  353.      * @param optional string $aditional Aditional headers to send.
  354.      *
  355.      * @return mixed (string) server response on success or (object) pear_error on failure
  356.      * @access public
  357.      */
  358.     function post($newsgroups$subject$body$from$aditional = null)
  359.     {
  360.         return $this->cmdPost($newsgroups$subject$body$from$aditional);
  361.     }
  362.  
  363.     // }}}
  364.     // {{{ getArticle()
  365.  
  366.     /**
  367.      * Get an article
  368.      *
  369.      * Experimental
  370.      *
  371.      * The v0.2 version of the this function (which returned the article as a string) has been renamed to getArticleRaw().
  372.      *
  373.      * @param mixed $article Either the message-id or the message-number on the server of the article to fetch.
  374.      *
  375.      * @return mixed (object) message object on success or (object) pear_error on failure
  376.      * @access public
  377.      * @see Net_NNTP_Client::getArticleRaw()
  378.      * @see Net_NNTP_Client::getHeader()
  379.      * @see Net_NNTP_Client::getBody()
  380.      */
  381.     function getArticle($article$class$implode)
  382.     {
  383.         $message $this->getArticleRaw($article$implode);
  384.         if (PEAR::isError($message)) {
  385.             return $data;
  386.         }
  387.  
  388.         if (!is_string($class)) {
  389.             return PEAR::throwError('UPS...');
  390.         }
  391.  
  392.         if (!class_exists($class)) {
  393.             return PEAR::throwError("Class '$class' does not exist!");
  394.     }
  395.  
  396.     $M = new $class($message);
  397.  
  398.         return $M;
  399.     }
  400.  
  401.     // }}}
  402.     // {{{ getArticleRaw()
  403.  
  404.     /**
  405.      * Get a article (raw data)
  406.      *
  407.      * @param mixed $article Either the message-id or the message-number on the server of the article to fetch.
  408.      * @param optional bool  $implode When true the result array is imploded to a string, defaults to false.
  409.      *
  410.      * @return mixed (array/string) The article on success or (object) pear_error on failure
  411.      * @access public
  412.      * @see Net_NNTP_Client::getArticle()
  413.      * @see Net_NNTP_Client::getHeaderRaw()
  414.      * @see Net_NNTP_Client::getBodyRaw()
  415.      */
  416.     function getArticleRaw($article$implode = false)
  417.     {
  418.         $data $this->cmdArticle($article);
  419.         if (PEAR::isError($data)) {
  420.             return $data;
  421.         }
  422.  
  423.         if ($implode == true{
  424.             $data implode("\r\n"$data);
  425.         }
  426.  
  427.         return $data;
  428.     }
  429.  
  430.     // }}}
  431.     // {{{ getHeader()
  432.  
  433.     /**
  434.      * Get the header of an article
  435.      *
  436.      * Experimental
  437.      *
  438.      * @param mixed $article Either the (string) message-id or the (int) message-number on the server of the article to fetch.
  439.      *
  440.      * @return mixed (object) header object on success or (object) pear_error on failure
  441.      * @access public
  442.      * @see Net_NNTP_Client::getHeaderRaw()
  443.      * @see Net_NNTP_Client::getArticle()
  444.      * @see Net_NNTP_Client::getBody()
  445.      */
  446.     function getHeader($article$class$implode)
  447.     {
  448.         $header $this->getHeaderRaw($article$implode);
  449.         if (PEAR::isError($header)) {
  450.             return $header;
  451.         }
  452.  
  453.         if (!is_string($class)) {
  454.             return PEAR::throwError('UPS...');
  455.         }
  456.  
  457.         if (!class_exists($class)) {
  458.             return PEAR::throwError("Class '$class' does not exist!");
  459.     }
  460.  
  461.     $H = new $class($header);
  462.  
  463.         return $H;
  464.     }
  465.  
  466.     // }}}
  467.     // {{{ getHeaderRaw()
  468.  
  469.     /**
  470.      * Get the header of an article (raw data)
  471.      *
  472.      * @param mixed $article Either the (string) message-id or the (int) message-number on the server of the article to fetch.
  473.      * @param optional bool $implode When true the result array is imploded to a string, defaults to false.
  474.      *
  475.      * @return mixed (array/string) header fields on success or (object) pear_error on failure
  476.      * @access public
  477.      * @see Net_NNTP_Client::getHeader()
  478.      * @see Net_NNTP_Client::getArticleRaw()
  479.      * @see Net_NNTP_Client::getBodyRaw()
  480.      */
  481.     function getHeaderRaw($article$implode = false)
  482.     {
  483.         $data $this->cmdHead($article);
  484.         if (PEAR::isError($data)) {
  485.             return $data;
  486.         }
  487.  
  488.         if ($implode == true{
  489.             $data implode("\r\n"$data);
  490.         }
  491.  
  492.         return $data;
  493.     }
  494.  
  495.     // }}}
  496.     // {{{ getBody()
  497.  
  498.     /**
  499.      * Get the body of an article
  500.      *
  501.      * Experimental
  502.      *
  503.      * @param mixed $article Either the (string) message-id or the (int) message-number on the server of the article to fetch.
  504.      *
  505.      * @return mixed (object) body object on success or (object) pear_error on failure
  506.      * @access public
  507.      * @see Net_NNTP_Client::getHeader()
  508.      * @see Net_NNTP_Client::getArticle()
  509.      * @see Net_NNTP_Client::getBodyRaw()
  510.      */
  511.     function getBody($article$class$implode)
  512.     {
  513.         $body $this->getBodyRaw($article$implode);
  514.         if (PEAR::isError($body)) {
  515.             return $body;
  516.         }
  517.  
  518.         if (!is_string($class)) {
  519.             return PEAR::throwError('UPS...');
  520.         }
  521.  
  522.         if (!class_exists($class)) {
  523.             return PEAR::throwError("Class '$class' does not exist!");
  524.     }
  525.  
  526.     $B = new $class($body);
  527.  
  528.         return $B;
  529.     }
  530.  
  531.     // }}}
  532.     // {{{ getBodyRaw()
  533.  
  534.     /**
  535.      * Get the body of an article (raw data)
  536.      *
  537.      * @param mixed $article Either the message-id or the message-number on the server of the article to fetch.
  538.      * @param optional bool $implode When true the result array is imploded to a string, defaults to false.
  539.      *
  540.      * @return mixed (array/string) body on success or (object) pear_error on failure
  541.      * @access public
  542.      * @see Net_NNTP_Client::getBody()
  543.      * @see Net_NNTP_Client::getHeaderRaw()
  544.      * @see Net_NNTP_Client::getArticleRaw()
  545.      */
  546.     function getBodyRaw($article$implode = false)
  547.     {
  548.         $data $this->cmdBody($article);
  549.         if (PEAR::isError($data)) {
  550.             return $data;
  551.         }
  552.     
  553.         if ($implode == true{
  554.             $data implode("\r\n"$data);
  555.         }
  556.     
  557.         return $data;
  558.     }
  559.  
  560.     // }}}
  561.     // {{{ getGroupArticles()
  562.  
  563.     /**
  564.      * Experimental
  565.      *
  566.      * @access public
  567.      * @since 0.3
  568.      */
  569.     function getGroupArticles($newsgroup)
  570.     {
  571.         return $this->cmdListgroup($newsgroup);
  572.     }
  573.  
  574.     // }}}
  575.     // {{{ getNewGroups()
  576.  
  577.     /**
  578.      * Experimental
  579.      *
  580.      * @access public
  581.      * @since 0.3
  582.      */
  583.     function getNewGroups($time$distributions = null)
  584.     {
  585.         switch (gettype($time)) {
  586.             case 'integer':
  587.                 break;
  588.             case 'string':
  589.                 $time = (int) strtotime($time);
  590.                 break;
  591.             default:
  592.                 return PEAR::throwError('UPS...');
  593.         }
  594.  
  595.         return $this->cmdNewgroups($time$distributions);
  596.     }
  597.  
  598.     // }}}
  599.     // {{{ getNewNews()
  600.  
  601.     /**
  602.      * Experimental
  603.      *
  604.      * @access public
  605.      * @since 0.3
  606.      */
  607.     function getNewNews($time$newsgroups '*')
  608.     {
  609.         switch (gettype($time)) {
  610.             case 'integer':
  611.                 break;
  612.             case 'string':
  613.                 $time = (int) strtotime($time);
  614.                 break;
  615.             default:
  616.                 return PEAR::throwError('UPS...');
  617.         }
  618.  
  619.         return $this->cmdNewnews($time$newsgroups);
  620.     }
  621.  
  622.     // }}}
  623.     // {{{ getDate()
  624.  
  625.     /**
  626.      * Get the NNTP-server's internal date
  627.      *
  628.      * Get the date from the newsserver format of returned date:
  629.      *
  630.      * @param optional int $format
  631.      *   - 0: $date - timestamp
  632.      *   - 1: $date['y'] - year
  633.      *        $date['m'] - month
  634.      *        $date['d'] - day
  635.      *
  636.      * @return mixed (mixed) date on success or (object) pear_error on failure
  637.      * @access public
  638.      * @since 0.3
  639.      */
  640.     function getDate($format = 1)
  641.     {
  642.         $date $this->cmdDate();
  643.         if (PEAR::isError($date)) {
  644.             return $date;
  645.         }
  646.  
  647.         switch ($format{
  648.             case 1:
  649.                 return array('y' => substr($date04)'m' => substr($date42)'d' => substr($date62));
  650.                 break;
  651.  
  652.             case 0:
  653.             default:
  654.                 return $date;
  655.                 break;
  656.         }
  657.     }
  658.  
  659.     // }}}
  660.     // {{{ count()
  661.  
  662.     /**
  663.      * Number of articles in currently selected group
  664.      *
  665.      * @return integer number of article in group
  666.      * @access public
  667.      * @since 0.3
  668.      * @see Net_NNTP_Client::group()
  669.      * @see Net_NNTP_Client::first()
  670.      * @see Net_NNTP_Client::last()
  671.      * @see Net_NNTP_Client::selectGroup()
  672.      */
  673.     function count()
  674.     {
  675.         return $this->_currentGroup['count'];
  676.     }
  677.  
  678.     // }}}
  679.     // {{{ last()
  680.  
  681.     /**
  682.      * Maximum article number in currently selected group
  683.      *
  684.      * @return integer number of last article
  685.      * @access public
  686.      * @since 0.3
  687.      * @see Net_NNTP_Client::first()
  688.      * @see Net_NNTP_Client::group()
  689.      * @see Net_NNTP_Client::count()
  690.      * @see Net_NNTP_Client::selectGroup()
  691.      */
  692.     function last()
  693.     {
  694.         return $this->_currentGroup['last'];
  695.     }
  696.  
  697.     // }}}
  698.     // {{{ first()
  699.  
  700.     /**
  701.      * Minimum article number in currently selected group
  702.      *
  703.      * @return integer number of first article
  704.      * @access public
  705.      * @since 0.3
  706.      * @see Net_NNTP_Client::last()
  707.      * @see Net_NNTP_Client::group()
  708.      * @see Net_NNTP_Client::count()
  709.      * @see Net_NNTP_Client::selectGroup()
  710.      */
  711.     function first()
  712.     {
  713.         return $this->_currentGroup['first'];
  714.     }
  715.  
  716.     // }}}
  717.     // {{{ group()
  718.  
  719.     /**
  720.      * Currently selected group
  721.      *
  722.      * @return string group name
  723.      * @access public
  724.      * @since 0.3
  725.      * @see Net_NNTP_Client::first()
  726.      * @see Net_NNTP_Client::last()
  727.      * @see Net_NNTP_Client::count()
  728.      * @see Net_NNTP_Client::selectGroup()
  729.      */
  730.     function group()
  731.     {
  732.         return $this->_currentGroup['group'];
  733.     }
  734.  
  735.     // }}}
  736. }
  737.  
  738. // }}}
  739.  
  740. ?>

Documentation generated on Mon, 11 Mar 2019 14:20:53 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.