Changeset 20

Show
Ignore:
Timestamp:
12/07/05 11:31:28 (3 years ago)
Author:
fabien
Message:

day 8 modifications

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/config/schema.xml

    r16 r20  
    5555 
    5656   <table name="ask_relevancy" phpName="Relevancy"> 
    57      <column name="answer_id" type="integer" /> 
     57     <column name="answer_id" type="integer" primaryKey="true" /> 
    5858     <foreign-key foreignTable="ask_answer"> 
    5959       <reference local="answer_id" foreign="id"/> 
    6060     </foreign-key> 
    61      <column name="user_id" type="integer" /> 
     61     <column name="user_id" type="integer" primaryKey="true" /> 
    6262     <foreign-key foreignTable="ask_user"> 
    6363       <reference local="user_id" foreign="id"/> 
  • trunk/data/sql/schema.sql

    r16 r20  
    9191 
    9292CREATE TABLE `ask_relevancy`( 
    93     `answer_id` INTEGER ,  
    94     `user_id` INTEGER ,  
     93    `answer_id` INTEGER NOT NULL ,  
     94    `user_id` INTEGER NOT NULL ,  
    9595    `score` INTEGER ,  
    9696    `created_at` DATETIME ,   
    97     INDEX `ask_relevancy_FI_1` (`answer_id`),  
     97    PRIMARY KEY(`answer_id`,`user_id`),  
    9898    CONSTRAINT `ask_relevancy_FK_1`  
    9999      FOREIGN KEY (`answer_id`) 
  • trunk/frontend/config/view.yml

    r18 r20  
    1212  stylesheets:    [main, layout] 
    1313 
    14   javascripts:    [
     14  javascripts:    [sf/js/prototype
    1515 
    1616  has_layout:     on 
  • trunk/frontend/lib/helper/AnswerHelper.php

    r14 r20  
    66} 
    77 
     8function link_to_user_relevancy_up($user, $answer) 
     9{ 
     10  return link_to_user_relevancy('up', $user, $answer); 
     11} 
     12 
     13function link_to_user_relevancy_down($user, $answer) 
     14{ 
     15  return link_to_user_relevancy('down', $user, $answer); 
     16} 
     17 
     18function 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 
    847?> 
  • trunk/frontend/modules/answer/templates/_list.php

    r18 r20  
    44<?php foreach ($answer_pager->getResults() as $answer): ?> 
    55  <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> 
    79    posted by <?php echo $answer->getUser() ?> 
    810    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() ?> 
    35</div> 
     6 
     7<?php echo link_to_user_interested($user, $question) ?> 
  • trunk/frontend/modules/question/templates/_question_list.php

    r14 r20  
    22 
    33<?php foreach($question_pager->getResults() as $question): ?> 
    4   <div class="interested_block"
     4  <div class="interested_block" id="block_<?php echo $question->getId() ?>"
    55    <?php echo include_partial('interested_user', array('question' => $question)) ?> 
    66  </div> 
  • trunk/frontend/modules/user/actions/actions.class.php

    r18 r20  
    1717 
    1818    $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(); 
    1946  } 
    2047 
  • trunk/frontend/templates/layout.php

    r18 r20  
    1616<body> 
    1717 
     18  <div id="indicator" style="display: none"></div> 
     19 
    1820  <div id="header"> 
    1921    <ul> 
     
    2729    </ul> 
    2830    <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> 
    2944  </div> 
    3045 
  • trunk/lib/model/Answer.php

    r12 r20  
    2121    $total = $this->getRelevancyUp() + $this->getRelevancyDown(); 
    2222 
    23     return $total ? sprintf('%02.0f', $this->getRelevancyUp() * 100 / $total) : 0; 
     23    return $total ? sprintf('%.0f', $this->getRelevancyUp() * 100 / $total) : 0; 
    2424  } 
    2525 
     
    2828    $total = $this->getRelevancyUp() + $this->getRelevancyDown(); 
    2929 
    30     return $total ? sprintf('%02.0f', $this->getRelevancyDown() * 100 / $total) : 0; 
     30    return $total ? sprintf('%.0f', $this->getRelevancyDown() * 100 / $total) : 0; 
    3131  } 
    3232} 
  • trunk/lib/model/map/RelevancyMapBuilder.php

    r4 r20  
    6565        $tMap->setUseIdGenerator(false); 
    6666 
    67         $tMap->addForeignKey('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); 
    6868 
    69         $tMap->addForeignKey('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); 
    7070 
    7171        $tMap->addColumn('SCORE', 'Score', 'int', CreoleTypes::INTEGER, false); 
  • trunk/lib/model/om/BaseRelevancy.php

    r16 r20  
    617617        $criteria = new Criteria(RelevancyPeer::DATABASE_NAME); 
    618618 
     619        $criteria->add(RelevancyPeer::ANSWER_ID, $this->answer_id); 
     620        $criteria->add(RelevancyPeer::USER_ID, $this->user_id); 
    619621 
    620622        return $criteria; 
     
    622624 
    623625    /** 
    624      * Returns NULL since this table doesn't have a primary key
    625      * This method exists only for BC and is deprecated! 
    626      * @return null 
     626     * Returns the composite primary key for this object
     627     * The array elements will be in same order as specified in XML. 
     628     * @return array 
    627629     */ 
    628630    public function getPrimaryKey() 
    629631    { 
    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    } 
    646655 
    647656    /** 
     
    658667    { 
    659668 
    660         $copyObj->setAnswerId($this->answer_id); 
    661  
    662         $copyObj->setUserId($this->user_id); 
    663  
    664669        $copyObj->setScore($this->score); 
    665670 
     
    668673 
    669674        $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 
    670679 
    671680    } 
  • trunk/lib/model/om/BaseRelevancyPeer.php

    r16 r20  
    181181    } 
    182182 
    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)'; 
    185185 
    186186    /** 
     
    937937            $criteria = clone $values; // rename for clarity 
    938938 
     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 
    939945        } else { // $values is Relevancy object 
    940946            $criteria = $values->buildCriteria(); // gets full criteria 
     
    993999        } elseif ($values instanceof Relevancy) { 
    9941000 
    995             $criteria = $values->buildCriteria(); 
     1001            $criteria = $values->buildPkeyCriteria(); 
    9961002        } else { 
    9971003            // it must be the primary key 
     
    10091015            { 
    10101016 
    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); 
    10131023        } 
    10141024 
     
    10691079    } 
    10701080 
     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    } 
    10711099} // BaseRelevancyPeer 
    10721100 
  • trunk/web/css/main.css

    r16 r20  
    147147  color: #f00; 
    148148} 
     149 
     150div#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}