ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 7855


Ignore:
Timestamp:
Jul 29, 2008, 2:04:24 AM (13 years ago)
Author:
ebihara
Message:

#2860:フレンドリンク機能の追加

Location:
OpenPNE3/trunk
Files:
5 added
5 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/trunk/apps/pc_frontend/modules/friend/actions/actions.class.php

    r7853 r7855  
    2929  {
    3030    $id = $request->getParameter('id', $this->getUser()->getMemberId());
    31     if ($id == $this->getUser()->getMemberId()) {
    32       $this->redirect('member/home');
    33     }
     31    $this->redirectIf(($id == $this->getUser()->getMemberId()), 'member/home');
    3432
    3533    $this->member = MemberPeer::retrieveByPk($id);
     34    $this->isFriend = FriendPeer::isFriend($this->getUser()->getMemberId(), $id);
    3635
    3736    return sfView::SUCCESS;
    3837  }
     38
     39 /**
     40  * Executes link action
     41  *
     42  * @param sfRequest $request A request object
     43  */
     44  public function executeLink($request)
     45  {
     46    $id = $request->getParameter('id', $this->getUser()->getMemberId());
     47    $this->redirectIf(($id == $this->getUser()->getMemberId()), 'member/home');
     48    $this->redirectIf(FriendPeer::isFriend($this->getUser()->getMemberId(), $id), 'friend/home?id=' . $id);
     49
     50    FriendPeer::link($this->getUser()->getMemberId(), $id);
     51    $this->redirect('friend/home?id=' . $id);
     52  }
     53
     54 /**
     55  * Executes unlink action
     56  *
     57  * @param sfRequest $request A request object
     58  */
     59  public function executeUnlink($request)
     60  {
     61    $id = $request->getParameter('id', $this->getUser()->getMemberId());
     62    $this->redirectIf(($id == $this->getUser()->getMemberId()), 'member/home');
     63    $this->redirectUnless(FriendPeer::isFriend($this->getUser()->getMemberId(), $id), 'friend/home?id=' . $id);
     64
     65    FriendPeer::unlink($this->getUser()->getMemberId(), $id);
     66    $this->redirect('friend/home?id=' . $id);
     67  }
    3968}
  • OpenPNE3/trunk/apps/pc_frontend/modules/friend/templates/homeSuccess.php

    r7853 r7855  
    11<?php echo $member->getProfile('nickname') ?> さんのホームです。
     2<ul>
     3<?php if ($isFriend): ?>
     4<li><?php echo link_to('フレンドをやめる', 'friend/unlink?id=' . $member->getId()) ?></li>
     5<?php else: ?>
     6<li><?php echo link_to('フレンドになる', 'friend/link?id=' . $member->getId()) ?></li>
     7<?php endif; ?>
     8</ul>
  • OpenPNE3/trunk/config/schema.yml

    r7851 r7855  
    3939    profile_option_id: ~
    4040    value: { type: longvarchar }
     41
     42  friend:
     43    id: ~
     44    member_id_to: { type: integer, required: true, foreignTable: member, foreignReference: id, OnDelete: cascade }
     45    member_id_from: { type: integer, required: true, foreignTable: member, foreignReference: id, OnDelete: cascade }
     46    _uniques:
     47      member_id_to_from: [ member_id_to, member_id_from ]
     48      member_id_from_to: [ member_id_from, member_id_to ]
  • OpenPNE3/trunk/data/sql/lib.model.schema.sql

    r7851 r7855  
    133133)Type=InnoDB;
    134134
     135#-----------------------------------------------------------------------------
     136#-- friend
     137#-----------------------------------------------------------------------------
     138
     139DROP TABLE IF EXISTS `friend`;
     140
     141
     142CREATE TABLE `friend`
     143(
     144        `id` INTEGER  NOT NULL AUTO_INCREMENT,
     145        `member_id_to` INTEGER  NOT NULL,
     146        `member_id_from` INTEGER  NOT NULL,
     147        PRIMARY KEY (`id`),
     148        UNIQUE KEY `member_id_to_from` (`member_id_to`, `member_id_from`),
     149        UNIQUE KEY `member_id_from_to` (`member_id_from`, `member_id_to`),
     150        CONSTRAINT `friend_FK_1`
     151                FOREIGN KEY (`member_id_to`)
     152                REFERENCES `member` (`id`),
     153        CONSTRAINT `friend_FK_2`
     154                FOREIGN KEY (`member_id_from`)
     155                REFERENCES `member` (`id`)
     156)Type=InnoDB;
     157
    135158# This restores the fkey checks, after having unset them earlier
    136159SET FOREIGN_KEY_CHECKS = 1;
  • OpenPNE3/trunk/lib/model/om/BaseMember.php

    r7849 r7855  
    2929       
    3030        protected $lastMemberProfileCriteria = null;
     31
     32       
     33        protected $collFriendsRelatedByMemberIdTo;
     34
     35       
     36        protected $lastFriendRelatedByMemberIdToCriteria = null;
     37
     38       
     39        protected $collFriendsRelatedByMemberIdFrom;
     40
     41       
     42        protected $lastFriendRelatedByMemberIdFromCriteria = null;
    3143
    3244       
     
    261273                        }
    262274
     275                        if ($this->collFriendsRelatedByMemberIdTo !== null) {
     276                                foreach($this->collFriendsRelatedByMemberIdTo as $referrerFK) {
     277                                        if (!$referrerFK->isDeleted()) {
     278                                                $affectedRows += $referrerFK->save($con);
     279                                        }
     280                                }
     281                        }
     282
     283                        if ($this->collFriendsRelatedByMemberIdFrom !== null) {
     284                                foreach($this->collFriendsRelatedByMemberIdFrom as $referrerFK) {
     285                                        if (!$referrerFK->isDeleted()) {
     286                                                $affectedRows += $referrerFK->save($con);
     287                                        }
     288                                }
     289                        }
     290
    263291                        if ($this->collAuthenticationLoginIds !== null) {
    264292                                foreach($this->collAuthenticationLoginIds as $referrerFK) {
     
    312340                                if ($this->collMemberProfiles !== null) {
    313341                                        foreach($this->collMemberProfiles as $referrerFK) {
     342                                                if (!$referrerFK->validate($columns)) {
     343                                                        $failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());
     344                                                }
     345                                        }
     346                                }
     347
     348                                if ($this->collFriendsRelatedByMemberIdTo !== null) {
     349                                        foreach($this->collFriendsRelatedByMemberIdTo as $referrerFK) {
     350                                                if (!$referrerFK->validate($columns)) {
     351                                                        $failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());
     352                                                }
     353                                        }
     354                                }
     355
     356                                if ($this->collFriendsRelatedByMemberIdFrom !== null) {
     357                                        foreach($this->collFriendsRelatedByMemberIdFrom as $referrerFK) {
    314358                                                if (!$referrerFK->validate($columns)) {
    315359                                                        $failureMap = array_merge($failureMap, $referrerFK->getValidationFailures());
     
    463507                        }
    464508
     509                        foreach($this->getFriendsRelatedByMemberIdTo() as $relObj) {
     510                                $copyObj->addFriendRelatedByMemberIdTo($relObj->copy($deepCopy));
     511                        }
     512
     513                        foreach($this->getFriendsRelatedByMemberIdFrom() as $relObj) {
     514                                $copyObj->addFriendRelatedByMemberIdFrom($relObj->copy($deepCopy));
     515                        }
     516
    465517                        foreach($this->getAuthenticationLoginIds() as $relObj) {
    466518                                $copyObj->addAuthenticationLoginId($relObj->copy($deepCopy));
     
    629681
    630682       
     683        public function initFriendsRelatedByMemberIdTo()
     684        {
     685                if ($this->collFriendsRelatedByMemberIdTo === null) {
     686                        $this->collFriendsRelatedByMemberIdTo = array();
     687                }
     688        }
     689
     690       
     691        public function getFriendsRelatedByMemberIdTo($criteria = null, $con = null)
     692        {
     693                                if ($criteria === null) {
     694                        $criteria = new Criteria();
     695                }
     696                elseif ($criteria instanceof Criteria)
     697                {
     698                        $criteria = clone $criteria;
     699                }
     700
     701                if ($this->collFriendsRelatedByMemberIdTo === null) {
     702                        if ($this->isNew()) {
     703                           $this->collFriendsRelatedByMemberIdTo = array();
     704                        } else {
     705
     706                                $criteria->add(FriendPeer::MEMBER_ID_TO, $this->getId());
     707
     708                                FriendPeer::addSelectColumns($criteria);
     709                                $this->collFriendsRelatedByMemberIdTo = FriendPeer::doSelect($criteria, $con);
     710                        }
     711                } else {
     712                                                if (!$this->isNew()) {
     713                                                                                               
     714
     715                                $criteria->add(FriendPeer::MEMBER_ID_TO, $this->getId());
     716
     717                                FriendPeer::addSelectColumns($criteria);
     718                                if (!isset($this->lastFriendRelatedByMemberIdToCriteria) || !$this->lastFriendRelatedByMemberIdToCriteria->equals($criteria)) {
     719                                        $this->collFriendsRelatedByMemberIdTo = FriendPeer::doSelect($criteria, $con);
     720                                }
     721                        }
     722                }
     723                $this->lastFriendRelatedByMemberIdToCriteria = $criteria;
     724                return $this->collFriendsRelatedByMemberIdTo;
     725        }
     726
     727       
     728        public function countFriendsRelatedByMemberIdTo($criteria = null, $distinct = false, $con = null)
     729        {
     730                                if ($criteria === null) {
     731                        $criteria = new Criteria();
     732                }
     733                elseif ($criteria instanceof Criteria)
     734                {
     735                        $criteria = clone $criteria;
     736                }
     737
     738                $criteria->add(FriendPeer::MEMBER_ID_TO, $this->getId());
     739
     740                return FriendPeer::doCount($criteria, $distinct, $con);
     741        }
     742
     743       
     744        public function addFriendRelatedByMemberIdTo(Friend $l)
     745        {
     746                $this->collFriendsRelatedByMemberIdTo[] = $l;
     747                $l->setMemberRelatedByMemberIdTo($this);
     748        }
     749
     750       
     751        public function initFriendsRelatedByMemberIdFrom()
     752        {
     753                if ($this->collFriendsRelatedByMemberIdFrom === null) {
     754                        $this->collFriendsRelatedByMemberIdFrom = array();
     755                }
     756        }
     757
     758       
     759        public function getFriendsRelatedByMemberIdFrom($criteria = null, $con = null)
     760        {
     761                                if ($criteria === null) {
     762                        $criteria = new Criteria();
     763                }
     764                elseif ($criteria instanceof Criteria)
     765                {
     766                        $criteria = clone $criteria;
     767                }
     768
     769                if ($this->collFriendsRelatedByMemberIdFrom === null) {
     770                        if ($this->isNew()) {
     771                           $this->collFriendsRelatedByMemberIdFrom = array();
     772                        } else {
     773
     774                                $criteria->add(FriendPeer::MEMBER_ID_FROM, $this->getId());
     775
     776                                FriendPeer::addSelectColumns($criteria);
     777                                $this->collFriendsRelatedByMemberIdFrom = FriendPeer::doSelect($criteria, $con);
     778                        }
     779                } else {
     780                                                if (!$this->isNew()) {
     781                                                                                               
     782
     783                                $criteria->add(FriendPeer::MEMBER_ID_FROM, $this->getId());
     784
     785                                FriendPeer::addSelectColumns($criteria);
     786                                if (!isset($this->lastFriendRelatedByMemberIdFromCriteria) || !$this->lastFriendRelatedByMemberIdFromCriteria->equals($criteria)) {
     787                                        $this->collFriendsRelatedByMemberIdFrom = FriendPeer::doSelect($criteria, $con);
     788                                }
     789                        }
     790                }
     791                $this->lastFriendRelatedByMemberIdFromCriteria = $criteria;
     792                return $this->collFriendsRelatedByMemberIdFrom;
     793        }
     794
     795       
     796        public function countFriendsRelatedByMemberIdFrom($criteria = null, $distinct = false, $con = null)
     797        {
     798                                if ($criteria === null) {
     799                        $criteria = new Criteria();
     800                }
     801                elseif ($criteria instanceof Criteria)
     802                {
     803                        $criteria = clone $criteria;
     804                }
     805
     806                $criteria->add(FriendPeer::MEMBER_ID_FROM, $this->getId());
     807
     808                return FriendPeer::doCount($criteria, $distinct, $con);
     809        }
     810
     811       
     812        public function addFriendRelatedByMemberIdFrom(Friend $l)
     813        {
     814                $this->collFriendsRelatedByMemberIdFrom[] = $l;
     815                $l->setMemberRelatedByMemberIdFrom($this);
     816        }
     817
     818       
    631819        public function initAuthenticationLoginIds()
    632820        {
Note: See TracChangeset for help on using the changeset viewer.