MSV FM

dot.antimicrobial@66.96.161.157: ~ $
Path : /hermes/bosweb/b1705/prendex.com/includes/classes/
File Upload :
Current < : /hermes/bosweb/b1705/prendex.com/includes/classes/Doc.class

<?php
/* The Doc class represents an attachment/comment. This class provides a
 * convenient way to load and access both attachments and comments without the
 * caller needing to know about the underlying database schema.
 *
 * @author Craig Knudsen
 * @copyright Craig Knudsen, <cknudsen@cknudsen.com>, http://www.k5n.us/
 * @license http://www.gnu.org/licenses/gpl.html GNU GPL
 * @version $Id: Doc.class,v 1.7.2.2 2007/08/06 02:28:27 cknudsen Exp $
 * @package WebCalendar
 * @subpackage Doc
 */

/* A Document object.
 * This can represent an event attachment or comment. Currently, a Doc must be
 * associated with an event, but this may change down the road.
 * We could use this object to support category or user icons, for example.
 */
class Doc {
  /* The unique id
   * @var int
   * @access private
   */
  var $_blob_id;

  /* Associated event's id (if any)
   * @var int
   * @access private
   */
  var $_event_id;

  /* The user login of user who created this Doc
   * @var string
   * @access private
   */
  var $_login;

  /* Filename of the doc (not used for comments)
   * @var string
   * @access private
   */
  var $_name;

  /* The description of the doc
   * @var string
   * @access private
   */
  var $_description;

  /* The size of the doc (in bytes)
   * (not used for comments)
   * @var int
   * @access private
   */
  var $_size;

  /* The MIME type of the doc
   * @var string
   * @access private
   */
  var $_mime_type;

  /* Type of object (C=Comment, A=Attachment)
   * @var string
   * @access private
   */
  var $_type;

  /* Date last modified (in YYYYMMDD format)
   * @var int
   * @access private
   */
  var $_mod_date;

  /* Time last modified (in HHMMSS format)
   * @var int
   * @access private
   */
  var $_mod_time;

  /* Are attachments enabled? */
  function attachmentsEnabled () {
    global $ALLOW_ATTACH;

    return ( ! empty ( $ALLOW_ATTACH ) && $ALLOW_ATTACH == 'Y' );
  }

  /* Are comments enabled? */
  function commentsEnabled () {
    global $ALLOW_COMMENTS;

    return ( ! empty ( $ALLOW_COMMENTS ) && $ALLOW_COMMENTS == 'Y' );
  }

  /* Provide a list of comma-separated column names
   * for use in a SQL query to the webcal_blob table.
   */
  function getColumnList () {
    return 'cal_blob_id, cal_id, cal_login, cal_name, cal_description, '
     . 'cal_size, cal_mime_type, cal_type, cal_mod_date, cal_mod_time';
  }

  /* Create an SQL query to load either attachment or comment meta data
   * for the specified event id.
   *
   * @param int    $event_id  The event id
   * @param string $type      "A" = attachment, "C" = comment
   *
   * @return string  The SQL text
   *
   * @access public
   */
  function getSQL ( $event_id, $type = 'A' ) {
    return 'SELECT ' . Doc::getColumnList ()
     . ' FROM webcal_blob WHERE cal_id = '
     . $event_id . ' AND cal_type = \'' . $type
     . '\' ORDER BY cal_mod_date DESC, cal_mod_time DESC';
  }

  /* Generate the SQL to load a single doc specified by its unique ID.
   *
   * @param int blid  Unique doc id
   *
   * @return string  The SQL to load the Doc
   */
  function getSQLForDocId ( $blid ) {
    return 'SELECT ' . Doc::getColumnList ()
     . ' FROM webcal_blob WHERE cal_blob_id = ' . $blid;
  }

