Rev 97 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
class block_cesa_course_rating extends block_base {
public function init() {
$this->title = get_string('pluginname', 'block_cesa_course_rating');
}
public function applicable_formats() {
return [
'all' => false,
'my' => false,
'admin' => false,
'course' => false,
'course-view' => true,
'enrol' => true,
];
}
function specialization() {
global $CFG, $DB;
if (empty($this->config)) {
$this->instance->defaultregion = 'below-content';
$this->instance->region = 'below-content';
$DB->update_record('block_instances', $this->instance);
$this->config->title = 'Students feedback';
}
}
function instance_allow_multiple() {
return false;
}
public function html_attributes() {
global $CFG;
$attributes = parent::html_attributes();
/*
$ccn_mt = '';
$ccn_mb = '';
$ccn_pt = '';
$ccn_pb = '';
$ccn_css_class = '';
if(!empty($this->config->ccn_margin_top)){
if($this->config->ccn_margin_top == '0') {
$ccn_mt = '';
} elseif($this->config->ccn_margin_top == 'zero') {
$ccn_mt = 'margin-top:0px;';
} else {
$ccn_mt = 'margin-top:'.$this->config->ccn_margin_top.'px;';
}
}
if(!empty($this->config->ccn_margin_bottom)){
$ccn_mb = 'margin-bottom:'.$this->config->ccn_margin_bottom.'px;';
} else {
$ccn_mb = '';
}
if(!empty($this->config->ccn_padding_top)){
$ccn_pt = 'padding-top:'.$this->config->ccn_padding_top.'px;';
} else {
$ccn_pt = '';
}
if(!empty($this->config->ccn_padding_bottom)){
$ccn_pb = 'padding-bottom:'.$this->config->ccn_padding_bottom.'px;';
} else {
$ccn_pb = '';
}
if(!empty($this->config->ccn_css_class)){
$ccn_css_class = $this->config->ccn_css_class;
} else {
$ccn_css_class = '';
}
$ccn_stylize = $ccn_mt . $ccn_mb . $ccn_pt . $ccn_pb;
$attributes['ccn_style'] = $ccn_stylize;
// $attributes['class'] .= ' block_'. $this->name();
$attributes['class'] .= ' '. $ccn_css_class;
*/
return $attributes;
}
public function has_config() {
return true;
}
public function get_content() {
global $CFG, $COURSE;
if ($this->content !== null) {
// return $this->content;
}
$this->content = new stdClass;
if(!empty($this->config->title)){$this->content->title = format_text($this->config->title, FORMAT_HTML, array('filter' => true));} else {$this->content->title = get_string('pluginname', 'block_cesa_course_rating');}
$courseid = $COURSE->id;
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$canRate = has_capability('block/cesa_course_rating:rate', $context);
if($canRate == 1) {
$canRateClass = 'ccn-can-rate';
} else {
$canRateClass = 'ccn-cannot-rate';
}
$ccnSubmitRating = $this->submit_rating();
$this->content->text = '';
$ccnRating = number_format($this->overall_rating($COURSE->id), 1);
$ccnStar = '<li class="list-inline-item"><i class="fa fa-star"></i></li>';
$ccnStarHalf = '<li class="list-inline-item"><i class="fa fa-star-half-o"></i></li>';
$ccnStarVoid = '<li class="list-inline-item"><i class="fa fa-star-o"></i></li>';
if($ccnRating == 5) {
$ccnStars = str_repeat($ccnStar, 5);
} elseif($ccnRating == 4.5) {
$ccnStars = str_repeat($ccnStar, 4) . str_repeat($ccnStarHalf, 1);
} elseif($ccnRating == 4) {
$ccnStars = str_repeat($ccnStar, 4) . str_repeat($ccnStarVoid, 1);
} elseif($ccnRating == 3.5) {
$ccnStars = str_repeat($ccnStar, 3) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 1);
} elseif($ccnRating == 3) {
$ccnStars = str_repeat($ccnStar, 3) . str_repeat($ccnStarVoid, 2);
} elseif($ccnRating == 2.5) {
$ccnStars = str_repeat($ccnStar, 2) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 2);
} elseif($ccnRating == 2) {
$ccnStars = str_repeat($ccnStar, 2) . str_repeat($ccnStarVoid, 3);
} elseif($ccnRating == 1.5) {
$ccnStars = str_repeat($ccnStar, 1) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 3);
} elseif($ccnRating == 0.5) {
$ccnStars = str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 4);
} else {
$ccnStars = str_repeat($ccnStarVoid, 5);
}
$ccnFive = $this->get_specific_average($COURSE->id, 5);
$ccnFour = $this->get_specific_average($COURSE->id, 4);
$ccnThree = $this->get_specific_average($COURSE->id, 3);
$ccnTwo = $this->get_specific_average($COURSE->id, 2);
$ccnOne = $this->get_specific_average($COURSE->id, 1);
$this->content->text .= '
<div class="cs_row_five">
<div class="student_feedback_container">
<h4 data-ccn="title" class="aii_title">'.$this->content->title.'</h4>
<div class="s_feeback_content">
<ul class="skills">
<li class="list-inline-item">'.get_string('stars_5', 'block_cesa_course_rating').'</li>
<li class="list-inline-item progressbar1" data-width="'.$ccnFive.'" data-target="100">'.$ccnFive.'%</li>
</ul>
<ul class="skills">
<li class="list-inline-item">'.get_string('stars_4', 'block_cesa_course_rating').'</li>
<li class="list-inline-item progressbar2" data-width="'.$ccnFour.'" data-target="100">'.$ccnFour.'%</li>
</ul>
<ul class="skills">
<li class="list-inline-item">'.get_string('stars_3', 'block_cesa_course_rating').'</li>
<li class="list-inline-item progressbar3" data-width="'.$ccnThree.'" data-target="100">'.$ccnThree.'%</li>
</ul>
<ul class="skills">
<li class="list-inline-item">'.get_string('stars_2', 'block_cesa_course_rating').'</li>
<li class="list-inline-item progressbar4" data-width="'.$ccnTwo.'" data-target="100">'.$ccnTwo.'%</li>
</ul>
<ul class="skills">
<li class="list-inline-item">'.get_string('stars_1', 'block_cesa_course_rating').'</li>
<li class="list-inline-item progressbar5" data-width="'.$ccnOne.'" data-target="100">'.$ccnOne.'%</li>
</ul>
</div>
<div class="aii_average_review text-center '.$canRateClass.'">
<div class="av_content">
<h2>'.$ccnRating.'</h2>
<ul class="aii_rive_list mb0">
'.$ccnStars.'
</ul>
<p>'.$this->count_ratings($COURSE->id).'</p>';
if($canRate == 1){
$this->content->text .= $ccnSubmitRating;
}
$this->content->text .='
</div>
</div>
</div>
</div>';
return $this->content;
}
public function overall_rating($courseID) {
global $CFG, $DB;
$sql = " SELECT AVG(rating) AS average
FROM {block_cesa_course_rating}
WHERE course = $courseID
";
$totalAverage = -1;
if ($getAverage = $DB->get_record_sql($sql)) {
$totalAverage = round($getAverage->average * 2) / 2;
}
return $totalAverage;
}
public function count_ratings($courseID) {
global $CFG, $DB;
$countRecords = $DB->count_records('block_cesa_course_rating', array('course'=>$courseID));
$countRatings = '';
if ($countRecords > 0) {
$countRatings = get_string ('rated_by', 'block_cesa_course_rating', $countRecords);
} else {
$countRatings = get_string ('rated_by_none', 'block_cesa_course_rating');
}
return $countRatings;
}
public function count_ratings_external($courseID) {
global $CFG, $DB;
$countRecords = $DB->count_records('block_cesa_course_rating', array('course'=>$courseID));
return $countRecords;
}
public function get_specific_average($courseID, $rating) {
global $CFG, $DB;
$countOnlyRating = $DB->count_records('block_cesa_course_rating', array('course'=>$courseID, 'rating'=>$rating));
$countExcludingRating = $DB->count_records_sql(
" SELECT COUNT(*)
FROM {block_cesa_course_rating}
WHERE course = $courseID
AND rating <> $rating
");
$countTotal = $DB->count_records('block_cesa_course_rating', array('course'=>$courseID));
if($countTotal == 0) {
$result = '0';
} else {
$result = $countOnlyRating / $countTotal * 100;
}
return $result;
}
public function submit_rating() {
global $CFG, $COURSE;
$courseid = $COURSE->id;
$context = get_context_instance(CONTEXT_COURSE, $courseid);
$ccnStar = '<span class="fa fa-star"></span>';
$return = '<form id="ccn-star-rate" method="post" action="'.$CFG->wwwroot.'/blocks/cesa_course_rating/rate_course.php">
<input name="id" type="hidden" value="'.$courseid.'" />
<div class="ccn-star-rate-inner">';
for ($i = 5; $i >= 1; $i--) {
$printCcnStar = str_repeat($ccnStar, $i);
$return .=' <input required type="radio" id="stars-'.$i.'" name="rating" value="'.$i.'" /><label for="stars-'.$i.'"></label>';
}
$return .= ' </div>
<button class="btn btn-primary" type="submit">'.get_string('rate_course', 'block_cesa_course_rating').'</button>
</form>';
return $return;
}
public function external_star_rating($courseID) {
$ccnStar = '<li class="list-inline-item"><i class="fa fa-star"></i></li>';
$ccnStarHalf = '<li class="list-inline-item"><i class="fa fa-star-half-o"></i></li>';
$ccnStarVoid = '<li class="list-inline-item"><i class="fa fa-star-o"></i></li>';
$ccnRating = $this->overall_rating($courseID);
if($ccnRating == 5) {
$ccnStars = str_repeat($ccnStar, 5);
} elseif($ccnRating == 4.5) {
$ccnStars = str_repeat($ccnStar, 4) . str_repeat($ccnStarHalf, 1);
} elseif($ccnRating == 4) {
$ccnStars = str_repeat($ccnStar, 4) . str_repeat($ccnStarVoid, 1);
} elseif($ccnRating == 3.5) {
$ccnStars = str_repeat($ccnStar, 3) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 1);
} elseif($ccnRating == 3) {
$ccnStars = str_repeat($ccnStar, 3) . str_repeat($ccnStarVoid, 2);
} elseif($ccnRating == 2.5) {
$ccnStars = str_repeat($ccnStar, 2) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 2);
} elseif($ccnRating == 2) {
$ccnStars = str_repeat($ccnStar, 2) . str_repeat($ccnStarVoid, 3);
} elseif($ccnRating == 1.5) {
$ccnStars = str_repeat($ccnStar, 1) . str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 3);
} elseif($ccnRating == 0.5) {
$ccnStars = str_repeat($ccnStarHalf, 1) . str_repeat($ccnStarVoid, 4);
} else {
$ccnStars = str_repeat($ccnStarVoid, 5);
}
$return = '<div class="ccn-external-stars">'.$ccnStars.'<li class="list-inline-item"><span>('.$this->count_ratings_external($courseID).')</span></li></div>';
return $return;
}
}