root/trunk/lib/model/QuestionPeer.php

Revision 88, 6.3 kB (checked in by fabien, 2 years ago)

updated to symfony 1.0 beta 1

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1 <?php
2
3   // include base peer class
4   require_once 'lib/model/om/BaseQuestionPeer.php';
5  
6   // include object class
7   include_once 'lib/model/Question.php';
8
9
10 /**
11  * Skeleton subclass for performing query and update operations on the 'ask_question' table.
12  *
13  *
14  *
15  * You should add additional methods to this class to meet the
16  * application requirements.  This class will only be generated as
17  * long as it does not already exist in the output directory.
18  *
19  * @package model
20  */   
21 class QuestionPeer extends BaseQuestionPeer
22 {
23   public static function getQuestionFromTitle($title)
24   {
25     $c = new Criteria();
26     $c->add(self::STRIPPED_TITLE, $title);
27
28     $questions = self::doSelectJoinUser($c);
29
30     return $questions ? $questions[0] : null;
31   }
32
33   public static function getPopularPager($page)
34   {
35     $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));
36     $c = new Criteria();
37     $c->addDescendingOrderByColumn(self::INTERESTED_USERS);
38     $c->addDescendingOrderByColumn(self::CREATED_AT);
39     $c = self::addPermanentTagToCriteria($c);
40     $pager->setCriteria($c);
41     $pager->setPage($page);
42     $pager->setPeerMethod('doSelectJoinUser');
43     $pager->init();
44
45     return $pager;
46   }
47  
48   public static function getFrontPagePager($page)
49   {
50     $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));
51     $c = new Criteria();
52     $c->addAsColumn('count', "count(".InterestPeer::USER_ID.")");
53     $c->addJoin(InterestPeer::QUESTION_ID, QuestionPeer::ID);
54     $c->addGroupByColumn(InterestPeer::QUESTION_ID);
55     $c->addDescendingOrderByColumn('count');
56     $c->addDescendingOrderByColumn(self::CREATED_AT);
57     $c->add(InterestPeer::CREATED_AT, time()-86400*10, Criteria::GREATER_THAN);
58     $c = self::addPermanentTagToCriteria($c);
59     $pager->setCriteria($c);
60     $pager->setPage($page);
61     $pager->setPeerMethod('doSelectJoinUser');
62     $pager->init();
63
64     return $pager;
65   }
66
67   public static function getPopular($max = 10)
68   {
69     $c = new Criteria();
70     $c->addDescendingOrderByColumn(self::INTERESTED_USERS);
71     $c = self::addPermanentTagToCriteria($c);
72     $c->setLimit($max);
73
74     return self::doSelectJoinUser($c);
75   }
76
77   public static function getRecentPager($page)
78   {
79     $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));
80     $c = new Criteria();
81     $c->addDescendingOrderByColumn(self::CREATED_AT);
82     $c = self::addPermanentTagToCriteria($c);
83     $pager->setCriteria($c);
84     $pager->setPage($page);
85     $pager->setPeerMethod('doSelectJoinUser');
86     $pager->init();
87
88     return $pager;
89   }
90
91   public function getRecent($max = 10)
92   {
93     $c = new Criteria();
94     $c->addDescendingOrderByColumn(self::CREATED_AT);
95     $c = self::addPermanentTagToCriteria($c);
96     $c->setLimit($max);
97
98     return self::doSelectJoinUser($c);
99   }
100
101   public static function getPopularByTag($tag, $page)
102   {
103     $c = new Criteria();
104     $c->addDescendingOrderByColumn(QuestionPeer::INTERESTED_USERS);
105
106     // tags
107     $c->addJoin(self::ID, QuestionTagPeer::QUESTION_ID, Criteria::LEFT_JOIN);
108     $criterion = $c->getNewCriterion(QuestionTagPeer::NORMALIZED_TAG, $tag);
109     if (sfConfig::get('app_permanent_tag'))
110     {
111       $criterion->addAnd($c->getNewCriterion(QuestionTagPeer::NORMALIZED_TAG, sfConfig::get('app_permanent_tag')));
112     }
113     $c->add($criterion);
114     $c->setDistinct();
115
116     $pager = new sfPropelPager('Question', 20);
117     $pager->setCriteria($c);
118     $pager->setPage($page);
119     $pager->init();
120
121     return $pager;
122   }
123
124   public static function search($phrase, $exact = false, $offset = 0, $max = 10)
125   {
126     $words    = array_values(myTools::stemPhrase($phrase));
127     $nb_words = count($words);
128
129     if (!$words)
130     {
131       return array();
132     }
133
134     $con = Propel::getConnection();
135     $query = '
136       SELECT DISTINCT %s, COUNT(*) AS nb, SUM(%s) AS total_weight
137       FROM %s
138     ';
139
140     if (sfConfig::get('app_permanent_tag'))
141     {
142       $query .= sprintf('
143         LEFT JOIN %s ON %s = %s
144         WHERE %s = ? AND ',
145         QuestionTagPeer::TABLE_NAME,
146         QuestionTagPeer::QUESTION_ID,
147         SearchIndexPeer::QUESTION_ID,
148         QuestionTagPeer::NORMALIZED_TAG
149       );
150     }
151     else
152     {
153       $query .= 'WHERE';
154     }
155
156     $query .= '
157       ('.implode(' OR ', array_fill(0, $nb_words, SearchIndexPeer::WORD.' = ?')).')
158       GROUP BY %s
159     ';
160
161     // AND query?
162     if ($exact)
163     {
164       $query .= ' HAVING nb = '.$nb_words;
165     }
166
167     $query .= ' ORDER BY nb DESC, total_weight DESC';
168
169     $query = sprintf($query,
170       SearchIndexPeer::QUESTION_ID,
171       SearchIndexPeer::WEIGHT,
172       SearchIndexPeer::TABLE_NAME,
173       SearchIndexPeer::QUESTION_ID
174     );
175
176     $stmt = $con->prepareStatement($query);
177     $stmt->setOffset($offset);
178     $stmt->setLimit($max);
179     $placeholder_offset = 1;
180     if (sfConfig::get('app_permanent_tag'))
181     {
182       $stmt->setString(1, sfConfig::get('app_permanent_tag'));
183       $placeholder_offset = 2;
184     }
185     for ($i = 0; $i < $nb_words; $i++)
186     {
187       $stmt->setString($i + $placeholder_offset, $words[$i]);
188     }
189     $rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM);
190     $questions = array();
191     while ($rs->next())
192     {
193       $questions[] = self::retrieveByPK($rs->getInt(1));
194     }
195
196     return $questions;
197   }
198
199   public static function getReportedSpamPager($page)
200   {
201     $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));
202     $c = new Criteria();
203     $c->add(self::REPORTS, 0, Criteria::GREATER_THAN);
204     $c->setLimit(20);
205     $c->addDescendingOrderByColumn(self::REPORTS);
206     $c->addAscendingOrderByColumn(self::CREATED_AT);
207     $c = self::addPermanentTagToCriteria($c);
208     $pager->setCriteria($c);
209     $pager->setPage($page);
210     $pager->setPeerMethod('doSelectJoinUser');
211     $pager->init();
212
213     return $pager;
214   }
215
216   public static function getReportCount()
217   {
218     $c = new Criteria();
219     $c->add(self::REPORTS, 0, Criteria::GREATER_THAN);
220     $c = self::addPermanentTagToCriteria($c);
221
222     return self::doCount($c);
223   }
224
225   private static function addPermanentTagToCriteria($criteria)
226   {
227     if (sfConfig::get('app_permanent_tag'))
228     {
229       $criteria->addJoin(self::ID, QuestionTagPeer::QUESTION_ID, Criteria::LEFT_JOIN);
230       $criteria->add(QuestionTagPeer::NORMALIZED_TAG, sfConfig::get('app_permanent_tag'));
231       $criteria->setDistinct();
232     }
233
234     return $criteria;
235   }
236 }
237
238 ?>
239
Note: See TracBrowser for help on using the browser.