Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Priority Queue class to sort out db entry contents.
19
 *
20
 * @package    mod_data
21
 * @copyright  2016 Devang Gaur
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
namespace mod_data\search;
26
 
27
defined('MOODLE_INTERNAL') || die();
28
 
29
/**
30
 * Priority Queue class to sort out db entry contents.
31
 *
32
 * @package    mod_data
33
 * @copyright  2016 Devang Gaur
34
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35
 */
36
class sortedcontentqueue extends \SPLPriorityQueue {
37
 
38
    /**
39
     * @var array All contents that will be sorted.
40
     */
41
    private $contents;
42
 
43
    /**
44
     * contructor
45
     *
46
     * @param array $contents
47
     * @return void
48
     */
49
    public function __construct($contents) {
50
        $this->contents = $contents;
51
    }
52
 
53
    /**
54
     * comparator function overriden for sorting the records
55
     * ...as per 'required' and 'priotirity' field values
56
     *
57
     * @param int $key1
58
     * @param int $key2
59
     * @return int
60
     */
61
    public function compare($key1 , $key2): int {
62
        $record1 = $this->contents[$key1];
63
        $record2 = $this->contents[$key2];
64
 
65
        // If a content's fieldtype is compulsory in the database than it would have priority than any other noncompulsory content.
66
        if ( ($record1->required && $record2->required) || (!$record1->required && !$record2->required)) {
67
            if ($record1->priority === $record2->priority) {
68
                return $key1 < $key2 ? 1 : -1;
69
            }
70
 
71
            return $record1->priority < $record2->priority ? -1 : 1;
72
 
73
        } else if ($record1->required && !$record2->required) {
74
            return 1;
75
        } else {
76
            return -1;
77
        }
78
 
79
    }
80
}