These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | |||
4 | |||
5 | View Code Duplication | class PageRaterExtension_Controller extends Extension |
|
0 ignored issues
–
show
|
|||
6 | { |
||
7 | |||
8 | |||
9 | /** |
||
10 | * add the default rating to each page ... |
||
11 | * @var boolean |
||
12 | */ |
||
13 | private static $items_per_page = 8; |
||
14 | |||
15 | /** |
||
16 | * @var string |
||
17 | */ |
||
18 | private static $field_title = "Click on any star to rate:"; |
||
19 | |||
20 | /** |
||
21 | * @var string |
||
22 | */ |
||
23 | private static $field_right_title = "On a scale from 1 to 5, with 5 being the best"; |
||
24 | |||
25 | /** |
||
26 | * @var boolean |
||
27 | */ |
||
28 | private static $show_average_rating_in_rating_field = false; |
||
29 | |||
30 | /** |
||
31 | * @var boolean |
||
32 | */ |
||
33 | private static $only_show_approved = false; |
||
34 | |||
35 | private static $allowed_actions = array( |
||
36 | "PageRatingForm", |
||
37 | "rateagain", |
||
38 | "dopagerating", |
||
39 | "removedefaultpageratings", |
||
40 | "removeallpageratings" |
||
41 | ); |
||
42 | |||
43 | /** |
||
44 | * action to allow use to rate again... |
||
45 | */ |
||
46 | public function rateagain($request) |
||
47 | { |
||
48 | $id = intval(Session::get('PageRated'.$this->owner->dataRecord->ID))-0; |
||
49 | $pageRating = PageRating::get()->byID($id); |
||
50 | if ($pageRating) { |
||
51 | $pageRating->delete(); |
||
52 | } |
||
53 | Session::set('PageRated'.$this->owner->dataRecord->ID, false); |
||
54 | Session::clear('PageRated'.$this->owner->dataRecord->ID); |
||
55 | return $this->owner->redirect($this->owner->Link()); |
||
56 | } |
||
57 | |||
58 | /** |
||
59 | * @return Form |
||
60 | */ |
||
61 | public function PageRatingForm() |
||
62 | { |
||
63 | Requirements::themedCSS('PageRater', "pagerater"); |
||
64 | if ($this->owner->PageHasBeenRatedByUser()) { |
||
65 | $ratingField = LiteralField::create("RatingFor".$this->owner->dataRecord->ID, $this->owner->renderWith("PageRaterAjaxReturn")); |
||
66 | $actions = FieldList::create(); |
||
67 | $requiredFields = null; |
||
68 | } else { |
||
69 | if (Config::inst()->get("PageRaterExtension_Controller", "show_average_rating_in_rating_field")) { |
||
70 | $defaultStart = $this->owner->getStarRating(); |
||
71 | } else { |
||
72 | $defaultStart = 0; |
||
73 | } |
||
74 | $ratingField = PageRaterStarField::create( |
||
75 | 'RatingFor'.$this->owner->dataRecord->ID, |
||
76 | Config::inst()->get("PageRaterExtension_Controller", "field_title"), |
||
77 | $defaultStart, |
||
78 | PageRating::get_number_of_stars() |
||
79 | ); |
||
80 | $ratingField->setRightTitle(Config::inst()->get("PageRaterExtension_Controller", "field_right_title")); |
||
81 | $requiredFields = RequiredFields::create($ratingField->getRequiredFields()); |
||
82 | $actions = FieldList::create(FormAction::create('dopagerating', 'Submit')); |
||
83 | } |
||
84 | $fields = FieldList::create( |
||
85 | $ratingField, |
||
86 | HiddenField::create('ParentID', "ParentID", $this->owner->dataRecord->ID) |
||
87 | ); |
||
88 | |||
89 | return Form::create($this->owner, 'PageRatingForm', $fields, $actions, $requiredFields); |
||
90 | } |
||
91 | |||
92 | /** |
||
93 | * action Page Rating Form |
||
94 | */ |
||
95 | public function dopagerating($data, $form) |
||
96 | { |
||
97 | $id = $this->owner->dataRecord->ID; |
||
98 | $fieldName = "RatingFor".$id; |
||
99 | $data = Convert::raw2sql($data); |
||
100 | $pageRating = PageRating::create(); |
||
101 | $form->saveInto($pageRating); |
||
102 | $pageRating->ParentID = $this->owner->dataRecord->ID; |
||
103 | if (isset($data[$fieldName])) { |
||
104 | $pageRating->Rating = floatval($data[$fieldName]); |
||
105 | } |
||
106 | if (isset($data[$fieldName."_Comment"])) { |
||
107 | $pageRating->Comment = Convert::raw2sql($data[$fieldName."_Comment"]); |
||
108 | } |
||
109 | if (isset($data[$fieldName."_Name"])) { |
||
110 | $pageRating->Name = Convert::raw2sql($data[$fieldName."_Name"]); |
||
111 | } |
||
112 | if (isset($data[$fieldName."_Title"])) { |
||
113 | $pageRating->Title = Convert::raw2sql($data[$fieldName."_Title"]); |
||
114 | } |
||
115 | $pageRating->write(); |
||
116 | Session::set('PageRated'.$this->owner->dataRecord->ID, $pageRating->ID); |
||
117 | if (Director::is_ajax()) { |
||
118 | return $this->owner->renderWith("PageRaterAjaxReturn"); |
||
119 | } else { |
||
120 | $this->owner->redirectBack(); |
||
121 | } |
||
122 | } |
||
123 | |||
124 | |||
125 | public function removedefaultpageratings() |
||
126 | { |
||
127 | if (Permission::check("ADMIN")) { |
||
128 | DB::query("DELETE FROM PageRating WHERE IsDefault = 1;"); |
||
129 | debug::show("removed all default ratings for all pages"); |
||
130 | } else { |
||
131 | Security::permissionFailure($this->owner, _t('Security.PERMFAILURE', ' This page is secured and you need administrator rights to access it. Enter your credentials below and we will send you right along.')); |
||
132 | } |
||
133 | } |
||
134 | |||
135 | public function removeallpageratings() |
||
136 | { |
||
137 | if (Permission::check("ADMIN")) { |
||
138 | DB::query("DELETE FROM PageRating;"); |
||
139 | debug::show("removed all ratings for all pages"); |
||
140 | } else { |
||
141 | Security::permissionFailure($this->owner, _t('Security.PERMFAILURE', ' This page is secured and you need administrator rights to access it. Enter your credentials below and we will send you right along.')); |
||
142 | } |
||
143 | } |
||
144 | |||
145 | |||
146 | |||
147 | |||
148 | |||
149 | /** |
||
150 | * list of all rated pages ... |
||
151 | * @return ArrayList |
||
152 | */ |
||
153 | public function PageRaterListOfAllForPage($paginated = false) |
||
154 | { |
||
155 | if ($this->owner->onlyShowApprovedPageRatings()) { |
||
156 | $list = $this->owner->turnPageRaterSQLIntoArrayList( |
||
157 | $this->owner->PageRatings()->filter(array("IsApproved" => 1)), |
||
158 | "PageRaterListOfAllForPage" |
||
159 | ); |
||
160 | } else { |
||
161 | $list = $this->owner->turnPageRaterSQLIntoArrayList( |
||
162 | $this->owner->PageRatings(), |
||
163 | "PageRaterListOfAllForPage" |
||
164 | ); |
||
165 | } |
||
166 | if ($paginated) { |
||
167 | $limit = Config::inst()->get('PageRaterExtension_Controller', 'items_per_page'); |
||
168 | if ($limit) { |
||
169 | $list = PaginatedList::create($list, $this->owner->getRequest()); |
||
170 | $list->setPageLength($limit); |
||
171 | } |
||
172 | } |
||
173 | return $list; |
||
174 | } |
||
175 | |||
176 | |||
177 | public function PageRaterListAll() |
||
178 | { |
||
179 | $sqlQuery = new SQLQuery(); |
||
180 | $sqlQuery->setSelect("\"PageRating\".\"Rating\" AS RatingAverage, \"PageRating\".\"ParentID\""); |
||
181 | if ($this->owner->onlyShowApprovedPageRatings()) { |
||
182 | $sqlQuery->setWhere("\"PageRating\".\"IsApproved\" = 1"); |
||
183 | } |
||
184 | $sqlQuery->setFrom(" \"PageRating\""); |
||
185 | $sqlQuery->addInnerJoin("SiteTree", " \"PageRating\".\"ParentID\" = \"SiteTree\".\"ID\""); |
||
186 | $sqlQuery->setOrderBy("RatingAverage DESC"); |
||
187 | $sqlQuery->setGroupby("\"SiteTree\".\"ParentID\""); |
||
188 | return $this->owner->turnPageRaterSQLIntoArrayList($sqlQuery, "PageRaterList"); |
||
189 | } |
||
190 | |||
191 | /** |
||
192 | * @return boolean |
||
193 | */ |
||
194 | public function PageHasBeenRatedByUser() |
||
195 | { |
||
196 | return Session::get('PageRated'.$this->owner->ID) ? true : false; |
||
197 | } |
||
198 | } |
||
199 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.