|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00009 00010 00012 $sqlorderby = ''; 00013 $sqlsortkey = NULL; 00014 $textlib = textlib_get_instance(); 00015 00016 // For cases needing inner view 00017 $sqlwrapheader = ''; 00018 $sqlwrapfooter = ''; 00019 00021 switch ( $sortkey ) { 00022 case "CREATION": 00023 $sqlsortkey = "timecreated"; 00024 break; 00025 case "UPDATE": 00026 $sqlsortkey = "timemodified"; 00027 break; 00028 case "FIRSTNAME": 00029 $sqlsortkey = "firstname"; 00030 break; 00031 case "LASTNAME": 00032 $sqlsortkey = "lastname"; 00033 break; 00034 } 00035 $sqlsortorder = $sortorder; 00036 00038 00041 00042 $fullpivot = 1; 00043 $params = array('gid1'=>$glossary->id, 'gid2'=>$glossary->id, 'myid'=>$USER->id, 'hook'=>$hook); 00044 00045 $userid = ''; 00046 if ( isloggedin() ) { 00047 $userid = "OR ge.userid = :myid"; 00048 } 00049 switch ($tab) { 00050 case GLOSSARY_CATEGORY_VIEW: 00051 if ($hook == GLOSSARY_SHOW_ALL_CATEGORIES ) { 00052 00053 $sqlselect = "SELECT gec.id AS cid, ge.*, gec.entryid, gc.name AS glossarypivot"; 00054 $sqlfrom = "FROM {glossary_entries} ge, 00055 {glossary_entries_categories} gec, 00056 {glossary_categories} gc"; 00057 $sqlwhere = "WHERE (ge.glossaryid = :gid1 OR ge.sourceglossaryid = :gid2) AND 00058 ge.id = gec.entryid AND gc.id = gec.categoryid AND 00059 (ge.approved <> 0 $userid)"; 00060 00061 $sqlorderby = ' ORDER BY gc.name, ge.concept'; 00062 00063 } elseif ($hook == GLOSSARY_SHOW_NOT_CATEGORISED ) { 00064 00065 $printpivot = 0; 00066 $sqlselect = "SELECT ge.*, concept AS glossarypivot"; 00067 $sqlfrom = "FROM {glossary_entries} ge LEFT JOIN {glossary_entries_categories} gec 00068 ON ge.id = gec.entryid"; 00069 $sqlwhere = "WHERE (glossaryid = :gid1 OR sourceglossaryid = :gid2) AND 00070 (ge.approved <> 0 $userid) AND gec.entryid IS NULL"; 00071 00072 00073 $sqlorderby = ' ORDER BY concept'; 00074 00075 } else { 00076 00077 $printpivot = 0; 00078 $sqlselect = "SELECT ge.*, ce.entryid, c.name AS glossarypivot"; 00079 $sqlfrom = "FROM {glossary_entries} ge, {glossary_entries_categories} ce, {glossary_categories} c"; 00080 $sqlwhere = "WHERE ge.id = ce.entryid AND ce.categoryid = :hook AND 00081 ce.categoryid = c.id AND ge.approved != 0 AND 00082 (ge.glossaryid = :gid1 OR ge.sourceglossaryid = :gid2) AND 00083 (ge.approved <> 0 $userid)"; 00084 00085 $sqlorderby = ' ORDER BY c.name, ge.concept'; 00086 00087 } 00088 break; 00089 case GLOSSARY_AUTHOR_VIEW: 00090 00091 $where = ''; 00092 $params['hookup'] = $textlib->strtoupper($hook); 00093 00094 if ( $sqlsortkey == 'firstname' ) { 00095 $usernamefield = $DB->sql_fullname('u.firstname' , 'u.lastname'); 00096 } else { 00097 $usernamefield = $DB->sql_fullname('u.lastname' , 'u.firstname'); 00098 } 00099 $where = "AND " . $DB->sql_substr("upper($usernamefield)", 1, $textlib->strlen($hook)) . " = :hookup"; 00100 00101 if ( $hook == 'ALL' ) { 00102 $where = ''; 00103 } 00104 00105 $sqlselect = "SELECT ge.*, $usernamefield AS glossarypivot, 1 AS userispivot "; 00106 $sqlfrom = "FROM {glossary_entries} ge, {user} u"; 00107 $sqlwhere = "WHERE ge.userid = u.id AND 00108 (ge.approved <> 0 $userid) 00109 $where AND 00110 (ge.glossaryid = :gid1 OR ge.sourceglossaryid = :gid2)"; 00111 $sqlorderby = "ORDER BY $usernamefield $sqlsortorder, ge.concept"; 00112 break; 00113 case GLOSSARY_APPROVAL_VIEW: 00114 $fullpivot = 0; 00115 $printpivot = 0; 00116 00117 $where = ''; 00118 $params['hookup'] = $textlib->strtoupper($hook); 00119 00120 if ($hook != 'ALL' and $hook != 'SPECIAL') { 00121 $where = "AND " . $DB->sql_substr("upper(concept)", 1, $textlib->strlen($hook)) . " = :hookup"; 00122 } 00123 00124 $sqlselect = "SELECT ge.*, ge.concept AS glossarypivot"; 00125 $sqlfrom = "FROM {glossary_entries} ge"; 00126 $sqlwhere = "WHERE (ge.glossaryid = :gid1 OR ge.sourceglossaryid = :gid2) AND 00127 ge.approved = 0 $where"; 00128 00129 if ( $sqlsortkey ) { 00130 $sqlorderby = "ORDER BY $sqlsortkey $sqlsortorder"; 00131 } else { 00132 $sqlorderby = "ORDER BY ge.concept"; 00133 } 00134 break; 00135 case GLOSSARY_DATE_VIEW: 00136 $printpivot = 0; 00137 case GLOSSARY_STANDARD_VIEW: 00138 default: 00139 $sqlselect = "SELECT ge.*, ge.concept AS glossarypivot"; 00140 $sqlfrom = "FROM {glossary_entries} ge"; 00141 00142 $where = ''; 00143 $fullpivot = 0; 00144 00145 switch ( $mode ) { 00146 case 'search': 00147 00148 if ($DB->sql_regex_supported()) { 00149 $REGEXP = $DB->sql_regex(true); 00150 $NOTREGEXP = $DB->sql_regex(false); 00151 } 00152 00153 $searchcond = array(); 00154 $alcond = array(); 00155 //$params = array(); 00156 $i = 0; 00157 00158 $concat = $DB->sql_concat('ge.concept', "' '", 'ge.definition',"' '", "COALESCE(al.alias, '')"); 00159 00160 $searchterms = explode(" ",$hook); 00161 00162 foreach ($searchterms as $searchterm) { 00163 $i++; 00164 00165 $NOT = false; 00166 00167 00170 if (!$DB->sql_regex_supported()) { 00171 if (substr($searchterm, 0, 1) == '-') { 00172 $NOT = true; 00173 } 00174 $searchterm = trim($searchterm, '+-'); 00175 } 00176 00177 if (substr($searchterm,0,1) == '+') { 00178 $searchterm = trim($searchterm, '+-'); 00179 if ($textlib->strlen($searchterm) < 2) { 00180 continue; 00181 } 00182 $searchterm = preg_quote($searchterm, '|'); 00183 $searchcond[] = "$concat $REGEXP :ss$i"; 00184 $params['ss'.$i] = "(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)"; 00185 00186 } else if (substr($searchterm,0,1) == "-") { 00187 $searchterm = trim($searchterm, '+-'); 00188 if ($textlib->strlen($searchterm) < 2) { 00189 continue; 00190 } 00191 $searchterm = preg_quote($searchterm, '|'); 00192 $searchcond[] = "$concat $NOTREGEXP :ss$i"; 00193 $params['ss'.$i] = "(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)"; 00194 00195 } else { 00196 if ($textlib->strlen($searchterm) < 2) { 00197 continue; 00198 } 00199 $searchcond[] = $DB->sql_like($concat, ":ss$i", false, true, $NOT); 00200 $params['ss'.$i] = "%$searchterm%"; 00201 } 00202 } 00203 00204 if (empty($searchcond)) { 00205 $where = "AND 1=2 "; // no search result 00206 00207 } else { 00208 $searchcond = implode(" AND ", $searchcond); 00209 00210 // Need one inner view here to avoid distinct + text 00211 $sqlwrapheader = 'SELECT ge.*, ge.concept AS glossarypivot 00212 FROM {glossary_entries} ge 00213 JOIN ( '; 00214 $sqlwrapfooter = ' ) gei ON (ge.id = gei.id)'; 00215 00216 $sqlselect = "SELECT DISTINCT ge.id"; 00217 $sqlfrom = "FROM {glossary_entries} ge 00218 LEFT JOIN {glossary_alias} al ON al.entryid = ge.id"; 00219 $where = "AND ($searchcond)"; 00220 } 00221 00222 break; 00223 00224 case 'term': 00225 $params['hook2'] = $hook; 00226 $printpivot = 0; 00227 $sqlfrom .= " LEFT JOIN {glossary_alias} ga on ge.id = ga.entryid"; 00228 $where = "AND (ge.concept = :hook OR ga.alias = :hook2) "; 00229 break; 00230 00231 case 'entry': 00232 $printpivot = 0; 00233 $where = "AND ge.id = :hook"; 00234 break; 00235 00236 case 'letter': 00237 if ($hook != 'ALL' and $hook != 'SPECIAL') { 00238 $params['hookup'] = $textlib->strtoupper($hook); 00239 $where = "AND " . $DB->sql_substr("upper(concept)", 1, $textlib->strlen($hook)) . " = :hookup"; 00240 } 00241 if ($hook == 'SPECIAL') { 00242 //Create appropiate IN contents 00243 $alphabet = explode(",", get_string('alphabet', 'langconfig')); 00244 list($nia, $aparams) = $DB->get_in_or_equal($alphabet, SQL_PARAMS_NAMED, $start='a', false); 00245 $params = array_merge($params, $aparams); 00246 $where = "AND " . $DB->sql_substr("upper(concept)", 1, 1) . " $nia"; 00247 } 00248 break; 00249 } 00250 00251 $sqlwhere = "WHERE (ge.glossaryid = :gid1 or ge.sourceglossaryid = :gid2) AND 00252 (ge.approved <> 0 $userid) 00253 $where"; 00254 switch ( $tab ) { 00255 case GLOSSARY_DATE_VIEW: 00256 $sqlorderby = "ORDER BY $sqlsortkey $sqlsortorder"; 00257 break; 00258 00259 case GLOSSARY_STANDARD_VIEW: 00260 $sqlorderby = "ORDER BY ge.concept"; 00261 default: 00262 break; 00263 } 00264 break; 00265 } 00266 $count = $DB->count_records_sql("SELECT COUNT(DISTINCT(ge.id)) $sqlfrom $sqlwhere", $params); 00267 00268 $limitfrom = $offset; 00269 $limitnum = 0; 00270 00271 if ( $offset >= 0 ) { 00272 $limitnum = $entriesbypage; 00273 } 00274 00275 $query = "$sqlwrapheader $sqlselect $sqlfrom $sqlwhere $sqlwrapfooter $sqlorderby"; 00276 $allentries = $DB->get_records_sql($query, $params, $limitfrom, $limitnum); 00277