Proyectos de Subversion Moodle

Rev

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;

    }

}