  /* Creates a new Doc object.
   * Typical usage (error-checking not shown here): <blockquote><pre>
   *   $res = dbi_execute ( Doc::getSQLForDocId ( $doc_id ) );
   *   $row = dbi_fetch_row ( $res );
   *   $doc =& new Doc ( $row );
   *   dbi_free_result ( $res );
   * </pre></blockquote>
   *
   * @param array $row  An array returned from dbi_fetch_row using
   *      the SQL from Doc->getSQL.
   *      The elements of the array should be:  <ul>
   *      <li> Unique BLOB id  </li>
   *      <li> Event id  </li>
   *      <li> Login of owner  </li>
   *      <li> Name of object  </li>
   *      <li> Description  </li>
   *      <li> Size of object (attachments)  </li>
   *      <li> MIME type of object  </li>
   *      <li> Type of objecgt ('A' or 'C')  </li>
   *      <li> Modification date (YYYYMMDD)  </li>
   *      <li> Modification time (YYYYMMDD)  </li>
   *      </ul>
   *
   * @return Doc The new Doc object
   *
   * @access public
   */
  function Doc ( $row ) {
    if ( ! is_array ( $row ) )
      die_miserable_death ( 'Doc constructor called without an array.' );

    $i = 0;
    $this->_blob_id = $row[$i++];
    $this->_event_id = $row[$i++];
    $this->_login = $row[$i++];
    $this->_name = $row[$i++];
    $this->_description = $row[$i++];
    $this->_size = $row[$i++];
    $this->_mime_type = $row[$i++];
    $this->_type = $row[$i++];
    $this->_mod_date = $row[$i++];
    $this->_mod_time = $row[$i++];
  }

  /* Gets the Doc's unique identifier
   *
   * @return int The Doc's unique identifier
   *
   * @access public
   */
  function getId () {
    return $this->_blob_id;
  }

  /* Gets the Doc's event id
   *
   * @return int The Doc's event id
   *
   * @access public
   */
  function getEventId () {
    return $this->_event_id;
  }

  /* Gets the Doc creator's user login
   *
   * @return string The Doc creator's user login
   *
   * @access public
   */
  function getLogin () {
    return $this->_login;
  }

  /* Gets the Doc's name
   *
   * @return string The Doc's name
   *
   * @access public
   */
  function getName () {
    return $this->_name;
  }

  /* Gets the Doc's description
   *
   * @return string The Doc's description
   *
   * @access public
   */
  function getDescription () {
    return $this->_description;
  }

  /* Gets the size of the object
   *
   * @return int The size (in bytes)
   *
   * @access public
   */
  function getSize () {
    return $this->_size;
  }

  /* Gets the Doc's MIME type
   *
   * @return string The Doc's MIME type
   *
   * @access public
   */
  function getMimeType () {
    return $this->_mime_type;
  }

  /* Gets the Doc's type ('A' or 'C')
   *
   * @return string The Doc's type
   *
   * @access public
   */
  function getType () {
    return $this->_type;
  }

  /* Gets the modification date
   *
   * @return int The modification date (in YYYYMMDD format)
   *
   * @access public
   */
  function getModDate () {
    return $this->_mod_date;
  }

  /* Gets the modification time
   *
   * @return int The modification time (in YYYYMMDD format)
   *
   * @access public
   */
  function getModTime () {
    return $this->_mod_time;
  }

  /* Get a summary of this object
   *
   * @return string  A summary of the object
   */
  function getSummary () {
    $ret = '<a href="doc.php?blid=' . $this->_blob_id . '">'
     . htmlspecialchars ( $this->_description ) . '</a>' . ' ( '
     . htmlspecialchars ( $this->_name ) . ', ';
    if ( $this->_size < 1024 )
      $ret .= $this->_size . ' ' . translate ( 'bytes' );
    else
    if ( $this->_size < 1024 * 1024 )
      $ret .= sprintf ( " %.1f", ( $this->_size / 1024 ) ) . translate ( 'kb' );
    else
      $ret .= sprintf ( " %.1f", ( $this->_size / 1048576 ) ) . translate ( 'Mb' );

    return $ret . ', ' . date_to_str ( $this->_mod_date, '', false, true ) . ' )';
  }

  /* Get the binary data of the document.
   * This is NOT cached and is only loaded when this function is called.
   * Repeated calls to this function will make repeated calls to the database.
   *
   * @return mixed  binary data of the blob
   */
  function getData () {
    return dbi_get_blob ( 'webcal_blob', 'cal_blob', 'cal_blob_id = '
       . $this->_blob_id );
  }
}

?>