Changeset 55
- Timestamp:
- 12/20/05 11:44:03 (3 years ago)
- Files:
-
- trunk/config/schema.xml (modified) (8 diffs)
- trunk/data/fixtures/test_data.yml (modified) (1 diff)
- trunk/data/sql/schema.sql (modified) (8 diffs)
- trunk/frontend/config/logging.yml (modified) (1 diff)
- trunk/frontend/config/routing.yml (modified) (1 diff)
- trunk/frontend/config/view.yml (modified) (1 diff)
- trunk/frontend/lib/helper/AnswerHelper.php (modified) (1 diff)
- trunk/frontend/lib/helper/QuestionHelper.php (modified) (1 diff)
- trunk/frontend/lib/myUser.class.php (modified) (1 diff)
- trunk/frontend/modules/administrator (added)
- trunk/frontend/modules/administrator/actions (added)
- trunk/frontend/modules/administrator/actions/actions.class.php (added)
- trunk/frontend/modules/administrator/config (added)
- trunk/frontend/modules/administrator/config/.sf (added)
- trunk/frontend/modules/administrator/config/security.yml (added)
- trunk/frontend/modules/administrator/config/view.yml (added)
- trunk/frontend/modules/administrator/lib (added)
- trunk/frontend/modules/administrator/lib/.sf (added)
- trunk/frontend/modules/administrator/templates (added)
- trunk/frontend/modules/administrator/templates/_user_options.php (added)
- trunk/frontend/modules/administrator/templates/usersSuccess.php (added)
- trunk/frontend/modules/administrator/validate (added)
- trunk/frontend/modules/administrator/validate/.sf (added)
- trunk/frontend/modules/answer/templates/_answer.php (modified) (1 diff)
- trunk/frontend/modules/moderator (added)
- trunk/frontend/modules/moderator/actions (added)
- trunk/frontend/modules/moderator/actions/actions.class.php (added)
- trunk/frontend/modules/moderator/config (added)
- trunk/frontend/modules/moderator/config/.sf (added)
- trunk/frontend/modules/moderator/config/security.yml (added)
- trunk/frontend/modules/moderator/lib (added)
- trunk/frontend/modules/moderator/lib/.sf (added)
- trunk/frontend/modules/moderator/templates (added)
- trunk/frontend/modules/moderator/templates/_answer_options.php (added)
- trunk/frontend/modules/moderator/templates/_question_options.php (added)
- trunk/frontend/modules/moderator/templates/reportedAnswersSuccess.php (added)
- trunk/frontend/modules/moderator/templates/reportedQuestionsSuccess.php (added)
- trunk/frontend/modules/moderator/templates/unpopularTagsSuccess.php (added)
- trunk/frontend/modules/moderator/validate (added)
- trunk/frontend/modules/moderator/validate/.sf (added)
- trunk/frontend/modules/question/templates/_question_list.php (modified) (2 diffs)
- trunk/frontend/modules/question/templates/showSuccess.php (modified) (2 diffs)
- trunk/frontend/modules/sidebar/templates/_administration.php (added)
- trunk/frontend/modules/sidebar/templates/_moderation.php (added)
- trunk/frontend/modules/sidebar/templates/defaultSuccess.php (modified) (1 diff)
- trunk/frontend/modules/sidebar/templates/questionSuccess.php (modified) (1 diff)
- trunk/frontend/modules/tag/actions/actions.class.php (modified) (2 diffs)
- trunk/frontend/modules/tag/templates/_question_tags.php (modified) (1 diff)
- trunk/frontend/modules/user/actions/actions.class.php (modified) (2 diffs)
- trunk/frontend/modules/user/config/security.yml (added)
- trunk/frontend/modules/user/config/view.yml (modified) (1 diff)
- trunk/frontend/modules/user/templates/reportAnswerSuccess.php (added)
- trunk/frontend/modules/user/templates/reportQuestionSuccess.php (added)
- trunk/frontend/modules/user/templates/showSuccess.php (modified) (3 diffs)
- trunk/frontend/templates/layout.php (modified) (1 diff)
- trunk/lib/model/Answer.php (modified) (1 diff)
- trunk/lib/model/AnswerPeer.php (modified) (2 diffs)
- trunk/lib/model/Question.php (modified) (1 diff)
- trunk/lib/model/QuestionPeer.php (modified) (1 diff)
- trunk/lib/model/QuestionTagPeer.php (modified) (1 diff)
- trunk/lib/model/ReportAnswer.php (added)
- trunk/lib/model/ReportAnswerPeer.php (added)
- trunk/lib/model/ReportQuestion.php (added)
- trunk/lib/model/ReportQuestionPeer.php (added)
- trunk/lib/model/UserPeer.php (modified) (1 diff)
- trunk/lib/model/map/AnswerMapBuilder.php (modified) (1 diff)
- trunk/lib/model/map/QuestionMapBuilder.php (modified) (1 diff)
- trunk/lib/model/map/QuestionTagMapBuilder.php (modified) (2 diffs)
- trunk/lib/model/map/ReportAnswerMapBuilder.php (added)
- trunk/lib/model/map/ReportQuestionMapBuilder.php (added)
- trunk/lib/model/map/UserMapBuilder.php (modified) (1 diff)
- trunk/lib/model/om/BaseAnswer.php (modified) (16 diffs)
- trunk/lib/model/om/BaseAnswerPeer.php (modified) (5 diffs)
- trunk/lib/model/om/BaseQuestion.php (modified) (16 diffs)
- trunk/lib/model/om/BaseQuestionPeer.php (modified) (5 diffs)
- trunk/lib/model/om/BaseQuestionTag.php (modified) (3 diffs)
- trunk/lib/model/om/BaseQuestionTagPeer.php (modified) (5 diffs)
- trunk/lib/model/om/BaseReportAnswer.php (added)
- trunk/lib/model/om/BaseReportAnswerPeer.php (added)
- trunk/lib/model/om/BaseReportQuestion.php (added)
- trunk/lib/model/om/BaseReportQuestionPeer.php (added)
- trunk/lib/model/om/BaseUser.php (modified) (16 diffs)
- trunk/lib/model/om/BaseUserPeer.php (modified) (5 diffs)
- trunk/web/css/main.css (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/config/schema.xml
r44 r55 12 12 <column name="html_body" type="longvarchar" /> 13 13 <column name="interested_users" type="integer" default="0" /> 14 <column name="reports" type="integer" default="0" /> 14 15 <column name="created_at" type="timestamp" /> 15 16 <column name="updated_at" type="timestamp" /> … … 19 20 <column name="id" type="integer" required="true" primaryKey="true" autoincrement="true" /> 20 21 <column name="question_id" type="integer" /> 21 <foreign-key foreignTable="ask_question" >22 <foreign-key foreignTable="ask_question" onDelete="cascade"> 22 23 <reference local="question_id" foreign="id"/> 23 24 </foreign-key> … … 30 31 <column name="relevancy_up" type="integer" default="0" /> 31 32 <column name="relevancy_down" type="integer" default="0" /> 33 <column name="reports" type="integer" default="0" /> 32 34 <column name="created_at" type="timestamp" /> 33 35 </table> … … 42 44 <column name="salt" type="varchar" size="32" /> 43 45 <column name="has_paypal" type="boolean" default="0" /> 46 <column name="want_to_be_moderator" type="boolean" default="0" /> 47 <column name="is_moderator" type="boolean" default="0" /> 48 <column name="is_administrator" type="boolean" default="0" /> 49 <column name="deletions" type="integer" default="0" /> 44 50 <column name="created_at" type="timestamp" /> 45 51 </table> … … 47 53 <table name="ask_interest" phpName="Interest"> 48 54 <column name="question_id" type="integer" primaryKey="true" /> 49 <foreign-key foreignTable="ask_question" >55 <foreign-key foreignTable="ask_question" onDelete="cascade"> 50 56 <reference local="question_id" foreign="id"/> 51 57 </foreign-key> … … 59 65 <table name="ask_relevancy" phpName="Relevancy"> 60 66 <column name="answer_id" type="integer" primaryKey="true" /> 61 <foreign-key foreignTable="ask_answer" >67 <foreign-key foreignTable="ask_answer" onDelete="cascade"> 62 68 <reference local="answer_id" foreign="id"/> 63 69 </foreign-key> … … 71 77 72 78 <table name="ask_question_tag" phpName="QuestionTag"> 73 <column name="question_id" type="integer" />74 <foreign-key foreignTable="ask_question" >79 <column name="question_id" type="integer" primaryKey="true" /> 80 <foreign-key foreignTable="ask_question" onDelete="cascade"> 75 81 <reference local="question_id" foreign="id" /> 76 82 </foreign-key> 77 <column name="user_id" type="integer" />83 <column name="user_id" type="integer" primaryKey="true" /> 78 84 <foreign-key foreignTable="ask_user"> 79 85 <reference local="user_id" foreign="id" /> … … 81 87 <column name="created_at" type="timestamp" /> 82 88 <column name="tag" type="varchar" size="100" /> 83 <column name="normalized_tag" type="varchar" size="100" />89 <column name="normalized_tag" type="varchar" size="100" primaryKey="true" /> 84 90 <index name="normalized_tag_index"> 85 91 <index-column name="normalized_tag" /> 86 92 </index> 87 <unique name="pk"> 88 <unique-column name="question_id" /> 89 <unique-column name="user_id" /> 90 <unique-column name="normalized_tag" /> 91 </unique> 93 </table> 94 95 <table name="ask_report_question" phpName="ReportQuestion"> 96 <column name="question_id" type="integer" primaryKey="true" /> 97 <foreign-key foreignTable="ask_question" onDelete="cascade"> 98 <reference local="question_id" foreign="id" /> 99 </foreign-key> 100 <column name="user_id" type="integer" primaryKey="true" /> 101 <foreign-key foreignTable="ask_user"> 102 <reference local="user_id" foreign="id" /> 103 </foreign-key> 104 <column name="created_at" type="timestamp" /> 105 </table> 106 107 <table name="ask_report_answer" phpName="ReportAnswer"> 108 <column name="answer_id" type="integer" primaryKey="true" /> 109 <foreign-key foreignTable="ask_answer" onDelete="cascade"> 110 <reference local="answer_id" foreign="id" /> 111 </foreign-key> 112 <column name="user_id" type="integer" primaryKey="true" /> 113 <foreign-key foreignTable="ask_user"> 114 <reference local="user_id" foreign="id" /> 115 </foreign-key> 116 <column name="created_at" type="timestamp" /> 92 117 </table> 93 118 trunk/data/fixtures/test_data.yml
r38 r55 11 11 password: symfony 12 12 email: fp@example.com 13 is_administrator: on 13 14 14 15 francois: trunk/data/sql/schema.sql
r44 r55 16 16 `html_body` TEXT , 17 17 `interested_users` INTEGER default 0 , 18 `reports` INTEGER default 0 , 18 19 `created_at` DATETIME , 19 20 `updated_at` DATETIME , … … 38 39 `relevancy_up` INTEGER default 0 , 39 40 `relevancy_down` INTEGER default 0 , 41 `reports` INTEGER default 0 , 40 42 `created_at` DATETIME , 41 43 PRIMARY KEY(`id`), … … 44 46 FOREIGN KEY (`question_id`) 45 47 REFERENCES `ask_question` (`id`) 46 ,48 ON DELETE CASCADE, 47 49 INDEX `ask_answer_FI_2` (`user_id`), 48 50 CONSTRAINT `ask_answer_FK_2` … … 65 67 `salt` VARCHAR(32) , 66 68 `has_paypal` INTEGER default 0 , 69 `want_to_be_moderator` INTEGER default 0 , 70 `is_moderator` INTEGER default 0 , 71 `is_administrator` INTEGER default 0 , 72 `deletions` INTEGER default 0 , 67 73 `created_at` DATETIME , 68 74 PRIMARY KEY(`id`)) … … 81 87 FOREIGN KEY (`question_id`) 82 88 REFERENCES `ask_question` (`id`) 83 ,89 ON DELETE CASCADE, 84 90 INDEX `ask_interest_FI_2` (`user_id`), 85 91 CONSTRAINT `ask_interest_FK_2` … … 102 108 FOREIGN KEY (`answer_id`) 103 109 REFERENCES `ask_answer` (`id`) 104 ,110 ON DELETE CASCADE, 105 111 INDEX `ask_relevancy_FI_2` (`user_id`), 106 112 CONSTRAINT `ask_relevancy_FK_2` … … 115 121 116 122 CREATE TABLE `ask_question_tag`( 117 `question_id` INTEGER ,118 `user_id` INTEGER ,123 `question_id` INTEGER NOT NULL , 124 `user_id` INTEGER NOT NULL , 119 125 `created_at` DATETIME , 120 126 `tag` VARCHAR(100) , 121 `normalized_tag` VARCHAR(100) ,122 UNIQUE KEY `pk`(`question_id`,`user_id`,`normalized_tag`),127 `normalized_tag` VARCHAR(100) NOT NULL , 128 PRIMARY KEY(`question_id`,`user_id`,`normalized_tag`), 123 129 KEY `normalized_tag_index` (`normalized_tag`), 124 130 CONSTRAINT `ask_question_tag_FK_1` 125 131 FOREIGN KEY (`question_id`) 126 132 REFERENCES `ask_question` (`id`) 127 ,133 ON DELETE CASCADE, 128 134 INDEX `ask_question_tag_FI_2` (`user_id`), 129 135 CONSTRAINT `ask_question_tag_FK_2` … … 132 138 ) 133 139 Type=InnoDB; 140 # ----------------------------------------------------------------------- 141 # ask_report_question 142 # ----------------------------------------------------------------------- 143 DROP TABLE IF EXISTS `ask_report_question`; 144 145 CREATE TABLE `ask_report_question`( 146 `question_id` INTEGER NOT NULL , 147 `user_id` INTEGER NOT NULL , 148 `created_at` DATETIME , 149 PRIMARY KEY(`question_id`,`user_id`), 150 CONSTRAINT `ask_report_question_FK_1` 151 FOREIGN KEY (`question_id`) 152 REFERENCES `ask_question` (`id`) 153 ON DELETE CASCADE, 154 INDEX `ask_report_question_FI_2` (`user_id`), 155 CONSTRAINT `ask_report_question_FK_2` 156 FOREIGN KEY (`user_id`) 157 REFERENCES `ask_user` (`id`) 158 ) 159 Type=InnoDB; 160 # ----------------------------------------------------------------------- 161 # ask_report_answer 162 # ----------------------------------------------------------------------- 163 DROP TABLE IF EXISTS `ask_report_answer`; 164 165 CREATE TABLE `ask_report_answer`( 166 `answer_id` INTEGER NOT NULL , 167 `user_id` INTEGER NOT NULL , 168 `created_at` DATETIME , 169 PRIMARY KEY(`answer_id`,`user_id`), 170 CONSTRAINT `ask_report_answer_FK_1` 171 FOREIGN KEY (`answer_id`) 172 REFERENCES `ask_answer` (`id`) 173 ON DELETE CASCADE, 174 INDEX `ask_report_answer_FI_2` (`user_id`), 175 CONSTRAINT `ask_report_answer_FK_2` 176 FOREIGN KEY (`user_id`) 177 REFERENCES `ask_user` (`id`) 178 ) 179 Type=InnoDB; 180 181 134 182 135 183 trunk/frontend/config/logging.yml
r2 r55 1 1 prod: 2 level: err2 level: warning 3 3 4 4 dev: trunk/frontend/config/routing.yml
r44 r55 53 53 url: /password_request 54 54 param: { module: user, action: passwordRequest } 55 56 user_report_question: 57 url: /report_question/:id 58 param: { module: user, action: reportQuestion } 59 60 user_report_answer: 61 url: /report_answer/:id 62 param: { module: user, action: reportAnswer } 55 63 56 64 # login trunk/frontend/config/view.yml
r20 r55 19 19 slots: 20 20 sidebar: [sidebar, default] 21 22 use_default_slots: on 23 trunk/frontend/lib/helper/AnswerHelper.php
r39 r55 49 49 } 50 50 51 function link_to_report_answer($answer, $user) 52 { 53 use_helper('Javascript'); 54 55 $text = '[report to moderator]'; 56 if ($user->isAuthenticated()) 57 { 58 $has_already_reported_answer = ReportAnswerPeer::retrieveByPk($answer->getId(), $user->getSubscriberId()); 59 if ($has_already_reported_answer) 60 { 61 // already spam for this user 62 return '[reported as spam]'; 63 } 64 else 65 { 66 return link_to_remote($text, array( 67 'url' => '@user_report_answer?id='.$answer->getId(), 68 'update' => array('success' => 'report_answer_'.$answer->getId()), 69 'loading' => "Element.show('indicator')", 70 'complete' => "Element.hide('indicator');".visual_effect('highlight', 'report_answer_'.$answer->getId()), 71 )); 72 } 73 } 74 else 75 { 76 return link_to_login($text); 77 } 78 } 79 51 80 ?> trunk/frontend/lib/helper/QuestionHelper.php
r38 r55 18 18 } 19 19 20 function link_to_report_question($question, $user) 21 { 22 use_helper('Javascript'); 23 24 $text = '[report to moderator]'; 25 if ($user->isAuthenticated()) 26 { 27 $has_already_reported_question = ReportQuestionPeer::retrieveByPk($question->getId(), $user->getSubscriberId()); 28 if ($has_already_reported_question) 29 { 30 // already spam for this user 31 return '[reported as spam]'; 32 } 33 else 34 { 35 return link_to_remote($text, array( 36 'url' => '@user_report_question?id='.$question->getId(), 37 'update' => array('success' => 'report_question_'.$question->getId()), 38 'loading' => "Element.show('indicator')", 39 'complete' => "Element.hide('indicator');".visual_effect('highlight', 'report_question_'.$question->getId()), 40 )); 41 } 42 } 43 else 44 { 45 return link_to_login($text); 46 } 47 } 48 20 49 ?> trunk/frontend/lib/myUser.class.php
r44 r55 9 9 10 10 $this->addCredential('subscriber'); 11 12 if ($user->getIsModerator()) 13 { 14 $this->addCredential('moderator'); 15 } 16 17 if ($user->getIsAdministrator()) 18 { 19 $this->addCredential('administrator'); 20 } 21 11 22 $this->setAttribute('nickname', $user->getNickname(), 'subscriber'); 12 23 } trunk/frontend/modules/answer/templates/_answer.php
r40 r55 8 8 <?php echo $answer->getHtmlBody() ?> 9 9 <div class="subtitle" style="margin-top: -8px">answered by <?php echo link_to_profile($answer->getUser()) ?> on <?php echo format_date($answer->getCreatedAt(), 'f') ?></div> 10 <div class="options" id="report_answer_<?php echo $answer->getId() ?>"> 11 <?php echo link_to_report_answer($answer, $user) ?> 12 <?php echo include_partial('moderator/answer_options', array('answer' => $answer)) ?> 13 </div> 10 14 </div> 11 15 trunk/frontend/modules/question/templates/_question_list.php
r38 r55 14 14 <?php echo truncate_text(strip_tags($question->getHtmlBody()), 200) ?> 15 15 16 <div class=" tags">16 <div class="options"> 17 17 18 18 <?php if ($question->getAnswers()): ?> … … 30 30 </div> 31 31 32 <div class="options" id="report_question_<?php echo $question->getId() ?>"> 33 <?php echo link_to_report_question($question, $user) ?> 34 <?php include_partial('moderator/question_options', array('question' => $question)) ?> 35 </div> 36 32 37 </div> 33 38 </div> trunk/frontend/modules/question/templates/showSuccess.php
r48 r55 1 <?php use_helpers('Date', 'Answer' ) ?>1 <?php use_helpers('Date', 'Answer', 'Question') ?> 2 2 3 3 <h1></h1> … … 14 14 <div class="question_body"> 15 15 <?php echo $question->getHtmlBody() ?> 16 <div class="options" id="report_question_<?php echo $question->getId() ?>"> 17 <?php echo link_to_report_question($question, $user) ?> 18 <?php include_partial('moderator/question_options', array('question' => $question)) ?> 19 </div> 16 20 </div> 17 21 </div> trunk/frontend/modules/sidebar/templates/defaultSuccess.php
r38 r55 11 11 <h2>browse askeet</h2> 12 12 <?php echo include_partial('rss_links') ?> 13 14 <?php echo include_partial('sidebar/moderation') ?> 15 16 <?php echo include_partial('sidebar/administration') ?> trunk/frontend/modules/sidebar/templates/questionSuccess.php
r38 r55 28 28 </div> 29 29 <?php endif ?> 30 31 <?php echo include_partial('sidebar/moderation') ?> 32 33 <?php echo include_partial('sidebar/administration') ?> trunk/frontend/modules/tag/actions/actions.class.php
r53 r55 41 41 42 42 // clear the question tag list fragment in cache 43 $this->getContext()->getViewCacheManager()->remove('@question?stripped_title='.$this->question->getStrippedTitle(), 'fragment_question_tags'); 43 if (SF_CACHE) 44 { 45 $this->getContext()->getViewCacheManager()->remove('@question?stripped_title='.$this->question->getStrippedTitle(), 'fragment_question_tags'); 46 } 44 47 } 45 48 … … 61 64 62 65 // clear the question tag list fragment in cache 63 $this->getContext()->getViewCacheManager()->remove('@question?stripped_title='.$this->question->getStrippedTitle(), 'fragment_question_tags'); 66 if (SF_CACHE) 67 { 68 $this->getContext()->getViewCacheManager()->remove('@question?stripped_title='.$this->question->getStrippedTitle(), 'fragment_question_tags'); 69 } 64 70 } 65 71 trunk/frontend/modules/tag/templates/_question_tags.php
r53 r55 17 17 <?php echo link_to($tag, '@tag?tag='.$tag, 'rel=tag') ?> 18 18 <?php endif ?> 19 20 <?php if ($user->hasCredential('moderator')): ?> 21 <?php echo link_to('[remove tag]', 'moderator/deleteTagForQuestion?tag='.$tag.'&question_id='.$question->getId(), 'confirm=Are you sure you want to delete this tag for this question?') ?> 22 <?php endif ?> 19 23 </li> 20 24 <?php endforeach ?> trunk/frontend/modules/user/actions/actions.class.php
r48 r55 166 166 } 167 167 168 public function executeReportQuestion() 169 { 170 $this->question = QuestionPeer::retrieveByPk($this->getRequestParameter('id')); 171 $this->forward404Unless($this->question); 172 173 $spam = new ReportQuestion(); 174 $spam->setQuestionId($this->question->getId()); 175 $spam->setUserId($this->getUser()->getSubscriberId()); 176 $spam->save(); 177 } 178 179 public function executeReportAnswer() 180 { 181 $this->answer = AnswerPeer::retrieveByPk($this->getRequestParameter('id')); 182 $this->forward404Unless($this->answer); 183 184 $spam = new ReportAnswer(); 185 $spam->setAnswerId($this->answer->getId()); 186 $spam->setUserId($this->getUser()->getSubscriberId()); 187 $spam->save(); 188 } 189 168 190 public function handleErrorLogin() 169 191 { … … 200 222 $this->subscriber->setEmail($this->getRequestParameter('email')); 201 223 $this->subscriber->setHasPaypal($this->getRequestParameter('has_paypal'), 0); 224 $this->subscriber->setWantToBeModerator($this->getRequestParameter('want_to_be_moderator')); 202 225 } 203 226 trunk/frontend/modules/user/config/view.yml
r20 r55 4 4 interestedSuccess: 5 5 has_layout: off 6 7 reportQuestionSuccess: 8 has_layout: off 9 10 reportAnswerSuccess: 11 has_layout: off trunk/frontend/modules/user/templates/showSuccess.php
r46 r55 1 1 <?php use_helpers('Date', 'Question', 'Text', 'Object') ?> 2 2 3 <h1><?php echo $subscriber ?>'s profile</h1> 3 <h1><?php echo $subscriber ?>'s profile 4 <?php if ($subscriber->getIsModerator()): ?> [moderator]<?php endif ?> 5 <?php if ($subscriber->getIsAdministrator()): ?> [administrator]<?php endif ?> 6 </h1> 7 8 <?php echo include_partial('administrator/user_options', array('subscriber' => $subscriber)) ?> 4 9 5 10 <?php if ($subscriber->getId() == $user->getSubscriberId()): ?> … … 26 31 <br class="clearleft" /> 27 32 28 <?php echo form_error('has_paypal') ?>29 33 <label for="has_paypal">paypal account?</label> 30 34 <?php echo object_checkbox_tag($subscriber, 'getHasPaypal') ?> … … 40 44 <?php echo input_password_tag('password_bis', '', 'size=30') ?> 41 45 <br class="clearleft" /> 46 47 <?php if (!$subscriber->getIsModerator()): ?> 48 <label for="want_to_be_moderator">do you want to be a moderator?</label> 49 <?php echo object_checkbox_tag($subscriber, 'getWantToBeModerator') ?> 50 <br class="clearleft" /> 51 <?php endif ?> 42 52 43 53 </fieldset> trunk/frontend/templates/layout.php
r40 r55 27 27 <ul> 28 28 <?php if ($user->isAuthenticated()): ?> 29 <li><?php echo link_to($user->getAttribute('nickname', '', 'subscriber').' profile', '@current_user_profile') ?></li> 29 30 <li><?php echo link_to('sign out', '@logout') ?></li> 30 <li><?php echo link_to($user->getAttribute('nickname', '', 'subscriber').' profile', '@current_user_profile') ?></li>31 31 <?php else: ?> 32 32 <li><?php echo link_to('sign in/register', '@login') ?></li> trunk/lib/model/Answer.php
r23 r55 39 39 $this->setHtmlBody(markdown($v)); 40 40 } 41 42 public function deleteReports() 43 { 44 $reports = $this->getReportQuestions(); 45 foreach ($reports as $report) 46 { 47 $report->delete(); 48 } 49 50 $this->setReports(0); 51 } 52 53 public function deleteSpam($moderator) 54 { 55 $con = Propel::getConnection(); 56 try 57 { 58 $con->begin(); 59 60 $user = $this->getUser(); 61 if ($user->getNickname() != 'anonymous') 62 { 63 $user->setDeletions($user->getDeletions() + 1); 64 $user->save(); 65 } 66 67 $this->delete(); 68 69 $con->commit(); 70 71 $log = 'moderator "%s" deleted answer "%s" for question "%s" (%s)'; 72 $log = sprintf($log, $moderator->getNickname(), $this->getId(), $this->getQuestion()->getTitle(), substr($this->getBody(), 0, 50)); 73 sfContext::getInstance()->getLogger()->warning($log); 74 } 75 catch (PropelException $e) 76 { 77 $con->rollback(); 78 throw $e; 79 } 80 } 41 81 } 42 82 trunk/lib/model/AnswerPeer.php
r40 r55 50 50 } 51 51 52 public function getRecent($max = 10)52 public static function getRecent($max = 10) 53 53 { 54 54 $c = new Criteria(); … … 58 58 59 59 return self::doSelectJoinUser($c); 60 } 61 62 public static function getReportedSpamPager($page) 63 { 64 $pager = new sfPager('Answer', APP_PAGER_HOMEPAGE_MAX); 65 $c = new Criteria(); 66 $c->add(self::REPORTS, 0, Criteria::GREATER_THAN); 67 $c->setLimit(20); 68 $c->addDescendingOrderByColumn(self::REPORTS); 69 $c->addAscendingOrderByColumn(self::CREATED_AT); 70 $c = self::addPermanentTagToCriteria($c); 71 $pager->setCriteria($c); 72 $pager->setPage($page); 73 $pager->setPeerMethod('doSelectJoinUser'); 74 $pager->init(); 75 76 return $pager; 77 } 78 79 public static function getReportCount() 80 { 81 $c = new Criteria(); 82 $c->add(self::REPORTS, 0, Criteria::GREATER_THAN); 83 $c = self::addPermanentTagToCriteria($c); 84 85 return self::doCount($c); 60 86 } 61 87 trunk/lib/model/Question.php
r42 r55 145 145 $c->addAsColumn('relevancy', AnswerPeer::RELEVANCY_UP.' / ('.AnswerPeer::RELEVANCY_UP.' + '.AnswerPeer::RELEVANCY_DOWN.')'); 146 146 $c->addDescendingOrderByColumn('relevancy'); 147 $c->addDescendingOrderByColumn(AnswerPeer::RELEVANCY_UP); 147 148 148 149 return AnswerPeer::doSelect($c); 150 } 151 152 public function deleteReports() 153 { 154 $reports = $this->getReportQuestions(); 155 foreach ($reports as $report) 156 { 157 $report->delete(); 158 } 159 160 $this->setReports(0); 161 } 162 163 public function deleteSpam($moderator) 164 { 165 $con = Propel::getConnection(); 166 try 167 { 168 $con->begin(); 169 170 $user = $this->getUser(); 171 $user->setDeletions($user->getDeletions() + 1); 172 $user->save(); 173 174 $this->delete(); 175 176 $con->commit(); 177 178 $log = 'moderator "%s" deleted question "%s"'; 179 $log = sprintf($log, $moderator->getNickname(), $this->getTitle()); 180 sfContext::getInstance()->getLogger()->warning($log); 181 } 182 catch (PropelException $e) 183 { 184 $con->rollback(); 185 throw $e; 186 } 149 187 } 150 188 } trunk/lib/model/QuestionPeer.php
r42 r55 103 103 } 104 104 105 public static function getReportedSpamPager($page) 106 { 107 $pager = new sfPager('Question', APP_PAGER_HOMEPAGE_MAX); 108 $c = new Criteria(); 109 $c->add(self::REPORTS, 0, Criteria::GREATER_THAN); 110 $c->setLimit(20); 111 $c->addDescendingOrderByColumn(self::REPORTS); 112 $c->addAscendingOrderByColumn(self::CREATED_AT); 113 $c = self::addPermanentTagToCriteria($c); 114 $pager->setCriteria($c); 115 $pager->setPage($page); 116 $pager->setPeerMethod('doSelectJoinUser'); 117 $pager->init(); 118 119 return $pager; 120 } 121 122 public static function getReportCount() 123 { 124 $c = new Criteria(); 125 $c->add(self::REPORTS, 0, Criteria::GREATER_THAN); 126 $c = self::addPermanentTagToCriteria($c); 127 128 return self::doCount($c); 129 } 130 105 131 private static function addPermanentTagToCriteria($criteria) 106 132 { trunk/lib/model/QuestionTagPeer.php
r40 r55 147 147 return $tags; 148 148 } 149 150 public static function getUnpopularTags() 151 { 152 $tags = array(); 153 154 $con = Propel::getConnection(); 155 $query = ' 156 SELECT t1.normalized_tag AS tag, 157 COUNT(t1.normalized_tag) AS count 158 FROM '.QuestionTagPeer::TABLE_NAME.' AS t1'; 159 160 if (defined('APP_PERMANENT_TAG')) 161 { 162 $query .= ' 163 INNER JOIN '.QuestionTagPeer::TABLE_NAME.' AS t2 ON t1.question_id = t2.question_id 164 WHERE t2.normalized_tag = ? AND t1.normalized_tag != ? 165 AND count < 5 166 '; 167 } 168 169 $query .= ' 170 GROUP BY t1.normalized_tag 171 ORDER BY count ASC 172 '; 173 174 $stmt = $con->prepareStatement($query); 175 if (defined('APP_PERMANENT_TAG')) 176 { 177 $stmt->setString(1, APP_PERMANENT_TAG); 178 $stmt->setString(2, APP_PERMANENT_TAG); 179 } 180 $rs = $stmt->executeQuery(); 181 while ($rs->next()) 182 { 183 $tags[$rs->getString('tag')] = $rs->getInt('count'); 184 } 185 186 return $tags; 187 } 188 189 public static function getByNormalizedTag($tag) 190 { 191 $c = new Criteria(); 192 $c->add(self::NORMALIZED_TAG, Tag::normalize($tag)); 193 194 return self::doSelect($c); 195 } 196 197 public static function deleteSpam($moderator, $tag, $question_id = null) 198 { 199 if ($question_id === null) 200 { 201 $tags = self::getByNormalizedTag($tag); 202 } 203 else 204 { 205 $c = new Criteria(); 206 $c->add(self::NORMALIZED_TAG, Tag::normalize($tag)); 207 $c->add(self::QUESTION_ID, $question_id); 208 209 $tags = self::doSelect($c); 210 } 211 212 $con = Propel::getConnection(); 213 try 214 { 215 $con->begin(); 216 217 foreach ($tags as $tag) 218 { 219 $user = $tag->getUser(); 220 $user->setDeletions($user->getDeletions() + 1); 221 $user->save(); 222 223 $tag->delete(); 224 } 225 226 $con->commit(); 227 228 $log = 'moderator "%s" deleted tag "%s"'; 229 $log = sprintf($log, $moderator->getNickname(), $tag->getNormalizedTag()); 230 sfContext::getInstance()->getLogger()->warning($log); 231 } 232 catch (PropelException $e) 233 { 234 $con->rollback(); 235 throw $e; 236 } 237 } 149 238
