Changeset 20
- Timestamp:
- 12/07/05 11:31:28 (7 years ago)
- Files:
-
- trunk/config/schema.xml (modified) (1 diff)
- trunk/data/sql/schema.sql (modified) (1 diff)
- trunk/frontend/config/view.yml (modified) (1 diff)
- trunk/frontend/lib/helper/AnswerHelper.php (modified) (1 diff)
- trunk/frontend/lib/helper/UserHelper.php (added)
- trunk/frontend/modules/answer/templates/_list.php (modified) (1 diff)
- trunk/frontend/modules/answer/templates/_vote_user.php (added)
- trunk/frontend/modules/question/templates/_interested_user.php (modified) (1 diff)
- trunk/frontend/modules/question/templates/_question_list.php (modified) (1 diff)
- trunk/frontend/modules/user/actions/actions.class.php (modified) (1 diff)
- trunk/frontend/modules/user/config/view.yml (added)
- trunk/frontend/modules/user/templates/interestedSuccess.php (added)
- trunk/frontend/modules/user/templates/voteSuccess.php (added)
- trunk/frontend/templates/layout.php (modified) (2 diffs)
- trunk/lib/model/Answer.php (modified) (2 diffs)
- trunk/lib/model/map/RelevancyMapBuilder.php (modified) (1 diff)
- trunk/lib/model/om/BaseRelevancy.php (modified) (4 diffs)
- trunk/lib/model/om/BaseRelevancyPeer.php (modified) (5 diffs)
- trunk/web/css/main.css (modified) (1 diff)
- trunk/web/images/indicator.gif (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/config/schema.xml
r16 r20 55 55 56 56 <table name="ask_relevancy" phpName="Relevancy"> 57 <column name="answer_id" type="integer" />57 <column name="answer_id" type="integer" primaryKey="true" /> 58 58 <foreign-key foreignTable="ask_answer"> 59 59 <reference local="answer_id" foreign="id"/> 60 60 </foreign-key> 61 <column name="user_id" type="integer" />61 <column name="user_id" type="integer" primaryKey="true" /> 62 62 <foreign-key foreignTable="ask_user"> 63 63 <reference local="user_id" foreign="id"/> trunk/data/sql/schema.sql
r16 r20 91 91 92 92 CREATE TABLE `ask_relevancy`( 93 `answer_id` INTEGER ,94 `user_id` INTEGER ,93 `answer_id` INTEGER NOT NULL , 94 `user_id` INTEGER NOT NULL , 95 95 `score` INTEGER , 96 96 `created_at` DATETIME , 97 INDEX `ask_relevancy_FI_1` (`answer_id`),97 PRIMARY KEY(`answer_id`,`user_id`), 98 98 CONSTRAINT `ask_relevancy_FK_1` 99 99 FOREIGN KEY (`answer_id`) trunk/frontend/config/view.yml
r18 r20 12 12 stylesheets: [main, layout] 13 13 14 javascripts: [ ]14 javascripts: [sf/js/prototype] 15 15 16 16 has_layout: on trunk/frontend/lib/helper/AnswerHelper.php
r14 r20 6 6 } 7 7 8 function link_to_user_relevancy_up($user, $answer) 9 { 10 return link_to_user_relevancy('up', $user, $answer); 11 } 12 13 function link_to_user_relevancy_down($user, $answer) 14 { 15 return link_to_user_relevancy('down', $user, $answer); 16 } 17 18 function link_to_user_relevancy($name, $user, $answer) 19 { 20 use_helper('Javascript'); 21 22 if ($user->isAuthenticated()) 23 { 24 $has_already_voted = RelevancyPeer::retrieveByPk($answer->getId(), $user->getSubscriberId()); 25 if ($has_already_voted) 26 { 27 // already interested 28 return $name; 29 } 30 else 31 { 32 // didn't declare interest yet 33 return link_to_remote($name, array( 34 'url' => 'user/vote?id='.$answer->getId().'&score='.($name == 'up' ? 1 : -1), 35 'update' => array('success' => 'vote_'.$answer->getId()), 36 'loading' => "Element.show('indicator')", 37 'complete' => "Element.hide('indicator');".visual_effect('highlight', 'vote_'.$name.'_'.$answer->getId()), 38 )); 39 } 40 } 41 else 42 { 43 return link_to_function($name, visual_effect('blind_down', 'login', array('duration' => 0.5))); 44 } 45 } 46 8 47 ?> trunk/frontend/modules/answer/templates/_list.php
r18 r20 4 4 <?php foreach ($answer_pager->getResults() as $answer): ?> 5 5 <div> 6 <?php echo $answer->getRelevancyUpPercent() ?>% UP <?php echo $answer->getRelevancyDownPercent() ?> % DOWN 6 <div class="vote_block" id="vote_<?php echo $answer->getId() ?>"> 7 <?php echo include_partial('answer/vote_user', array('answer' => $answer)) ?> 8 </div> 7 9 posted by <?php echo $answer->getUser() ?> 8 10 on <?php echo format_date($answer->getCreatedAt(), 'p') ?> trunk/frontend/modules/question/templates/_interested_user.php
r12 r20 1 <div class="interested_mark"> 2 <?php echo count($question->getInterests()) ?> 1 <?php use_helper('User') ?> 2 3 <div class="interested_mark" id="mark_<?php echo $question->getId() ?>"> 4 <?php echo $question->getInterestedUsers() ?> 3 5 </div> 6 7 <?php echo link_to_user_interested($user, $question) ?> trunk/frontend/modules/question/templates/_question_list.php
r14 r20 2 2 3 3 <?php foreach($question_pager->getResults() as $question): ?> 4 <div class="interested_block" >4 <div class="interested_block" id="block_<?php echo $question->getId() ?>"> 5 5 <?php echo include_partial('interested_user', array('question' => $question)) ?> 6 6 </div> trunk/frontend/modules/user/actions/actions.class.php
r18 r20 17 17 18 18 $this->interested_users = $this->question->getAllInterestedUsers(); 19 } 20 21 public function executeInterested() 22 { 23 $this->question = QuestionPeer::retrieveByPk($this->getRequestParameter('id')); 24 $this->forward404Unless($this->question); 25 26 $user = $this->getUser()->getSubscriber(); 27 28 $interest = new Interest(); 29 $interest->setQuestion($this->question); 30 $interest->setUser($user); 31 $interest->save(); 32 } 33 34 public function executeVote() 35 { 36 $this->answer = AnswerPeer::retrieveByPk($this->getRequestParameter('id')); 37 $this->forward404Unless($this->answer); 38 39 $user = $this->getUser()->getSubscriber(); 40 41 $relevancy = new Relevancy(); 42 $relevancy->setAnswer($this->answer); 43 $relevancy->setUser($user); 44 $relevancy->setScore($this->getRequestParameter('score') == 1 ? 1 : -1); 45 $relevancy->save(); 19 46 } 20 47 trunk/frontend/templates/layout.php
r18 r20 16 16 <body> 17 17 18 <div id="indicator" style="display: none"></div> 19 18 20 <div id="header"> 19 21 <ul> … … 27 29 </ul> 28 30 <h1><?php echo link_to(image_tag('askeet_logo.gif', 'alt=askeet'), 'question/list') ?></h1> 31 </div> 32 33 <div id="login" style="display: none"> 34 <h2>Please sign-in first</h2> 35 36 <?php echo link_to_function('cancel', visual_effect('blind_up', 'login', array('duration' => 0.5))) ?> 37 38 <?php echo form_tag('user/login', 'id=loginform') ?> 39 nickname: <?php echo input_tag('nickname') ?><br /> 40 password: <?php echo input_password_tag('password') ?><br /> 41 <?= input_hidden_tag('referer', $params->get('referer') ? $params->get('referer') : $request->getUri()) ?> 42 <?php echo submit_tag('login') ?> 43 </form> 29 44 </div> 30 45 trunk/lib/model/Answer.php
r12 r20 21 21 $total = $this->getRelevancyUp() + $this->getRelevancyDown(); 22 22 23 return $total ? sprintf('% 02.0f', $this->getRelevancyUp() * 100 / $total) : 0;23 return $total ? sprintf('%.0f', $this->getRelevancyUp() * 100 / $total) : 0; 24 24 } 25 25 … … 28 28 $total = $this->getRelevancyUp() + $this->getRelevancyDown(); 29 29 30 return $total ? sprintf('% 02.0f', $this->getRelevancyDown() * 100 / $total) : 0;30 return $total ? sprintf('%.0f', $this->getRelevancyDown() * 100 / $total) : 0; 31 31 } 32 32 } trunk/lib/model/map/RelevancyMapBuilder.php
r4 r20 65 65 $tMap->setUseIdGenerator(false); 66 66 67 $tMap->addForeign Key('ANSWER_ID', 'AnswerId', 'int', CreoleTypes::INTEGER, 'ask_answer', 'ID', false, null);67 $tMap->addForeignPrimaryKey('ANSWER_ID', 'AnswerId', 'int' , CreoleTypes::INTEGER, 'ask_answer', 'ID', true, null); 68 68 69 $tMap->addForeign Key('USER_ID', 'UserId', 'int', CreoleTypes::INTEGER, 'ask_user', 'ID', false, null);69 $tMap->addForeignPrimaryKey('USER_ID', 'UserId', 'int' , CreoleTypes::INTEGER, 'ask_user', 'ID', true, null); 70 70 71 71 $tMap->addColumn('SCORE', 'Score', 'int', CreoleTypes::INTEGER, false); trunk/lib/model/om/BaseRelevancy.php
r16 r20 617 617 $criteria = new Criteria(RelevancyPeer::DATABASE_NAME); 618 618 619 $criteria->add(RelevancyPeer::ANSWER_ID, $this->answer_id); 620 $criteria->add(RelevancyPeer::USER_ID, $this->user_id); 619 621 620 622 return $criteria; … … 622 624 623 625 /** 624 * Returns NULL since this table doesn't have a primary key.625 * Th is method exists only for BC and is deprecated!626 * @return null626 * Returns the composite primary key for this object. 627 * The array elements will be in same order as specified in XML. 628 * @return array 627 629 */ 628 630 public function getPrimaryKey() 629 631 { 630 return null; 631 } 632 633 /** 634 * Dummy primary key setter. 635 * 636 * This function only exists to preserve backwards compatibility. It is no longer 637 * needed or required by the Persistent interface. It will be removed in next BC-breaking 638 * release of Propel. 639 * 640 * @deprecated 641 */ 642 public function setPrimaryKey($pk) 643 { 644 // do nothing, because this object doesn't have any primary keys 645 } 632 $pks = array(); 633 634 $pks[0] = $this->getAnswerId(); 635 636 $pks[1] = $this->getUserId(); 637 638 return $pks; 639 } 640 641 /** 642 * Set the [composite] primary key. 643 * 644 * @param array $keys The elements of the composite key (order must match the order in XML file). 645 * @return void 646 */ 647 public function setPrimaryKey($keys) 648 { 649 650 $this->setAnswerId($keys[0]); 651 652 $this->setUserId($keys[1]); 653 654 } 646 655 647 656 /** … … 658 667 { 659 668 660 $copyObj->setAnswerId($this->answer_id);661 662 $copyObj->setUserId($this->user_id);663 664 669 $copyObj->setScore($this->score); 665 670 … … 668 673 669 674 $copyObj->setNew(true); 675 676 $copyObj->setAnswerId(NULL); // this is a pkey column, so set to default value 677 678 $copyObj->setUserId(NULL); // this is a pkey column, so set to default value 670 679 671 680 } trunk/lib/model/om/BaseRelevancyPeer.php
r16 r20 181 181 } 182 182 183 const COUNT = 'COUNT( *)';184 const COUNT_DISTINCT = 'COUNT(DISTINCT *)';183 const COUNT = 'COUNT(ask_relevancy.ANSWER_ID)'; 184 const COUNT_DISTINCT = 'COUNT(DISTINCT ask_relevancy.ANSWER_ID)'; 185 185 186 186 /** … … 937 937 $criteria = clone $values; // rename for clarity 938 938 939 $comparison = $criteria->getComparison(RelevancyPeer::ANSWER_ID); 940 $selectCriteria->add(RelevancyPeer::ANSWER_ID, $criteria->remove(RelevancyPeer::ANSWER_ID), $comparison); 941 942 $comparison = $criteria->getComparison(RelevancyPeer::USER_ID); 943 $selectCriteria->add(RelevancyPeer::USER_ID, $criteria->remove(RelevancyPeer::USER_ID), $comparison); 944 939 945 } else { // $values is Relevancy object 940 946 $criteria = $values->buildCriteria(); // gets full criteria … … 993 999 } elseif ($values instanceof Relevancy) { 994 1000 995 $criteria = $values->build Criteria();1001 $criteria = $values->buildPkeyCriteria(); 996 1002 } else { 997 1003 // it must be the primary key … … 1009 1015 { 1010 1016 1011 } 1012 1017 $vals[0][] = $value[0]; 1018 $vals[1][] = $value[1]; 1019 } 1020 1021 $criteria->add(RelevancyPeer::ANSWER_ID, $vals[0], Criteria::IN); 1022 $criteria->add(RelevancyPeer::USER_ID, $vals[1], Criteria::IN); 1013 1023 } 1014 1024 … … 1069 1079 } 1070 1080 1081 /** 1082 * Retrieve object using using composite pkey values. 1083 * @param int $answer_id 1084 @param int $user_id 1085 1086 * @param Connection $con 1087 * @return Relevancy 1088 */ 1089 public static function retrieveByPK( $answer_id, $user_id, $con = null) { 1090 if ($con === null) { 1091 $con = Propel::getConnection(self::DATABASE_NAME); 1092 } 1093 $criteria = new Criteria(); 1094 $criteria->add(RelevancyPeer::ANSWER_ID, $answer_id); 1095 $criteria->add(RelevancyPeer::USER_ID, $user_id); 1096 $v = RelevancyPeer::doSelect($criteria, $con); 1097 return !empty($v) ? $v[0] : null; 1098 } 1071 1099 } // BaseRelevancyPeer 1072 1100 trunk/web/css/main.css
r16 r20 147 147 color: #f00; 148 148 } 149 150 div#indicator 151 { 152 position: absolute; 153 width: 100px; 154 height: 40px; 155 left: 10px; 156 top: 10px; 157 z-index: 900; 158 background: url(/images/indicator.gif) no-repeat 0 0; 159 }
