<?php

  // include base peer class
  require_once 'model/om/BaseSnippetSnippetPeer.php';
  
  // include object class
  include_once 'model/SnippetSnippet.php';


/**
 * Skeleton subclass for performing query and update operations on the 'sn_snippet' table.
 *
 * 
 *
 * You should add additional methods to this class to meet the
 * application requirements.  This class will only be generated as
 * long as it does not already exist in the output directory.
 *
 * @package model
 */	
class SnippetSnippetPeer extends BaseSnippetSnippetPeer
{
  public static function getPager($page = 1, $max_per_page = 10, $sort = 'date')
  {
    $c = new Criteria();
    if($sort != 'date')
    {
      $c->addDescendingOrderByColumn(self::AVERAGE_VOTE);
    }
    $c->addDescendingOrderByColumn(self::CREATED_AT);
    $pager = new sfPropelPager('SnippetSnippet', $max_per_page);
    $pager->setCriteria($c);
    $pager->setPeerMethod('doSelectJoinSnippetUser');
    $pager->setPage($page);
    $pager->init();

    return $pager;
  }

  public static function retrieveByComment($comment_id)
  {
    $c = new Criteria();
    $c->add(SnippetCommentPeer::ID, $comment_id);
    $c->addJoin(self::ID, SnippetCommentPeer::SNIPPET_ID);

    return self::doSelectOne($c);
  }

  public static function getByUser($user, $max = 100, $sort = 'date')
  {
    $c = new Criteria();
    $c->setLimit($max);
    $c->addJoin(self::USER_ID, SnippetUserPeer::ID);
    $c->add(SnippetUserPeer::ID, $user->getId());
    if($sort != 'date')
    {
      $c->addDescendingOrderByColumn(self::AVERAGE_VOTE);
    }
    $c->addDescendingOrderByColumn(self::CREATED_AT);

    return self::doSelectJoinSnippetUser($c);
  }

  public static function getRecentByTag($tags, $max = 100, $sort = 'date')
  {
    if (!$tags)
    {
      return array();
    }
    $nb_tags = count($tags);

    $con = Propel::getConnection();
    $query = '
      SELECT *, '.self::CREATED_AT.' as creation_date
      FROM '.self::TABLE_NAME.'
      WHERE '.$nb_tags.' = 
      (
        SELECT COUNT(DISTINCT '.SnippetTagPeer::NAME.') FROM '.SnippetTagPeer::TABLE_NAME.' 
        WHERE '.SnippetTagPeer::NAME.' IN ('.implode(', ', array_fill(0, $nb_tags, '?')).')
        AND '.SnippetTagPeer::SNIPPET_ID.' = '.self::ID.'
      )
      ORDER BY ';
    if($sort == 'popularity')
    {
      $query .= self::AVERAGE_VOTE.' DESC, ';
    }
    $query .= 'creation_date DESC';

    $stmt = $con->prepareStatement($query);
    $stmt->setLimit($max);
    for ($i = 0; $i < $nb_tags; $i++)
    {
      $stmt->setString($i + 1, $tags[$i]);
    }
    $rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM);
    $snippets = array();
    while ($rs->next())
    {
      $snippet = new SnippetSnippet();
      $snippet->hydrate($rs, 1);
      $snippets[] = $snippet;
    }

    return $snippets;
  }
}

