Gentics Portal.Node PHP API
 All Classes Namespaces Functions Variables Pages
LikeController.php
1 <?php
2 /**
3  * Gentics Portal.Node PHP
4  * Author & Copyright (c) by Gentics Software GmbH
5  * sales@gentics.com
6  * http://www.gentics.com
7  * Licenses can be found in the LICENSE.txt file in the root-folder of this installation
8  * You must not use this software without a valid license agreement.
9  *
10  * Comment controller class file.
11  *
12  * @author Vitalii Kovalchuk <vitaly.kovalchuk@oberig.com>
13  */
14 
15 /**
16  * Comment controller class
17  *
18  * @author Vitalii Kovalchuk <vitaly.kovalchuk@oberig.com>
19  *
20  */
22 {
23  /**
24  * default action used to like or unlike content
25  *
26  * @return bool
27  */
28  public function actionIndex()
29  {
30  $contentId = Yii::app()->request->getPost('contentId', 0);
31 
32  if (Yii::app()->user->isGuest || $contentId<=0) {
33  return false;
34  }
35 
36  $model = Like::model()->findByAttributes(array('content_id'=>$contentId, 'user_id'=>Yii::app()->user->id));
37 
38  if ($model) {
39 
40  $model->delete();
41 
42  $result['caption'] = '<span>' . LikeModule::t('Like') . '</span>';
43  } else {
44  /* user have not liked this content so make him like it */
45 
46  $model = new Like();
47 
48  $model->content_id = $contentId;
49  $model->user_id = Yii::app()->user->id;
50  $model->createdate = date('Y-m-d H:i:s');
51  $model->save();
52 
53  $result['caption'] = '<span>' . LikeModule::t('Unlike') . '</span>';
54  }
55 
56  /* formatting result array */
57  $result = array(
58  'contentId' => $model->content_id,
59  'likesQty' => $model->getLikesQty(),
60  'caption' => $result['caption'],
61  );
62 
63  /* set likes qty limitations */
64  $model->lastLikesQty = Yii::app()->getModule('like')->lastLikesQty;
65  $model->topLikesQty = Yii::app()->getModule('like')->topLikesQty;
66 
67  /* get top and last likes depending on config set above */
68  $likes = $model->getLikes();
69 
70  $result['topLikes'] = array();
71  if ($model->topLikesQty > 0 && count($likes) > 0) {
72  for ($i = 0; $i < $model->topLikesQty && $i < count($likes); $i++) {
73  if ($likes[$i]->profile->user_id==Yii::app()->user->id) {
74  $result['topLikes'][] = LikeModule::t('You');
75  } else {
76  if (trim($likes[$i]->profile->firstname)!='' || trim($likes[$i]->profile->lastname)!='') {
77  $result['topLikes'][] = $likes[$i]->profile->firstname.' '.$likes[$i]->profile->lastname;
78  } else {
79  $result['topLikes'][] = LikeModule::t('Noname');
80  }
81  }
82  }
83 
84  if (count($likes) > $model->topLikesQty) {
85  $result['andOthers'] = LikeModule::t('and').' '.($result['likesQty'] - $model->topLikesQty).' '.LikeModule::t('others like this');
86  }
87  }
88 
89  $result['lastLikes'] = array();
90  if ($model->lastLikesQty > 0 && (count($likes) - $model->topLikesQty) > 0) {
91  for ($i = $model->topLikesQty; $i < ($model->topLikesQty + $model->lastLikesQty) && $i < count($likes); $i++) {
92  if ($likes[$i]->profile->user_id==Yii::app()->user->id) {
93  $result['lastLikes'][] = LikeModule::t('You');
94  } else {
95  if (trim($likes[$i]->profile->firstname)!='' || trim($likes[$i]->profile->lastname)!='') {
96  $result['lastLikes'][] = $likes[$i]->profile->firstname.' '.$likes[$i]->profile->lastname;
97  } else {
98  $result['lastLikes'][] = LikeModule::t('Noname');
99  }
100  }
101  }
102 
103  if ($result['likesQty'] > count($likes)) {
104  $result['lastLikes'][] = LikeModule::t('And others...');
105  }
106  }
107 
108  echo json_encode($result);
109  }
110 
111  /**
112  * Intermidiate action. Used for saving $return_url in session to return back after log in.
113  *
114  * @param string $return_url - return url
115  *
116  * @return void
117  */
118  public function actionLogin($return_url)
119  {
120  Yii::app()->user->setReturnUrl($return_url);
121  $this->redirect(Yii::app()->getModule('like')->loginUrl);
122  }
123 }