Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/mod/glossary/sql.php
Go to the documentation of this file.
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 
 All Data Structures Namespaces Files Functions Variables Enumerations