Execute("$command"); if ($result) { if ($feedback) { echo "
".get_string("success")."
"; } return true; } else { if ($feedback) { echo "".get_string("error")."
"; } return false; } } function modify_database($sqlfile) { /// Assumes that the input text file consists of a number /// of SQL statements ENDING WITH SEMICOLONS. The semicolons /// MUST be the last character in a line. /// Lines that are blank or that start with "#" are ignored. /// Only tested with mysql dump files (mysqldump -p -d moodle) global $CFG; if (file_exists($sqlfile)) { $success = true; $lines = file($sqlfile); $command = ""; while ( list($i, $line) = each($lines) ) { $line = chop($line); $length = strlen($line); if ($length && substr($line, 0, 1) <> "#") { if (substr($line, $length-1, 1) == ";") { $line = substr($line, 0, $length-1); // strip ; $command .= $line; $command = str_replace("prefix_", $CFG->prefix, $command); // Table prefixes if (! execute_sql($command)) { $success = false; } $command = ""; } else { $command .= $line; } } } } else { $success = false; echo "Tried to modify database, but \"$sqlfile\" doesn't exist!
"; } return $success; } function record_exists($table, $field="", $value="", $field2="", $value2="", $field3="", $value3="") { /// Returns true or false depending on whether the specified record exists global $CFG; if ($field) { $select = "WHERE $field = '$value'"; if ($field2) { $select .= " AND $field2 = '$value2'"; if ($field3) { $select .= " AND $field3 = '$value3'"; } } } return record_exists_sql("SELECT * FROM $CFG->prefix$table $select LIMIT 1"); } function record_exists_sql($sql) { /// Returns true or false depending on whether the specified record exists /// The sql statement is provided as a string. global $db; $rs = $db->Execute($sql); if (!$rs) return false; if ( $rs->RecordCount() ) { return true; } else { return false; } } function count_records($table, $field="", $value="", $field2="", $value2="", $field3="", $value3="") { /// Get all the records and count them global $CFG; if ($field) { $select = "WHERE $field = '$value'"; if ($field2) { $select .= " AND $field2 = '$value2'"; if ($field3) { $select .= " AND $field3 = '$value3'"; } } } return count_records_sql("SELECT COUNT(*) FROM $CFG->prefix$table $select"); } function count_records_select($table, $select="") { /// Get all the records and count them global $CFG; if ($select) { $select = "WHERE $select"; } return count_records_sql("SELECT COUNT(*) FROM $CFG->prefix$table $select"); } function count_records_sql($sql) { /// Get all the records and count them /// The sql statement is provided as a string. global $db; $rs = $db->Execute("$sql"); if (!$rs) return 0; return $rs->fields[0]; } function get_record($table, $field, $value, $field2="", $value2="", $field3="", $value3="") { /// Get a single record as an object global $CFG; $select = "WHERE $field = '$value'"; if ($field2) { $select .= " AND $field2 = '$value2'"; if ($field3) { $select .= " AND $field3 = '$value3'"; } } return get_record_sql("SELECT * FROM $CFG->prefix$table $select"); } function get_record_sql($sql) { /// Get a single record as an object /// The sql statement is provided as a string. global $db; $rs = $db->Execute("$sql"); if (!$rs) return false; if ( $rs->RecordCount() == 1 ) { return (object)$rs->fields; } else { return false; } } function get_records($table, $field="", $value="", $sort="", $fields="*") { /// Get a number of records as an array of objects /// Can optionally be sorted eg "time ASC" or "time DESC" /// If "fields" is specified, only those fields are returned /// The "key" is the first column returned, eg usually "id" global $CFG; if ($field) { $select = "WHERE $field = '$value'"; } if ($sort) { $sortorder = "ORDER BY $sort"; } return get_records_sql("SELECT $fields FROM $CFG->prefix$table $select $sortorder"); } function get_records_select($table, $select="", $sort="", $fields="*") { /// Get a number of records as an array of objects /// Can optionally be sorted eg "time ASC" or "time DESC" /// "select" is a fragment of SQL to define the selection criteria /// The "key" is the first column returned, eg usually "id" global $CFG; if ($sort) { $sortorder = "ORDER BY $sort"; } if ($select) { $select = "WHERE $select"; } return get_records_sql("SELECT $fields FROM $CFG->prefix$table $select $sortorder"); } function get_records_list($table, $field="", $values="", $sort="", $fields="*") { /// Get a number of records as an array of objects /// Differs from get_records() in that the values variable /// can be a comma-separated list of values eg "4,5,6,10" /// Can optionally be sorted eg "time ASC" or "time DESC" /// The "key" is the first column returned, eg usually "id" global $CFG; if ($field) { $select = "WHERE $field in ($values)"; } if ($sort) { $sortorder = "ORDER BY $sort"; } return get_records_sql("SELECT $fields FROM $CFG->prefix$table $select $sortorder"); } function get_records_sql($sql) { /// Get a number of records as an array of objects /// The "key" is the first column returned, eg usually "id" /// The sql statement is provided as a string. global $db; $rs = $db->Execute("$sql"); if (!$rs) return false; if ( $rs->RecordCount() > 0 ) { if ($records = $rs->GetAssoc(true)) { foreach ($records as $key => $record) { $objects[$key] = (object) $record; } return $objects; } else { return false; } } else { return false; } } function get_records_menu($table, $field="", $value="", $sort="", $fields="*") { /// Get a number of records as an array of objects /// Can optionally be sorted eg "time ASC" or "time DESC" /// If "fields" is specified, only those fields are returned /// The "key" is the first column returned, eg usually "id" global $CFG; if ($field) { $select = "WHERE $field = '$value'"; } if ($sort) { $sortorder = "ORDER BY $sort"; } return get_records_sql_menu("SELECT $fields FROM $CFG->prefix$table $select $sortorder"); } function get_records_select_menu($table, $select="", $sort="", $fields="*") { /// Get a number of records as an array of objects /// Can optionally be sorted eg "time ASC" or "time DESC" /// "select" is a fragment of SQL to define the selection criteria /// Returns associative array of first two fields global $CFG; if ($sort) { $sortorder = "ORDER BY $sort"; } if ($select) { $select = "WHERE $select"; } return get_records_sql_menu("SELECT $fields FROM $CFG->prefix$table $select $sortorder"); } function get_records_sql_menu($sql) { /// Given an SQL select, this function returns an associative /// array of the first two columns. This is most useful in /// combination with the choose_from_menu function to create /// a form menu. global $db; $rs = $db->Execute("$sql"); if (!$rs) return false; if ( $rs->RecordCount() > 0 ) { while (!$rs->EOF) { $menu[$rs->fields[0]] = $rs->fields[1]; $rs->MoveNext(); } return $menu; } else { return false; } } function get_field($table, $return, $field, $value) { /// Get a single field from a database record global $db, $CFG; $rs = $db->Execute("SELECT $return FROM $CFG->prefix$table WHERE $field = '$value'"); if (!$rs) return false; if ( $rs->RecordCount() == 1 ) { return $rs->fields["$return"]; } else { return false; } } function set_field($table, $newfield, $newvalue, $field, $value) { /// Set a single field in a database record global $db, $CFG; return $db->Execute("UPDATE $CFG->prefix$table SET $newfield = '$newvalue' WHERE $field = '$value'"); } function delete_records($table, $field="", $value="", $field2="", $value2="", $field3="", $value3="") { /// Delete one or more records from a table global $db, $CFG; if ($field) { $select = "WHERE $field = '$value'"; if ($field2) { $select .= " AND $field2 = '$value2'"; if ($field3) { $select .= " AND $field3 = '$value3'"; } } } return $db->Execute("DELETE FROM $CFG->prefix$table $select"); } function insert_record($table, $dataobject, $returnid=true) { /// Insert a record into a table and return the "id" field if required /// If the return ID isn't required, then this just reports success as true/false. /// $dataobject is an object containing needed data global $db, $CFG; // Determine all the fields needed if (! $columns = $db->MetaColumns("$CFG->prefix$table")) { return false; } $data = (array)$dataobject; // Pull out data matching these fields foreach ($columns as $column) { if ($column->name <> "id" && isset($data[$column->name]) ) { $ddd[$column->name] = $data[$column->name]; } } // Construct SQL queries if (! $numddd = count($ddd)) { return false; } $count = 0; $inscolumns = ""; $insvalues = ""; $select = ""; foreach ($ddd as $key => $value) { $count++; $inscolumns .= "$key"; $insvalues .= "'$value'"; $select .= "$key = '$value'"; if ($count < $numddd) { $inscolumns .= ", "; $insvalues .= ", "; $select .= " AND "; } } if (! $rs = $db->Execute("INSERT INTO $CFG->prefix$table ($inscolumns) VALUES ($insvalues)")) { return false; } if ($returnid) { if ($db->hasInsertID) { return $db->Insert_ID(); // ADOdb has stored the ID for us } // Try to pull the record out again to find the id. This is the most cross-platform method. if ($rs = $db->Execute("SELECT id FROM $CFG->prefix$table WHERE $select")) { if ($rs->RecordCount() == 1) { return $rs->fields[0]; } } return false; } else { return true; } } function update_record($table, $dataobject) { /// Update a record in a table /// $dataobject is an object containing needed data /// Relies on $dataobject having a variable "id" to /// specify the record to update global $db, $CFG; if (! isset($dataobject->id) ) { return false; } // Determine all the fields in the table if (!$columns = $db->MetaColumns("$CFG->prefix$table")) { return false; } $data = (array)$dataobject; // Pull out data matching these fields foreach ($columns as $column) { if ($column->name <> "id" && isset($data[$column->name]) ) { $ddd[$column->name] = $data[$column->name]; } } // Construct SQL queries $numddd = count($ddd); $count = 0; $update = ""; foreach ($ddd as $key => $value) { $count++; $update .= "$key = '$value'"; if ($count < $numddd) { $update .= ", "; } } if ($rs = $db->Execute("UPDATE $CFG->prefix$table SET $update WHERE id = '$dataobject->id'")) { return true; } else { return false; } } function print_object($object) { /// Mostly just for debugging $array = (array)$object; foreach ($array as $key => $item) { echo "$key -> $itemError: Could not insert a new entry to the Moodle log
"; // Don't throw an error } } function get_logs($select, $order) { global $CFG; return get_records_sql("SELECT l.*, u.firstname, u.lastname, u.picture FROM {$CFG->prefix}log l, {$CFG->prefix}user u $select $order"); } function get_logs_usercourse($userid, $courseid, $coursestart) { global $CFG; return get_records_sql("SELECT floor((`time` - $coursestart)/86400) as day, count(*) as num FROM {$CFG->prefix}log WHERE userid = '$userid' AND course = '$courseid' AND `time` > '$coursestart' GROUP BY day "); } function get_logs_userday($userid, $courseid, $daystart) { global $CFG; return get_records_sql("SELECT floor((`time` - $daystart)/3600) as hour, count(*) as num FROM {$CFG->prefix}log WHERE userid = '$userid' AND course = '$courseid' AND `time` > '$daystart' GROUP BY hour "); } ?>