public function actionChallenge() { if (isset($_GET['idTruth']) || isset($_GET['idDare'])) { $idType = isset($_GET['idDare']) ? 'idDare' : 'idTruth'; $modelTruthOrDare = isset($_GET['idDare']) ? new Dare() : new Truth(); $modelTruthOrDare->{$idType} = $_GET[$idType]; $challenges = Challenge::model()->with('truth', 'dare', 'userTo', "userTo.scoreTruth", "userTo.scoreDare")->findAllByAttributes(array($idType => $_GET[$idType], 'status' => 1)); $this->render('challenge', array('modelTruthOrDare' => $modelTruthOrDare, 'challenges' => $challenges, 'idType' => $idType)); } }
public function run() { //We check the level of the user before to allow him to see the content if (isset($this->model->idCategory) && isset($this->filterLevel) && $this->model->idCategory != '') { $levelCategory = Category::model()->findByPk($this->model->idCategory); if ($levelCategory->level > $this->filterLevel) { Yii::app()->user->setFlash('forbiddenLevel', 'Sorry, to have access to this category you need to register a coin which belongs to this category.'); } } //We get the generated criterias $criteria = $this->model->getCriteria(); //We set up the number of Challenge we want to display if necessary if (isset($this->model->limit)) { $criteria->limit = $this->model->limit; } //We choose the order of display $criteria->order = isset($this->model->order) && $this->model->order !== '' ? $this->model->order . " DESC " : " t.voteUp - t.voteDown DESC "; //Page manager $count = Challenge::model()->count($criteria); //Use the $this->limit in Pagination otherwise $pages->pageSize to $criteria overriding the $criteria->limit $pages = new CPagination(isset($this->model->limit) ? $this->model->limit : $count); $pages->pageSize = isset($this->model->limit) ? $this->model->limit : $this->itemsPerPage; $pages->applyLimit($criteria); //Get the datas $datas = Challenge::model()->findAll($criteria); //Manage favourites $modelUserList = new UserList(); $userLists = CHtml::listData(array(), 'idUserList', 'name'); if (!Yii::app()->user->isGuest) { $userLists = UserList::model()->findAllByAttributes(array('idUser' => Yii::app()->user->getId())); $userLists = CHtml::listData($userLists, 'idUserList', 'name'); } //Manage send Challenges $friends = CHtml::listData(array(), 'idUser', 'username'); if (!Yii::app()->user->isGuest) { $friends = CHtml::listData(Friend::getFriends(Yii::app()->user->getId()), 'idUser', 'username'); } $this->render('challengeDareList', array('datas' => $datas, 'pages' => $pages, 'userLists' => $userLists, 'friends' => $friends)); }
/** * Return CActiveRecord with Challenges * @return CActiveRecord */ public static function getChallenges($idUser, $idCategory = null, $idGender = null, $idType = null, $idStatus = null, $minDateChallenge = null, $idPrivateStatus = null, $idUserFrom = null) { $criteria = new CDbCriteria(); //Get users the current user added as Friends $criteria->condition = "t.idUserTo=:idUser AND t.status <> 2"; $criteria->params = array(':idUser' => $idUser); if ($idCategory !== '' && $idCategory !== null) { $criteria->addCondition("categoryTruth.idCategory = :idCategory OR categoryDare.idCategory = :idCategory"); $criteria->params[':idCategory'] = $idCategory; } if ($idGender !== '' && $idGender !== null) { $criteria->addCondition("userFrom.gender = :gender"); $criteria->params[':gender'] = $idGender; } if ($idType !== '' && $idType !== null) { $criteria->addCondition("t.id{$idType} IS NOT NULL"); } if ($idStatus !== '' && $idStatus !== null) { $criteria->addCondition("t.status = :idStatus"); $criteria->params[':idStatus'] = $idStatus; } if ($minDateChallenge !== '' && $minDateChallenge !== null) { $criteria->addCondition("IFNULL(t.finishDate,t.createDate) >= :minDateChallenge"); $criteria->params[':minDateChallenge'] = $minDateChallenge; } if ($idPrivateStatus !== '' && $idPrivateStatus !== null) { $criteria->addCondition("t.private = :idPrivateStatus"); $criteria->params[':idPrivateStatus'] = $idPrivateStatus; } if ($idUserFrom !== '' && $idUserFrom !== null) { $criteria->addCondition("t.idUserFrom = :idUserFrom"); $criteria->params[':idUserFrom'] = $idUserFrom; } $challenges = Challenge::model()->with('truth', 'dare', 'truth.category', 'dare.category', 'userFrom', 'levelUserFrom')->findAll($criteria); return $challenges; }
public function actionDeleteChallenge() { if (isset($_POST['idChallenge'])) { $challenge = Challenge::model()->findByPk($_POST['idChallenge']); if ($challenge->idUserTo == Yii::app()->user->getId()) { //We change the status to decline $challenge->status = 2; $challenge->save(); //We delete the associated votes $votingDetails = VotingDetail::model()->deleteAllByAttributes(array('idChallenge' => $_POST['idChallenge'])); echo "SUCCESS"; } } }
/** * Returns the Truth score of the User $idUser related to the vote of the Challenges he/she successfuly realized * @return array() */ public function getScoreVoteChallenges($type) { //Prepare Query $criteria = new CDbCriteria(); $criteria->group = " t.idUserTo "; $criteria->select = " SUM(CASE WHEN t.finishDate >= :minDateSubmitWeek THEN t.voteUp - t.voteDown END) AS scoreWeek, "; $criteria->select .= " SUM(CASE WHEN t.finishDate >= :minDateSubmitMonth THEN t.voteUp - t.voteDown END) AS scoreMonth, "; $criteria->select .= " SUM(CASE WHEN t.finishDate >= :minDateSubmitYear THEN t.voteUp - t.voteDown END) AS scoreYear, "; $criteria->select .= " SUM(t.voteUp - t.voteDown) AS score "; $criteria->addCondition(' t.status = 1 '); $criteria->addCondition(' t.idUserTo = :idUser '); if ($type !== null) { $criteria->addCondition(" t.id{$type} IS NOT NULL "); } //Bind Parameters $criteria->params = array(':idUser' => $this->idUser); $criteria->params[':minDateSubmitWeek'] = MyFunctions::getFirstDayWeek(); $criteria->params[':minDateSubmitMonth'] = MyFunctions::getFirstDayMonth(); $criteria->params[':minDateSubmitYear'] = MyFunctions::getFirstDayYear(); //Execute Query $result = Challenge::model()->find($criteria); //Fetch results $scoreTotal = $result['score'] === null ? 0 : $result->score; $scoreWeek = $result['scoreWeek'] === null ? 0 : $result->scoreWeek; $scoreMonth = $result['scoreMonth'] === null ? 0 : $result->scoreMonth; $scoreYear = $result['scoreYear'] === null ? 0 : $result->scoreYear; return array('total' => $scoreTotal, 'week' => $scoreWeek, 'month' => $scoreMonth, 'year' => $scoreYear); }
public function run() { $wallOwner = User::model()->with('scoreTruth', 'scoreDare')->findByPk($this->idWallOwner); //To display notifications from friends if ($this->withFriendsInformations === 1) { $friends = $wallOwner->getIdFriends(); $friends[] = $this->idWallOwner; } //Add message to the Wall $model = new UserWall(); if (isset($_POST['Userwall'])) { $model->attributes = $_POST['Userwall']; $model->idUserFrom = $this->idCurrentUser; $model->idUserTo = $this->idWallOwner; $model->createDate = date('Y-m-d, H:i:s'); $model->save(); $model->content = ''; } //Initialiation of the array $wall = array(); $i = 0; //Get Wall Messages and add them to the Wall array() if ($this->withWallMessages == 1) { $criteria = new CDbCriteria(); $criteria->addCondition('t.idUserTo = :idUser'); $criteria->params = array(':idUser' => $this->idWallOwner); $criteria->order = 'createDate DESC'; $wallComments = UserWall::model()->with('userFrom', 'userFrom.scoreTruth', 'userFrom.scoreDare')->findAll($criteria); foreach ($wallComments as $row) { $wall[$i]['type'] = "WallMessage"; $wall[$i]['id'] = $row->idUserWall; $wall[$i]['content'] = $row->content; $wall[$i]['createDate'] = $row->createDate; $wall[$i]['userPicture'] = $row->userFrom->profilePicture . '_mini' . $row->userFrom->profilePictureExtension; $wall[$i]['category'] = null; $wall[$i]['vote'] = null; $wall[$i]['nbFavourite'] = null; $wall[$i]['nbComment'] = null; $wall[$i]['idDisplayUser'] = $row->userFrom->idUser; $wall[$i]['displayUsername'] = $row->userFrom->username; $wall[$i]['pictureChallengeDareMini'] = null; $wall[$i]['pictureChallengeDare'] = null; $wall[$i]['challengeTruthOrCommentDare'] = null; $wall[$i]['rankTruth'] = MyFunctions::getTruthRankName($row->userFrom->scoreTruth->score); $wall[$i]['rankDare'] = MyFunctions::getDareRankName($row->userFrom->scoreDare->score); $i++; } } //Get Challenges Notifications and add them to the Wall array() $criteria = new CDbCriteria(); $criteria->addCondition('t.status = 1 AND (t.private = 0 OR (t.idUserFrom = :idCurrentUser OR t.idUserTo = :idCurrentUser))'); $criteria->params = array(':idCurrentUser' => $this->idCurrentUser); if ($this->withFriendsInformations === 1) { $criteria->addInCondition('t.idUserTo', $friends); } else { $criteria->addCondition('t.idUserTo = :idUser'); $criteria->params[':idUser'] = $this->idWallOwner; } if (isset($this->filterLevel)) { $criteria->addCondition("(categoryTruth.level IS NOT NULL AND categoryTruth.level <= {$this->filterLevel}) OR (categoryDare.level IS NOT NULL AND categoryDare.level <= {$this->filterLevel})"); } $challenges = Challenge::model()->with('userTo', 'truth', 'dare', 'truth.category', 'dare.category', 'userTo.scoreTruth', 'userTo.scoreDare')->findAll($criteria); foreach ($challenges as $row) { $wall[$i]['type'] = $row->idTruth === null ? "ChallengeDare" : "ChallengeTruth"; $wall[$i]['id'] = $row->idChallenge; $wall[$i]['content'] = isset($row->truth) ? $row->answer : $row->dare->dare; $wall[$i]['createDate'] = $row->createDate; $wall[$i]['userPicture'] = $row->userTo->profilePicture . '_mini' . $row->userTo->profilePictureExtension; $wall[$i]['category'] = isset($row->truth) ? $row->truth->category->category : $row->dare->category->category; $wall[$i]['vote'] = $row->voteUp - $row->voteDown; $wall[$i]['nbFavourite'] = 0; $wall[$i]['nbComment'] = 0; $wall[$i]['idDisplayUser'] = $row->userTo->idUser; $wall[$i]['displayUsername'] = $row->userTo->username; $wall[$i]['pictureChallengeDareMini'] = $row->pictureName . "_mini" . $row->pictureExtension; $wall[$i]['pictureChallengeDare'] = $row->pictureName . "_original" . $row->pictureExtension; $wall[$i]['challengeTruthOrCommentDare'] = isset($row->truth) ? $row->truth->truth : $row->answer; $wall[$i]['rankTruth'] = MyFunctions::getTruthRankName($row->userTo->scoreTruth->score); $wall[$i]['rankDare'] = MyFunctions::getDareRankName($row->userTo->scoreDare->score); $i++; } //Get Truths and add them to the Wall array() $truth = new Truth(); if (isset($this->filterLevel)) { $truth->levelMax = $this->filterLevel; } $criteria = $truth->getCriteria(); if ($this->withFriendsInformations === 1) { $criteria->addInCondition('t.idUser', $friends); } else { $criteria->addCondition('t.idUser = :idUser'); $criteria->params[':idUser'] = $this->idWallOwner; } $truths = Truth::model()->notAnonymous()->findAll($criteria); foreach ($truths as $row) { $wall[$i]['type'] = "Truth"; $wall[$i]['id'] = $row->idTruth; $wall[$i]['content'] = $row->truth; $wall[$i]['createDate'] = $row->dateSubmit; $wall[$i]['userPicture'] = $row->user->profilePicture . '_mini' . $row->user->profilePictureExtension; $wall[$i]['category'] = $row->category->category; $wall[$i]['vote'] = $row->voteUp - $row->voteDown; $wall[$i]['nbFavourite'] = $row->nbFavourite; $wall[$i]['nbComment'] = $row->nbComment; $wall[$i]['idDisplayUser'] = $row->user->idUser; $wall[$i]['displayUsername'] = $row->user->username; $wall[$i]['pictureChallengeDareMini'] = null; $wall[$i]['pictureChallengeDare'] = null; $wall[$i]['challengeTruthOrCommentDare'] = null; $wall[$i]['rankTruth'] = MyFunctions::getTruthRankName($row->user->scoreTruth->score); $wall[$i]['rankDare'] = MyFunctions::getDareRankName($row->user->scoreDare->score); $i++; } //Get Dares and add them to the Wall array() $dare = new Dare(); if (isset($this->filterLevel)) { $dare->levelMax = $this->filterLevel; } $criteria = $dare->getCriteria(); if ($this->withFriendsInformations === 1) { $criteria->addInCondition('t.idUser', $friends); } else { $criteria->addCondition('t.idUser = :idUser'); $criteria->params[':idUser'] = $this->idWallOwner; } $dares = Dare::model()->notAnonymous()->findAll($criteria); foreach ($dares as $row) { $wall[$i]['type'] = "Dare"; $wall[$i]['id'] = $row->idDare; $wall[$i]['content'] = $row->dare; $wall[$i]['createDate'] = $row->dateSubmit; $wall[$i]['userPicture'] = $row->user->profilePicture . '_mini' . $row->user->profilePictureExtension; $wall[$i]['category'] = $row->category->category; $wall[$i]['vote'] = $row->voteUp - $row->voteDown; $wall[$i]['nbFavourite'] = $row->nbFavourite; $wall[$i]['nbComment'] = $row->nbComment; $wall[$i]['idDisplayUser'] = $row->user->idUser; $wall[$i]['displayUsername'] = $row->user->username; $wall[$i]['pictureChallengeDareMini'] = null; $wall[$i]['pictureChallengeDare'] = null; $wall[$i]['challengeTruthOrCommentDare'] = null; $wall[$i]['rankTruth'] = MyFunctions::getTruthRankName($row->user->scoreTruth->score); $wall[$i]['rankDare'] = MyFunctions::getDareRankName($row->user->scoreDare->score); $i++; } //Get Ranks Upgrades of the user $criteria = new CDbCriteria(); if ($this->withFriendsInformations === 1) { $criteria->addInCondition('t.idUser', $friends); } else { $criteria->addCondition('t.idUser = :idUser'); $criteria->params = array(':idUser' => $this->idWallOwner); } $userUpgrades = Userrank::model()->with('rank')->findAll($criteria); foreach ($userUpgrades as $row) { $wall[$i]['type'] = "RankUpgrade"; $wall[$i]['id'] = null; $wall[$i]['content'] = "I just got upgraded to <b>" . $row->rank->name . "</b>!"; $wall[$i]['createDate'] = $row->createDate; $wall[$i]['userPicture'] = $row->user->profilePicture . '_mini' . $row->user->profilePictureExtension; $wall[$i]['category'] = null; $wall[$i]['vote'] = null; $wall[$i]['nbFavourite'] = null; $wall[$i]['nbComment'] = null; $wall[$i]['idDisplayUser'] = $row->user->idUser; $wall[$i]['displayUsername'] = $row->user->username; $wall[$i]['pictureChallengeDareMini'] = null; $wall[$i]['pictureChallengeDare'] = null; $wall[$i]['challengeTruth'] = null; $wall[$i]['rankTruth'] = MyFunctions::getTruthRankName($row->user->scoreTruth->score); $wall[$i]['rankDare'] = MyFunctions::getDareRankName($row->user->scoreDare->score); $i++; } //Manage favourites $modelUserList = new UserList(); $userLists = CHtml::listData(array(), 'idUserList', 'name'); if (!Yii::app()->user->isGuest) { $userLists = UserList::model()->findAllByAttributes(array('idUser' => $this->idCurrentUser)); $userLists = CHtml::listData($userLists, 'idUserList', 'name'); } //Manage send Challenges $friends = CHtml::listData(array(), 'idUser', 'username'); if (!Yii::app()->user->isGuest) { $friends = CHtml::listData(Friend::getFriends(Yii::app()->user->getId()), 'idUser', 'username'); } //Order the Wall array() by createDate DESC $wall = MyFunctions::arraySort($wall, 'createDate', 'DESC'); $this->render('userWallWidget', array('model' => $model, 'wall' => $wall, 'userLists' => $userLists, 'friends' => $friends)); }
public function actionVoteChallenge() { if (isset($_POST['idChallenge']) && isset($_POST['vote'])) { if (!VotingDetail::model()->exists("idUser = :idUser AND idChallenge = :idChallenge", array(':idUser' => Yii::app()->user->getId(), ":idChallenge" => $_POST["idChallenge"]))) { $model = Challenge::model()->findByPk($_POST["idChallenge"]); $vote = $model->addVote(Yii::app()->user->getId(), $_POST['vote']); echo $vote > 0 ? "+{$vote}" : $vote; } else { echo "Already Voted!"; } return; } return "ERROR"; }