2009-05-27 04:06:19 +00:00
< ? php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2009-05-27 04:06:19 +00:00
/**
2009-05-27 08:09:13 +00:00
* @ package mod - data
2009-05-27 04:06:19 +00:00
* @ copyright 1999 onwards Martin Dougiamas { @ link http :// moodle . com }
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2008-05-31 00:30:00 +00:00
// Some constants
2006-03-22 08:07:26 +00:00
define ( 'DATA_MAX_ENTRIES' , 50 );
define ( 'DATA_PERPAGE_SINGLE' , 1 );
2008-06-12 14:13:51 +00:00
2008-04-16 11:51:50 +00:00
define ( 'DATA_FIRSTNAME' , - 1 );
define ( 'DATA_LASTNAME' , - 2 );
2008-04-19 20:48:48 +00:00
define ( 'DATA_APPROVED' , - 3 );
2008-04-21 14:17:02 +00:00
define ( 'DATA_TIMEADDED' , 0 );
define ( 'DATA_TIMEMODIFIED' , - 4 );
2008-04-16 11:51:50 +00:00
2008-06-12 15:18:13 +00:00
define ( 'DATA_CAP_EXPORT' , 'mod/data:viewalluserpresets' );
2010-08-25 01:22:15 +00:00
define ( 'DATA_PRESET_COMPONENT' , 'mod_data' );
define ( 'DATA_PRESET_FILEAREA' , 'site_presets' );
define ( 'DATA_PRESET_CONTEXT' , SYSCONTEXTID );
2008-06-12 15:18:13 +00:00
// Users having assigned the default role "Non-editing teacher" can export database records
// Using the mod/data capability "viewalluserpresets" existing in Moodle 1.9.x.
2008-09-14 08:22:44 +00:00
// In Moodle >= 2, new roles may be introduced and used instead.
2008-06-12 15:18:13 +00:00
2009-05-27 04:06:19 +00:00
/**
2009-05-27 08:09:13 +00:00
* @ package mod - data
2009-05-27 04:06:19 +00:00
* @ copyright 1999 onwards Martin Dougiamas { @ link http :// moodle . com }
* @ license http :// www . gnu . org / copyleft / gpl . html GNU GPL v3 or later
*/
2008-05-31 09:51:48 +00:00
class data_field_base { // Base class for Database Field Types (see field/*/field.class.php)
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2009-05-27 04:06:19 +00:00
/** @var string Subclasses must override the type with their name */
var $type = 'unknown' ;
/** @var object The database object that this field belongs to */
var $data = NULL ;
/** @var object The field object itself, if we know it */
2009-08-20 13:16:08 +00:00
var $field = NULL ;
2009-05-27 04:06:19 +00:00
/** @var int Width of the icon for this fieldtype */
var $iconwidth = 16 ;
/** @var int Width of the icon for this fieldtype */
var $iconheight = 16 ;
/** @var object course module or cmifno */
var $cm ;
/** @var object activity context */
var $context ;
/**
* Constructor function
*
* @ global object
* @ uses CONTEXT_MODULE
* @ param int $field
* @ param int $data
* @ param int $cm
*/
2008-09-14 08:22:44 +00:00
function __construct ( $field = 0 , $data = 0 , $cm = 0 ) { // Field or data or both, each can be id or object
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-22 08:07:26 +00:00
if ( empty ( $field ) && empty ( $data )) {
2008-06-25 14:52:39 +00:00
print_error ( 'missingfield' , 'data' );
2006-03-22 08:07:26 +00:00
}
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
if ( ! empty ( $field )) {
if ( is_object ( $field )) {
$this -> field = $field ; // Programmer knows what they are doing, we hope
2008-06-06 08:04:22 +00:00
} else if ( ! $this -> field = $DB -> get_record ( 'data_fields' , array ( 'id' => $field ))) {
2008-06-25 14:52:39 +00:00
print_error ( 'invalidfieldid' , 'data' );
2006-03-22 08:07:26 +00:00
}
if ( empty ( $data )) {
2008-06-06 08:04:22 +00:00
if ( ! $this -> data = $DB -> get_record ( 'data' , array ( 'id' => $this -> field -> dataid ))) {
2008-06-25 14:52:39 +00:00
print_error ( 'invalidid' , 'data' );
2006-03-22 08:07:26 +00:00
}
}
}
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
if ( empty ( $this -> data )) { // We need to define this properly
if ( ! empty ( $data )) {
if ( is_object ( $data )) {
$this -> data = $data ; // Programmer knows what they are doing, we hope
2008-06-06 08:04:22 +00:00
} else if ( ! $this -> data = $DB -> get_record ( 'data' , array ( 'id' => $data ))) {
2008-06-25 14:52:39 +00:00
print_error ( 'invalidid' , 'data' );
2006-03-22 08:07:26 +00:00
}
} else { // No way to define it!
2008-06-25 14:52:39 +00:00
print_error ( 'missingdata' , 'data' );
2006-03-22 08:07:26 +00:00
}
}
2008-06-12 14:13:51 +00:00
2008-09-14 08:22:44 +00:00
if ( $cm ) {
$this -> cm = $cm ;
} else {
$this -> cm = get_coursemodule_from_instance ( 'data' , $this -> data -> id );
}
2006-03-22 08:07:26 +00:00
if ( empty ( $this -> field )) { // We need to define some default values
$this -> define_default_field ();
}
2008-09-14 08:22:44 +00:00
2012-07-26 13:57:56 +08:00
$this -> context = context_module :: instance ( $this -> cm -> id );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* This field just sets up a default field object
*
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function define_default_field () {
2009-08-18 05:13:51 +00:00
global $OUTPUT ;
2006-03-22 08:07:26 +00:00
if ( empty ( $this -> data -> id )) {
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( 'Programmer error: dataid not defined in field class' );
2006-03-22 08:07:26 +00:00
}
2010-09-21 08:37:36 +00:00
$this -> field = new stdClass ();
2006-03-22 08:07:26 +00:00
$this -> field -> id = 0 ;
$this -> field -> dataid = $this -> data -> id ;
$this -> field -> type = $this -> type ;
$this -> field -> param1 = '' ;
$this -> field -> param2 = '' ;
$this -> field -> param3 = '' ;
$this -> field -> name = '' ;
$this -> field -> description = '' ;
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
return true ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Set up the field object according to data in an object . Now is the time to clean it !
*
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function define_field ( $data ) {
$this -> field -> type = $this -> type ;
$this -> field -> dataid = $this -> data -> id ;
$this -> field -> name = trim ( $data -> name );
$this -> field -> description = trim ( $data -> description );
if ( isset ( $data -> param1 )) {
$this -> field -> param1 = trim ( $data -> param1 );
}
if ( isset ( $data -> param2 )) {
2006-03-23 03:48:58 +00:00
$this -> field -> param2 = trim ( $data -> param2 );
2006-03-22 08:07:26 +00:00
}
if ( isset ( $data -> param3 )) {
$this -> field -> param3 = trim ( $data -> param3 );
}
if ( isset ( $data -> param4 )) {
$this -> field -> param4 = trim ( $data -> param4 );
}
if ( isset ( $data -> param5 )) {
$this -> field -> param5 = trim ( $data -> param5 );
}
return true ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Insert a new field in the database
* We assume the field object is already defined as $this -> field
*
* @ global object
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function insert_field () {
2009-08-18 05:13:51 +00:00
global $DB , $OUTPUT ;
2008-06-06 08:04:22 +00:00
2006-03-22 08:07:26 +00:00
if ( empty ( $this -> field )) {
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( 'Programmer error: Field has not been defined yet! See define_field()' );
2006-03-22 08:07:26 +00:00
return false ;
}
2009-06-13 18:16:08 +00:00
$this -> field -> id = $DB -> insert_record ( 'data_fields' , $this -> field );
2006-03-22 08:07:26 +00:00
return true ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Update a field in the database
*
* @ global object
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function update_field () {
2008-06-06 08:04:22 +00:00
global $DB ;
2009-06-13 17:35:10 +00:00
$DB -> update_record ( 'data_fields' , $this -> field );
2006-03-22 08:07:26 +00:00
return true ;
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Delete a field completely
*
* @ global object
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function delete_field () {
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-22 08:07:26 +00:00
if ( ! empty ( $this -> field -> id )) {
$this -> delete_content ();
2008-09-14 08:22:44 +00:00
$DB -> delete_records ( 'data_fields' , array ( 'id' => $this -> field -> id ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
return true ;
}
2009-05-27 04:06:19 +00:00
/**
* Print the relevant form element in the ADD template for this field
*
* @ global object
* @ param int $recordid
* @ return string
*/
2006-03-22 08:07:26 +00:00
function display_add_field ( $recordid = 0 ){
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-22 08:07:26 +00:00
if ( $recordid ){
2008-06-06 08:04:22 +00:00
$content = $DB -> get_field ( 'data_content' , 'content' , array ( 'fieldid' => $this -> field -> id , 'recordid' => $recordid ));
2006-03-22 08:07:26 +00:00
} else {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$content = '' ;
}
2006-11-09 19:44:20 +00:00
2009-03-24 11:12:33 +00:00
// beware get_field returns false for new, empty records MDL-18567
if ( $content === false ) {
$content = '' ;
}
2006-12-12 20:10:32 +00:00
$str = '<div title="' . s ( $this -> field -> description ) . '">' ;
2012-08-15 17:45:48 +08:00
$str .= '<label class="accesshide" for="field_' . $this -> field -> id . '">' . $this -> field -> description . '</label>' ;
2012-08-20 16:35:28 +08:00
$str .= '<input class="basefieldinput" type="text" name="field_' . $this -> field -> id . '" id="field_' . $this -> field -> id . '" value="' . s ( $content ) . '" />' ;
2006-02-09 04:44:56 +00:00
$str .= '</div>' ;
2006-03-22 08:07:26 +00:00
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return $str ;
}
2009-05-27 04:06:19 +00:00
/**
* Print the relevant form element to define the attributes for this field
* viewable by teachers only .
*
* @ global object
* @ global object
* @ return void Output is echo ' d
*/
2006-03-22 08:07:26 +00:00
function display_edit_field () {
2009-08-06 08:21:01 +00:00
global $CFG , $DB , $OUTPUT ;
2006-03-22 08:07:26 +00:00
if ( empty ( $this -> field )) { // No field has been defined yet, try and make one
$this -> define_default_field ();
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> box_start ( 'generalbox boxaligncenter boxwidthwide' );
2006-03-22 08:07:26 +00:00
2007-01-04 21:32:36 +00:00
echo '<form id="editfield" action="' . $CFG -> wwwroot . '/mod/data/field.php" method="post">' . " \n " ;
2006-03-22 08:07:26 +00:00
echo '<input type="hidden" name="d" value="' . $this -> data -> id . '" />' . " \n " ;
if ( empty ( $this -> field -> id )) {
echo '<input type="hidden" name="mode" value="add" />' . " \n " ;
$savebutton = get_string ( 'add' );
} else {
echo '<input type="hidden" name="fid" value="' . $this -> field -> id . '" />' . " \n " ;
echo '<input type="hidden" name="mode" value="update" />' . " \n " ;
$savebutton = get_string ( 'savechanges' );
}
echo '<input type="hidden" name="type" value="' . $this -> type . '" />' . " \n " ;
echo '<input name="sesskey" value="' . sesskey () . '" type="hidden" />' . " \n " ;
2006-11-09 19:44:20 +00:00
2009-08-06 08:21:01 +00:00
echo $OUTPUT -> heading ( $this -> name ());
2006-03-22 08:07:26 +00:00
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
require_once ( $CFG -> dirroot . '/mod/data/field/' . $this -> type . '/mod.html' );
2006-03-22 08:07:26 +00:00
2008-12-10 06:48:54 +00:00
echo '<div class="mdl-align">' ;
2006-03-22 08:07:26 +00:00
echo '<input type="submit" value="' . $savebutton . '" />' . " \n " ;
2006-03-25 14:00:54 +00:00
echo '<input type="submit" name="cancel" value="' . get_string ( 'cancel' ) . '" />' . " \n " ;
2006-12-12 23:34:55 +00:00
echo '</div>' ;
2006-03-22 08:07:26 +00:00
echo '</form>' ;
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> box_end ();
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Display the content of the field in browse mode
*
* @ global object
* @ param int $recordid
* @ param object $template
* @ return bool | string
*/
2006-03-22 08:07:26 +00:00
function display_browse_field ( $recordid , $template ) {
2008-06-06 08:04:22 +00:00
global $DB ;
if ( $content = $DB -> get_record ( 'data_content' , array ( 'fieldid' => $this -> field -> id , 'recordid' => $recordid ))) {
2006-11-09 19:44:20 +00:00
if ( isset ( $content -> content )) {
2010-09-21 08:37:36 +00:00
$options = new stdClass ();
2006-03-26 15:54:41 +00:00
if ( $this -> field -> param1 == '1' ) { // We are autolinking this field, so disable linking within us
//$content->content = '<span class="nolink">'.$content->content.'</span>';
//$content->content1 = FORMAT_HTML;
$options -> filter = false ;
}
2006-02-03 10:42:14 +00:00
$options -> para = false ;
$str = format_text ( $content -> content , $content -> content1 , $options );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
} else {
$str = '' ;
}
return $str ;
}
return false ;
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Update the content of one data field in the data_content table
* @ global object
* @ param int $recordid
* @ param mixed $value
* @ param string $name
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function update_content ( $recordid , $value , $name = '' ){
2008-06-06 08:04:22 +00:00
global $DB ;
2010-09-21 08:37:36 +00:00
$content = new stdClass ();
2006-03-22 08:07:26 +00:00
$content -> fieldid = $this -> field -> id ;
2006-02-02 06:28:17 +00:00
$content -> recordid = $recordid ;
$content -> content = clean_param ( $value , PARAM_NOTAGS );
2006-03-22 08:07:26 +00:00
2008-06-06 08:04:22 +00:00
if ( $oldcontent = $DB -> get_record ( 'data_content' , array ( 'fieldid' => $this -> field -> id , 'recordid' => $recordid ))) {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$content -> id = $oldcontent -> id ;
2008-06-06 08:04:22 +00:00
return $DB -> update_record ( 'data_content' , $content );
2006-03-22 08:07:26 +00:00
} else {
2008-06-06 08:04:22 +00:00
return $DB -> insert_record ( 'data_content' , $content );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Delete all content associated with the field
*
* @ global object
* @ param int $recordid
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function delete_content ( $recordid = 0 ) {
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-22 08:07:26 +00:00
if ( $recordid ) {
2008-09-14 08:22:44 +00:00
$conditions = array ( 'fieldid' => $this -> field -> id , 'recordid' => $recordid );
2006-03-22 08:07:26 +00:00
} else {
2008-09-14 08:22:44 +00:00
$conditions = array ( 'fieldid' => $this -> field -> id );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
2011-01-07 11:12:50 +01:00
$rs = $DB -> get_recordset ( 'data_content' , $conditions );
if ( $rs -> valid ()) {
2008-09-14 08:22:44 +00:00
$fs = get_file_storage ();
foreach ( $rs as $content ) {
2010-07-03 13:37:13 +00:00
$fs -> delete_area_files ( $this -> context -> id , 'mod_data' , 'content' , $content -> id );
2008-09-14 08:22:44 +00:00
}
2006-03-22 08:07:26 +00:00
}
2011-01-07 11:12:50 +01:00
$rs -> close ();
2006-03-22 08:07:26 +00:00
2008-09-14 08:22:44 +00:00
return $DB -> delete_records ( 'data_content' , $conditions );
2006-03-22 08:07:26 +00:00
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Check if a field from an add form is empty
*
* @ param mixed $value
* @ param mixed $name
* @ return bool
*/
2006-02-06 09:13:37 +00:00
function notemptyfield ( $value , $name ) {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return ! empty ( $value );
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Just in case a field needs to print something before the whole form
*/
2006-03-22 08:07:26 +00:00
function print_before_form () {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-22 08:07:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Just in case a field needs to print something after the whole form
*/
2006-01-31 03:58:42 +00:00
function print_after_form () {
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Returns the sortable field for the content . By default , it ' s just content
* but for some plugins , it could be content 1 - content4
*
* @ return string
*/
2006-02-03 08:11:36 +00:00
function get_sort_field () {
return 'content' ;
}
2006-03-22 08:07:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Returns the SQL needed to refer to the column . Some fields may need to CAST () etc .
*
* @ param string $fieldname
* @ return string $fieldname
*/
2006-04-05 01:38:06 +00:00
function get_sort_sql ( $fieldname ) {
return $fieldname ;
}
2009-05-27 04:06:19 +00:00
/**
* Returns the name / type of the field
*
* @ return string
*/
2008-05-31 00:30:00 +00:00
function name () {
2006-03-22 08:07:26 +00:00
return get_string ( 'name' . $this -> type , 'data' );
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Prints the respective type icon
*
* @ global object
* @ return string
*/
2006-03-22 08:07:26 +00:00
function image () {
2009-07-02 12:25:19 +00:00
global $OUTPUT ;
2006-03-22 08:07:26 +00:00
2010-06-29 07:20:51 +00:00
$params = array ( 'd' => $this -> data -> id , 'fid' => $this -> field -> id , 'mode' => 'display' , 'sesskey' => sesskey ());
$link = new moodle_url ( '/mod/data/field.php' , $params );
$str = '<a href="' . $link -> out () . '">' ;
$str .= '<img src="' . $OUTPUT -> pix_url ( 'field/' . $this -> type , 'data' ) . '" ' ;
2007-01-08 01:09:54 +00:00
$str .= 'height="' . $this -> iconheight . '" width="' . $this -> iconwidth . '" alt="' . $this -> type . '" title="' . $this -> type . '" /></a>' ;
2006-03-22 08:07:26 +00:00
return $str ;
}
2009-05-27 04:06:19 +00:00
/**
* Per default , it is assumed that fields support text exporting .
* Override this ( return false ) on fields not supporting text exporting .
*
* @ return bool true
*/
2008-05-31 00:30:00 +00:00
function text_export_supported () {
return true ;
}
2006-11-09 19:44:20 +00:00
2009-05-27 04:06:19 +00:00
/**
* Per default , return the record ' s text value only from the " content " field .
* Override this in fields class if necesarry .
*
* @ param string $record
* @ return string
*/
2008-05-31 00:30:00 +00:00
function export_text_value ( $record ) {
if ( $this -> text_export_supported ()) {
return $record -> content ;
}
}
2006-03-22 08:07:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* @ param string $relativepath
* @ return bool false
*/
2008-09-14 08:22:44 +00:00
function file_ok ( $relativepath ) {
return false ;
}
2008-05-31 00:30:00 +00:00
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2009-05-27 04:06:19 +00:00
/**
* Given a template and a dataid , generate a default case template
*
* @ global object
* @ param object $data
* @ param string template [ addtemplate , singletemplate , listtempalte , rsstemplate ]
* @ param int $recordid
* @ param bool $form
* @ param bool $update
* @ return bool | string
*/
2006-03-25 14:57:36 +00:00
function data_generate_default_template ( & $data , $template , $recordid = 0 , $form = false , $update = true ) {
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-23 10:01:21 +00:00
2006-04-11 13:00:13 +00:00
if ( ! $data && ! $template ) {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return false ;
}
2006-12-11 08:55:40 +00:00
if ( $template == 'csstemplate' or $template == 'jstemplate' ) {
2006-06-02 04:29:11 +00:00
return '' ;
}
2006-11-09 19:44:20 +00:00
2008-05-31 00:30:00 +00:00
// get all the fields for that database
2008-06-06 08:04:22 +00:00
if ( $fields = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $data -> id ), 'id' )) {
2006-11-09 19:44:20 +00:00
2011-04-14 15:56:10 +08:00
$table = new html_table ();
$table -> attributes [ 'class' ] = 'mod-data-default-template' ;
$table -> colclasses = array ( 'template-field' , 'template-token' );
$table -> data = array ();
2006-03-24 02:09:15 +00:00
foreach ( $fields as $field ) {
2008-05-31 00:30:00 +00:00
if ( $form ) { // Print forms instead of data
2006-03-23 10:01:21 +00:00
$fieldobj = data_get_field ( $field , $data );
2011-04-14 15:56:10 +08:00
$token = $fieldobj -> display_add_field ( $recordid );
2008-05-31 00:30:00 +00:00
} else { // Just print the tag
2011-04-14 15:56:10 +08:00
$token = '[[' . $field -> name . ']]' ;
2006-03-23 10:01:21 +00:00
}
2011-04-14 15:56:10 +08:00
$table -> data [] = array (
$field -> name . ': ' ,
$token
);
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-12-13 21:02:01 +00:00
if ( $template == 'listtemplate' ) {
2011-04-14 15:56:10 +08:00
$cell = new html_table_cell ( '##edit## ##more## ##delete## ##approve## ##export##' );
$cell -> colspan = 2 ;
$cell -> attributes [ 'class' ] = 'controls' ;
$table -> data [] = new html_table_row ( array ( $cell ));
2006-12-13 21:02:01 +00:00
} else if ( $template == 'singletemplate' ) {
2011-04-14 15:56:10 +08:00
$cell = new html_table_cell ( '##edit## ##delete## ##approve## ##export##' );
$cell -> colspan = 2 ;
$cell -> attributes [ 'class' ] = 'controls' ;
$table -> data [] = new html_table_row ( array ( $cell ));
2008-04-16 11:51:50 +00:00
} else if ( $template == 'asearchtemplate' ) {
2011-05-11 13:32:36 +08:00
$row = new html_table_row ( array ( get_string ( 'authorfirstname' , 'data' ) . ': ' , '##firstname##' ));
2011-04-14 15:56:10 +08:00
$row -> attributes [ 'class' ] = 'searchcontrols' ;
$table -> data [] = $row ;
2011-05-11 13:32:36 +08:00
$row = new html_table_row ( array ( get_string ( 'authorlastname' , 'data' ) . ': ' , '##lastname##' ));
2011-04-14 15:56:10 +08:00
$row -> attributes [ 'class' ] = 'searchcontrols' ;
$table -> data [] = $row ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2011-04-14 15:56:10 +08:00
$str = html_writer :: start_tag ( 'div' , array ( 'class' => 'defaulttemplate' ));
$str .= html_writer :: table ( $table );
$str .= html_writer :: end_tag ( 'div' );
2006-03-23 10:01:21 +00:00
if ( $template == 'listtemplate' ){
2011-04-14 15:56:10 +08:00
$str .= html_writer :: empty_tag ( 'hr' );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-02-06 09:13:37 +00:00
2006-03-23 10:01:21 +00:00
if ( $update ) {
2010-09-21 08:37:36 +00:00
$newdata = new stdClass ();
2006-03-23 10:01:21 +00:00
$newdata -> id = $data -> id ;
2006-03-24 02:09:15 +00:00
$newdata -> { $template } = $str ;
2009-06-13 17:35:10 +00:00
$DB -> update_record ( 'data' , $newdata );
$data -> { $template } = $str ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-03-23 10:01:21 +00:00
return $str ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
2009-08-20 13:16:08 +00:00
* Search for a field name and replaces it with another one in all the
* form templates . Set $newfieldname as '' if you want to delete the
2009-05-27 04:06:19 +00:00
* field from the form .
*
* @ global object
* @ param object $data
* @ param string $searchfieldname
* @ param string $newfieldname
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function data_replace_field_in_templates ( $data , $searchfieldname , $newfieldname ) {
2008-06-06 08:04:22 +00:00
global $DB ;
2006-02-06 09:13:37 +00:00
if ( ! empty ( $newfieldname )) {
$prestring = '[[' ;
$poststring = ']]' ;
2006-12-12 20:10:32 +00:00
$idpart = '#id' ;
2006-02-27 04:13:03 +00:00
} else {
2006-02-06 09:13:37 +00:00
$prestring = '' ;
$poststring = '' ;
2006-12-12 20:10:32 +00:00
$idpart = '' ;
2006-02-06 09:13:37 +00:00
}
2006-11-09 19:44:20 +00:00
2010-09-21 08:37:36 +00:00
$newdata = new stdClass ();
2006-02-27 04:13:03 +00:00
$newdata -> id = $data -> id ;
2008-06-06 08:04:22 +00:00
$newdata -> singletemplate = str_ireplace ( '[[' . $searchfieldname . ']]' ,
$prestring . $newfieldname . $poststring , $data -> singletemplate );
2006-11-09 19:44:20 +00:00
2008-06-06 08:04:22 +00:00
$newdata -> listtemplate = str_ireplace ( '[[' . $searchfieldname . ']]' ,
$prestring . $newfieldname . $poststring , $data -> listtemplate );
2006-11-09 19:44:20 +00:00
2008-06-06 08:04:22 +00:00
$newdata -> addtemplate = str_ireplace ( '[[' . $searchfieldname . ']]' ,
$prestring . $newfieldname . $poststring , $data -> addtemplate );
2006-11-09 19:44:20 +00:00
2008-06-06 08:04:22 +00:00
$newdata -> addtemplate = str_ireplace ( '[[' . $searchfieldname . '#id]]' ,
$prestring . $newfieldname . $idpart . $poststring , $data -> addtemplate );
2006-12-12 20:10:32 +00:00
2008-06-06 08:04:22 +00:00
$newdata -> rsstemplate = str_ireplace ( '[[' . $searchfieldname . ']]' ,
$prestring . $newfieldname . $poststring , $data -> rsstemplate );
2006-11-09 19:44:20 +00:00
2008-06-06 08:04:22 +00:00
return $DB -> update_record ( 'data' , $newdata );
2006-02-06 09:13:37 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* Appends a new field at the end of the form template .
*
* @ global object
* @ param object $data
* @ param string $newfieldname
*/
2006-03-22 08:07:26 +00:00
function data_append_new_field_to_templates ( $data , $newfieldname ) {
2008-06-06 08:04:22 +00:00
global $DB ;
2006-03-22 08:07:26 +00:00
2010-09-21 08:37:36 +00:00
$newdata = new stdClass ();
2006-03-22 08:07:26 +00:00
$newdata -> id = $data -> id ;
2006-03-22 08:32:54 +00:00
$change = false ;
2006-03-22 08:07:26 +00:00
2006-02-06 09:13:37 +00:00
if ( ! empty ( $data -> singletemplate )) {
2008-06-06 08:04:22 +00:00
$newdata -> singletemplate = $data -> singletemplate . ' [[' . $newfieldname . ']]' ;
2006-03-22 08:32:54 +00:00
$change = true ;
2006-03-22 08:07:26 +00:00
}
if ( ! empty ( $data -> addtemplate )) {
2008-06-06 08:04:22 +00:00
$newdata -> addtemplate = $data -> addtemplate . ' [[' . $newfieldname . ']]' ;
2006-03-22 08:32:54 +00:00
$change = true ;
2006-02-06 09:13:37 +00:00
}
if ( ! empty ( $data -> rsstemplate )) {
2008-06-06 08:04:22 +00:00
$newdata -> rsstemplate = $data -> singletemplate . ' [[' . $newfieldname . ']]' ;
2006-03-22 08:32:54 +00:00
$change = true ;
}
if ( $change ) {
2008-06-06 08:04:22 +00:00
$DB -> update_record ( 'data' , $newdata );
2006-02-06 09:13:37 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
* given a field name
* this function creates an instance of the particular subfield class
*
* @ global object
* @ param string $name
* @ param object $data
* @ return object | bool
*/
2006-03-22 08:07:26 +00:00
function data_get_field_from_name ( $name , $data ){
2008-06-06 08:04:22 +00:00
global $DB ;
2009-09-28 16:08:17 +00:00
$field = $DB -> get_record ( 'data_fields' , array ( 'name' => $name , 'dataid' => $data -> id ));
2006-03-22 08:07:26 +00:00
if ( $field ) {
return data_get_field ( $field , $data );
} else {
return false ;
}
}
2009-05-27 04:06:19 +00:00
/**
* given a field id
* this function creates an instance of the particular subfield class
*
* @ global object
* @ param int $fieldid
* @ param object $data
* @ return bool | object
*/
2006-03-22 08:07:26 +00:00
function data_get_field_from_id ( $fieldid , $data ){
2008-06-06 08:04:22 +00:00
global $DB ;
2009-09-28 16:08:17 +00:00
$field = $DB -> get_record ( 'data_fields' , array ( 'id' => $fieldid , 'dataid' => $data -> id ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2006-03-22 08:07:26 +00:00
if ( $field ) {
return data_get_field ( $field , $data );
2006-02-06 05:31:52 +00:00
} else {
2006-02-06 05:36:34 +00:00
return false ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
* given a field id
* this function creates an instance of the particular subfield class
*
* @ global object
* @ param string $type
* @ param object $data
* @ return object
*/
2006-03-22 08:07:26 +00:00
function data_get_field_new ( $type , $data ) {
global $CFG ;
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
require_once ( $CFG -> dirroot . '/mod/data/field/' . $type . '/field.class.php' );
$newfield = 'data_field_' . $type ;
$newfield = new $newfield ( 0 , $data );
return $newfield ;
}
2009-05-27 04:06:19 +00:00
/**
* returns a subclass field object given a record of the field , used to
* invoke plugin methods
* input : $param $field - record from db
*
* @ global object
* @ param object $field
* @ param object $data
* @ param object $cm
* @ return object
*/
2008-09-14 08:22:44 +00:00
function data_get_field ( $field , $data , $cm = null ) {
2006-03-22 08:07:26 +00:00
global $CFG ;
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
if ( $field ) {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
require_once ( 'field/' . $field -> type . '/field.class.php' );
$newfield = 'data_field_' . $field -> type ;
2008-09-14 08:22:44 +00:00
$newfield = new $newfield ( $field , $data , $cm );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return $newfield ;
}
}
2008-09-14 08:22:44 +00:00
/**
* Given record object ( or id ), returns true if the record belongs to the current user
2009-05-27 04:06:19 +00:00
*
* @ global object
* @ global object
* @ param mixed $record record object or id
2008-09-14 08:22:44 +00:00
* @ return bool
*/
function data_isowner ( $record ) {
2008-06-06 08:04:22 +00:00
global $USER , $DB ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2010-03-31 07:41:31 +00:00
if ( ! isloggedin ()) { // perf shortcut
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return false ;
}
2008-09-14 08:22:44 +00:00
if ( ! is_object ( $record )) {
if ( ! $record = $DB -> get_record ( 'data_records' , array ( 'id' => $record ))) {
return false ;
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2008-09-14 08:22:44 +00:00
return ( $record -> userid == $USER -> id );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* has a user reached the max number of entries ?
*
* @ param object $data
* @ return bool
*/
2008-06-12 14:13:51 +00:00
function data_atmaxentries ( $data ){
if ( ! $data -> maxentries ){
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return false ;
2008-06-12 14:13:51 +00:00
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
} else {
return ( data_numentries ( $data ) >= $data -> maxentries );
}
}
2009-05-27 04:06:19 +00:00
/**
* returns the number of entries already made by this user
2009-08-20 13:16:08 +00:00
*
2009-05-27 04:06:19 +00:00
* @ global object
* @ global object
2009-08-20 13:16:08 +00:00
* @ param object $data
2009-05-27 04:06:19 +00:00
* @ return int
*/
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
function data_numentries ( $data ){
2008-09-14 08:22:44 +00:00
global $USER , $DB ;
2008-06-06 08:04:22 +00:00
$sql = 'SELECT COUNT(*) FROM {data_records} WHERE dataid=? AND userid=?' ;
return $DB -> count_records_sql ( $sql , array ( $data -> id , $USER -> id ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-05-27 04:06:19 +00:00
/**
2009-08-20 13:16:08 +00:00
* function that takes in a dataid and adds a record
2009-05-27 04:06:19 +00:00
* this is used everytime an add template is submitted
*
* @ global object
* @ global object
* @ param object $data
* @ param int $groupid
* @ return bool
*/
2006-03-22 08:07:26 +00:00
function data_add_record ( $data , $groupid = 0 ){
2008-06-06 08:04:22 +00:00
global $USER , $DB ;
2006-11-09 19:44:20 +00:00
2006-12-06 20:17:58 +00:00
$cm = get_coursemodule_from_instance ( 'data' , $data -> id );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2008-06-12 14:13:51 +00:00
2010-09-21 08:37:36 +00:00
$record = new stdClass ();
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$record -> userid = $USER -> id ;
2006-03-22 08:07:26 +00:00
$record -> dataid = $data -> id ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$record -> groupid = $groupid ;
2006-03-22 08:07:26 +00:00
$record -> timecreated = $record -> timemodified = time ();
2006-08-14 05:55:40 +00:00
if ( has_capability ( 'mod/data:approve' , $context )) {
2006-02-06 05:24:02 +00:00
$record -> approved = 1 ;
} else {
$record -> approved = 0 ;
}
2008-06-06 08:04:22 +00:00
return $DB -> insert_record ( 'data_records' , $record );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* check the multple existence any tag in a template
*
* check to see if there are 2 or more of the same tag being used .
*
* @ global object
* @ param int $dataid ,
2009-08-20 13:16:08 +00:00
* @ param string $template
2009-05-27 04:06:19 +00:00
* @ return bool
*/
2008-06-06 08:04:22 +00:00
function data_tags_check ( $dataid , $template ) {
2009-08-18 05:13:51 +00:00
global $DB , $OUTPUT ;
2008-06-06 08:04:22 +00:00
2008-05-31 00:30:00 +00:00
// first get all the possible tags
2008-06-06 08:04:22 +00:00
$fields = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $dataid ));
2008-05-31 00:30:00 +00:00
// then we generate strings to replace
$tagsok = true ; // let's be optimistic
2008-06-12 14:13:51 +00:00
foreach ( $fields as $field ){
2006-03-23 10:01:21 +00:00
$pattern = " / \ [ \ [ " . $field -> name . " \ ] \ ]/i " ;
2008-06-12 14:13:51 +00:00
if ( preg_match_all ( $pattern , $template , $dummy ) > 1 ){
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$tagsok = false ;
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( '[[' . $field -> name . ']] - ' . get_string ( 'multipletags' , 'data' ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
}
2008-05-31 00:30:00 +00:00
// else return true
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return $tagsok ;
}
2009-05-27 04:06:19 +00:00
/**
* Adds an instance of a data
*
2012-04-15 14:07:21 +02:00
* @ param stdClass $data
* @ param mod_data_mod_form $mform
* @ return int intance id
2009-05-27 04:06:19 +00:00
*/
2012-04-15 14:07:21 +02:00
function data_add_instance ( $data , $mform = null ) {
2008-09-14 08:22:44 +00:00
global $DB ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2006-09-24 13:58:54 +00:00
if ( empty ( $data -> assessed )) {
$data -> assessed = 0 ;
2006-02-08 04:58:21 +00:00
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$data -> timemodified = time ();
2009-06-13 18:16:08 +00:00
$data -> id = $DB -> insert_record ( 'data' , $data );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2007-06-05 22:58:37 +00:00
data_grade_item_update ( $data );
2008-06-12 14:13:51 +00:00
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return $data -> id ;
}
2009-05-27 04:06:19 +00:00
/**
* updates an instance of a data
*
* @ global object
* @ param object $data
* @ return bool
*/
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
function data_update_instance ( $data ) {
2009-08-18 05:13:51 +00:00
global $DB , $OUTPUT ;
2006-11-09 19:44:20 +00:00
2007-06-03 19:36:20 +00:00
$data -> timemodified = time ();
2008-06-12 14:13:51 +00:00
$data -> id = $data -> instance ;
2006-11-09 19:44:20 +00:00
2006-09-24 13:58:54 +00:00
if ( empty ( $data -> assessed )) {
$data -> assessed = 0 ;
2006-02-08 04:56:44 +00:00
}
2008-06-12 14:13:51 +00:00
2010-04-23 09:44:19 +00:00
if ( empty ( $data -> ratingtime ) or empty ( $data -> assessed )) {
$data -> assesstimestart = 0 ;
$data -> assesstimefinish = 0 ;
}
2008-04-24 17:11:40 +00:00
if ( empty ( $data -> notification )) {
$data -> notification = 0 ;
}
2009-06-13 17:55:51 +00:00
$DB -> update_record ( 'data' , $data );
2007-06-03 19:36:20 +00:00
data_grade_item_update ( $data );
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
return true ;
2008-06-12 14:13:51 +00:00
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* deletes an instance of a data
*
* @ global object
* @ param int $id
* @ return bool
*/
2008-05-31 00:30:00 +00:00
function data_delete_instance ( $id ) { // takes the dataid
2010-08-02 07:44:45 +00:00
global $DB , $CFG ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2008-09-14 08:22:44 +00:00
if ( ! $data = $DB -> get_record ( 'data' , array ( 'id' => $id ))) {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return false ;
}
2008-09-14 08:22:44 +00:00
$cm = get_coursemodule_from_instance ( 'data' , $data -> id );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2008-06-12 14:13:51 +00:00
2008-09-14 08:22:44 +00:00
/// Delete all the associated information
2006-11-09 19:44:20 +00:00
2008-09-14 08:22:44 +00:00
// files
$fs = get_file_storage ();
2010-07-03 13:37:13 +00:00
$fs -> delete_area_files ( $context -> id , 'mod_data' );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
2008-09-14 08:22:44 +00:00
// get all the records in this data
$sql = " SELECT r.id
FROM { data_records } r
WHERE r . dataid = ? " ;
2006-11-09 19:44:20 +00:00
2008-09-14 08:22:44 +00:00
$DB -> delete_records_select ( 'data_content' , " recordid IN ( $sql ) " , array ( $id ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
// delete all the records and fields
2008-06-01 21:36:11 +00:00
$DB -> delete_records ( 'data_records' , array ( 'dataid' => $id ));
$DB -> delete_records ( 'data_fields' , array ( 'dataid' => $id ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
// Delete the instance itself
2008-06-01 21:36:11 +00:00
$result = $DB -> delete_records ( 'data' , array ( 'id' => $id ));
2007-06-03 19:36:20 +00:00
2008-09-14 08:22:44 +00:00
// cleanup gradebook
2007-07-08 14:58:23 +00:00
data_grade_item_delete ( $data );
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
return $result ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* returns a summary of data activity of this user
*
* @ global object
* @ param object $course
* @ param object $user
* @ param object $mod
* @ param object $data
* @ return object | null
*/
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
function data_user_outline ( $course , $user , $mod , $data ) {
2009-10-27 12:37:15 +00:00
global $DB , $CFG ;
require_once ( " $CFG->libdir /gradelib.php " );
$grades = grade_get_grades ( $course -> id , 'mod' , 'data' , $data -> id , $user -> id );
if ( empty ( $grades -> items [ 0 ] -> grades )) {
$grade = false ;
} else {
$grade = reset ( $grades -> items [ 0 ] -> grades );
}
2008-06-06 08:04:22 +00:00
if ( $countrecords = $DB -> count_records ( 'data_records' , array ( 'dataid' => $data -> id , 'userid' => $user -> id ))) {
2010-09-21 08:37:36 +00:00
$result = new stdClass ();
2006-04-07 07:02:53 +00:00
$result -> info = get_string ( 'numrecords' , 'data' , $countrecords );
2008-06-06 08:04:22 +00:00
$lastrecord = $DB -> get_record_sql ( ' SELECT id , timemodified FROM { data_records }
WHERE dataid = ? AND userid = ?
ORDER BY timemodified DESC ' , array ( $data -> id , $user -> id ), true );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$result -> time = $lastrecord -> timemodified ;
2009-10-27 12:37:15 +00:00
if ( $grade ) {
$result -> info .= ', ' . get_string ( 'grade' ) . ': ' . $grade -> str_long_grade ;
}
return $result ;
} else if ( $grade ) {
2010-09-21 08:37:36 +00:00
$result = new stdClass ();
2009-10-27 12:37:15 +00:00
$result -> info = get_string ( 'grade' ) . ': ' . $grade -> str_long_grade ;
2011-05-06 16:15:49 +08:00
//datesubmitted == time created. dategraded == time modified or time overridden
//if grade was last modified by the user themselves use date graded. Otherwise use date submitted
2011-05-17 11:58:22 +02:00
//TODO: move this copied & pasted code somewhere in the grades API. See MDL-26704
2011-05-06 16:15:49 +08:00
if ( $grade -> usermodified == $user -> id || empty ( $grade -> datesubmitted )) {
$result -> time = $grade -> dategraded ;
} else {
$result -> time = $grade -> datesubmitted ;
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
return $result ;
}
return NULL ;
}
2009-05-27 04:06:19 +00:00
/**
* Prints all the records uploaded by this user
*
* @ global object
* @ param object $course
* @ param object $user
* @ param object $mod
* @ param object $data
*/
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
function data_user_complete ( $course , $user , $mod , $data ) {
2009-10-27 12:37:15 +00:00
global $DB , $CFG , $OUTPUT ;
require_once ( " $CFG->libdir /gradelib.php " );
$grades = grade_get_grades ( $course -> id , 'mod' , 'data' , $data -> id , $user -> id );
if ( ! empty ( $grades -> items [ 0 ] -> grades )) {
$grade = reset ( $grades -> items [ 0 ] -> grades );
echo $OUTPUT -> container ( get_string ( 'grade' ) . ': ' . $grade -> str_long_grade );
if ( $grade -> str_feedback ) {
echo $OUTPUT -> container ( get_string ( 'feedback' ) . ': ' . $grade -> str_feedback );
}
}
2008-06-06 08:04:22 +00:00
if ( $records = $DB -> get_records ( 'data_records' , array ( 'dataid' => $data -> id , 'userid' => $user -> id ), 'timemodified DESC' )) {
2006-03-29 08:49:28 +00:00
data_print_template ( 'singletemplate' , $records , $data );
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
}
2007-06-03 19:36:20 +00:00
/**
* Return grade for given user or all users .
*
2009-05-27 04:06:19 +00:00
* @ global object
* @ param object $data
2007-06-03 19:36:20 +00:00
* @ param int $userid optional user id , 0 means all users
* @ return array array of grades , false if none
*/
2007-06-05 22:58:37 +00:00
function data_get_user_grades ( $data , $userid = 0 ) {
2010-04-23 09:44:19 +00:00
global $CFG ;
require_once ( $CFG -> dirroot . '/rating/lib.php' );
2007-06-03 19:36:20 +00:00
2011-05-11 13:32:36 +08:00
$ratingoptions = new stdClass ;
$ratingoptions -> component = 'mod_data' ;
$ratingoptions -> ratingarea = 'entry' ;
2010-04-23 09:44:19 +00:00
$ratingoptions -> modulename = 'data' ;
$ratingoptions -> moduleid = $data -> id ;
2007-06-03 19:36:20 +00:00
2010-04-23 09:44:19 +00:00
$ratingoptions -> userid = $userid ;
$ratingoptions -> aggregationmethod = $data -> assessed ;
$ratingoptions -> scaleid = $data -> scale ;
$ratingoptions -> itemtable = 'data_records' ;
$ratingoptions -> itemtableusercolumn = 'userid' ;
2007-06-03 19:36:20 +00:00
2011-05-11 13:32:36 +08:00
$rm = new rating_manager ();
2010-04-23 09:44:19 +00:00
return $rm -> get_user_grades ( $ratingoptions );
2007-06-03 19:36:20 +00:00
}
/**
2008-08-16 12:16:01 +00:00
* Update activity grades
2007-06-03 19:36:20 +00:00
*
2012-01-06 11:52:46 +07:00
* @ category grade
2008-08-16 12:16:01 +00:00
* @ param object $data
* @ param int $userid specific user only , 0 means all
2009-05-27 04:06:19 +00:00
* @ param bool $nullifnone
2007-06-03 19:36:20 +00:00
*/
2008-08-16 12:16:01 +00:00
function data_update_grades ( $data , $userid = 0 , $nullifnone = true ) {
2008-06-06 08:04:22 +00:00
global $CFG , $DB ;
require_once ( $CFG -> libdir . '/gradelib.php' );
2007-06-03 19:36:20 +00:00
2008-08-16 12:16:01 +00:00
if ( ! $data -> assessed ) {
data_grade_item_update ( $data );
2008-06-12 14:13:51 +00:00
2008-08-16 12:16:01 +00:00
} else if ( $grades = data_get_user_grades ( $data , $userid )) {
data_grade_item_update ( $data , $grades );
2008-06-12 14:13:51 +00:00
2008-08-16 12:16:01 +00:00
} else if ( $userid and $nullifnone ) {
2010-09-21 08:37:36 +00:00
$grade = new stdClass ();
2008-08-16 12:16:01 +00:00
$grade -> userid = $userid ;
$grade -> rawgrade = NULL ;
data_grade_item_update ( $data , $grade );
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
} else {
2008-08-16 12:16:01 +00:00
data_grade_item_update ( $data );
}
}
/**
* Update all grades in gradebook .
2009-05-27 04:06:19 +00:00
*
* @ global object
2008-08-16 12:16:01 +00:00
*/
function data_upgrade_grades () {
global $DB ;
$sql = " SELECT COUNT('x')
FROM { data } d , { course_modules } cm , { modules } m
WHERE m . name = 'data' AND m . id = cm . module AND cm . instance = d . id " ;
$count = $DB -> count_records_sql ( $sql );
$sql = " SELECT d.*, cm.idnumber AS cmidnumber, d.course AS courseid
FROM { data } d , { course_modules } cm , { modules } m
WHERE m . name = 'data' AND m . id = cm . module AND cm . instance = d . id " ;
2011-01-07 11:12:50 +01:00
$rs = $DB -> get_recordset_sql ( $sql );
if ( $rs -> valid ()) {
2008-08-16 12:16:01 +00:00
// too much debug output
$pbar = new progress_bar ( 'dataupgradegrades' , 500 , true );
$i = 0 ;
foreach ( $rs as $data ) {
$i ++ ;
upgrade_set_timeout ( 60 * 5 ); // set up timeout, may also abort execution
data_update_grades ( $data , 0 , false );
$pbar -> update ( $i , $count , " Updating Database grades ( $i / $count ). " );
2007-06-03 19:36:20 +00:00
}
}
2011-01-07 11:12:50 +01:00
$rs -> close ();
2007-06-03 19:36:20 +00:00
}
/**
2007-06-05 22:58:37 +00:00
* Update / create grade item for given data
2007-06-03 19:36:20 +00:00
*
2012-01-06 11:52:46 +07:00
* @ category grade
* @ param stdClass $data A database instance with extra cmidnumber property
* @ param mixed $grades Optional array / object of grade ( s ); 'reset' means reset grades in gradebook
2007-06-03 19:36:20 +00:00
* @ return object grade_item
*/
2007-11-29 14:43:04 +00:00
function data_grade_item_update ( $data , $grades = NULL ) {
2007-06-05 22:58:37 +00:00
global $CFG ;
2008-06-06 08:04:22 +00:00
require_once ( $CFG -> libdir . '/gradelib.php' );
2007-06-03 19:36:20 +00:00
2007-08-20 10:52:59 +00:00
$params = array ( 'itemname' => $data -> name , 'idnumber' => $data -> cmidnumber );
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
if ( ! $data -> assessed or $data -> scale == 0 ) {
2007-06-05 22:58:37 +00:00
$params [ 'gradetype' ] = GRADE_TYPE_NONE ;
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
} else if ( $data -> scale > 0 ) {
$params [ 'gradetype' ] = GRADE_TYPE_VALUE ;
$params [ 'grademax' ] = $data -> scale ;
$params [ 'grademin' ] = 0 ;
2008-06-12 14:13:51 +00:00
2007-06-03 19:36:20 +00:00
} else if ( $data -> scale < 0 ) {
$params [ 'gradetype' ] = GRADE_TYPE_SCALE ;
$params [ 'scaleid' ] = - $data -> scale ;
}
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
if ( $grades === 'reset' ) {
$params [ 'reset' ] = true ;
$grades = NULL ;
}
return grade_update ( 'mod/data' , $data -> course , 'mod' , 'data' , $data -> id , 0 , $grades , $params );
2007-06-03 19:36:20 +00:00
}
/**
* Delete grade item for given data
*
2012-01-06 11:52:46 +07:00
* @ category grade
2007-06-03 19:36:20 +00:00
* @ param object $data object
* @ return object grade_item
*/
function data_grade_item_delete ( $data ) {
2007-06-05 22:58:37 +00:00
global $CFG ;
require_once ( $CFG -> libdir . '/gradelib.php' );
2008-06-12 14:13:51 +00:00
2007-06-06 23:04:24 +00:00
return grade_update ( 'mod/data' , $data -> course , 'mod' , 'data' , $data -> id , 0 , NULL , array ( 'deleted' => 1 ));
2007-06-03 19:36:20 +00:00
}
2008-05-31 00:30:00 +00:00
// junk functions
2009-05-27 04:06:19 +00:00
/**
2009-08-20 13:16:08 +00:00
* takes a list of records , the current data , a search string ,
2009-05-27 04:06:19 +00:00
* and mode to display prints the translated template
*
* @ global object
* @ global object
* @ param string $template
2009-08-20 13:16:08 +00:00
* @ param array $records
2009-05-27 04:06:19 +00:00
* @ param object $data
2009-08-20 13:16:08 +00:00
* @ param string $search
2009-05-27 04:06:19 +00:00
* @ param int $page
* @ param bool $return
* @ return mixed
*/
2008-10-24 20:17:10 +00:00
function data_print_template ( $template , $records , $data , $search = '' , $page = 0 , $return = false ) {
2009-07-02 11:09:15 +00:00
global $CFG , $DB , $OUTPUT ;
2006-12-06 20:17:58 +00:00
$cm = get_coursemodule_from_instance ( 'data' , $data -> id );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2008-06-12 14:13:51 +00:00
2006-03-29 08:49:28 +00:00
static $fields = NULL ;
static $isteacher ;
2006-04-07 07:02:53 +00:00
static $dataid = NULL ;
2008-06-12 14:13:51 +00:00
2006-04-07 07:02:53 +00:00
if ( empty ( $dataid )) {
$dataid = $data -> id ;
} else if ( $dataid != $data -> id ) {
$fields = NULL ;
}
2008-06-12 14:13:51 +00:00
2006-03-29 08:49:28 +00:00
if ( empty ( $fields )) {
2008-06-06 08:04:22 +00:00
$fieldrecords = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $data -> id ));
2006-03-29 08:49:28 +00:00
foreach ( $fieldrecords as $fieldrecord ) {
$fields [] = data_get_field ( $fieldrecord , $data );
}
2006-08-30 08:43:17 +00:00
$isteacher = has_capability ( 'mod/data:managetemplates' , $context );
2006-03-29 08:49:28 +00:00
}
2008-06-12 14:13:51 +00:00
2006-04-05 01:38:06 +00:00
if ( empty ( $records )) {
return ;
}
2008-06-12 14:13:51 +00:00
2012-02-28 17:15:28 +00:00
// Check whether this activity is read-only at present
$readonly = data_in_readonly_period ( $data );
2008-05-31 09:51:48 +00:00
foreach ( $records as $record ) { // Might be just one for the single template
2008-06-12 14:13:51 +00:00
2008-05-31 00:30:00 +00:00
// Replacing tags
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$patterns = array ();
$replacement = array ();
2008-06-12 14:13:51 +00:00
2008-05-31 00:30:00 +00:00
// Then we generate strings to replace for normal tags
2006-03-29 08:49:28 +00:00
foreach ( $fields as $field ) {
2006-12-08 22:29:11 +00:00
$patterns [] = '[[' . $field -> field -> name . ']]' ;
2006-03-23 10:01:21 +00:00
$replacement [] = highlight ( $search , $field -> display_browse_field ( $record -> id , $template ));
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2008-06-12 14:13:51 +00:00
2008-05-31 00:30:00 +00:00
// Replacing special tags (##Edit##, ##Delete##, ##More##)
2006-12-12 23:34:55 +00:00
$patterns [] = '##edit##' ;
$patterns [] = '##delete##' ;
2012-02-28 17:15:28 +00:00
if ( has_capability ( 'mod/data:manageentries' , $context ) || ( ! $readonly && data_isowner ( $record -> id ))) {
2006-04-05 01:38:06 +00:00
$replacement [] = '<a href="' . $CFG -> wwwroot . '/mod/data/edit.php?d='
2009-12-16 21:50:45 +00:00
. $data -> id . '&rid=' . $record -> id . '&sesskey=' . sesskey () . '"><img src="' . $OUTPUT -> pix_url ( 't/edit' ) . '" class="iconsmall" alt="' . get_string ( 'edit' ) . '" title="' . get_string ( 'edit' ) . '" /></a>' ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$replacement [] = '<a href="' . $CFG -> wwwroot . '/mod/data/view.php?d='
2009-12-16 21:50:45 +00:00
. $data -> id . '&delete=' . $record -> id . '&sesskey=' . sesskey () . '"><img src="' . $OUTPUT -> pix_url ( 't/delete' ) . '" class="iconsmall" alt="' . get_string ( 'delete' ) . '" title="' . get_string ( 'delete' ) . '" /></a>' ;
2008-04-17 08:11:23 +00:00
} else {
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
$replacement [] = '' ;
2008-04-19 15:33:06 +00:00
$replacement [] = '' ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2008-10-24 20:17:10 +00:00
$moreurl = $CFG -> wwwroot . '/mod/data/view.php?d=' . $data -> id . '&rid=' . $record -> id ;
2008-11-18 00:10:13 +00:00
if ( $search ) {
$moreurl .= '&filter=1' ;
}
2006-12-12 23:34:55 +00:00
$patterns [] = '##more##' ;
2009-12-16 21:50:45 +00:00
$replacement [] = '<a href="' . $moreurl . '"><img src="' . $OUTPUT -> pix_url ( 'i/search' ) . '" class="iconsmall" alt="' . get_string ( 'more' , 'data' ) . '" title="' . get_string ( 'more' , 'data' ) . '" /></a>' ;
2008-10-24 20:17:10 +00:00
2006-12-12 23:34:55 +00:00
$patterns [] = '##moreurl##' ;
2008-10-24 20:17:10 +00:00
$replacement [] = $moreurl ;
2006-03-26 05:03:10 +00:00
2006-12-12 23:34:55 +00:00
$patterns [] = '##user##' ;
2006-04-05 01:38:06 +00:00
$replacement [] = '<a href="' . $CFG -> wwwroot . '/user/view.php?id=' . $record -> userid .
'&course=' . $data -> course . '">' . fullname ( $record ) . '</a>' ;
2008-08-14 10:37:40 +00:00
$patterns [] = '##export##' ;
2011-06-21 10:35:53 +08:00
if ( ! empty ( $CFG -> enableportfolios ) && ( $template == 'singletemplate' || $template == 'listtemplate' )
2008-08-14 10:37:40 +00:00
&& (( has_capability ( 'mod/data:exportentry' , $context )
|| ( data_isowner ( $record -> id ) && has_capability ( 'mod/data:exportownentry' , $context ))))) {
2009-12-12 11:27:07 +00:00
require_once ( $CFG -> libdir . '/portfoliolib.php' );
2008-09-11 13:42:58 +00:00
$button = new portfolio_add_button ();
2009-12-12 11:27:07 +00:00
$button -> set_callback_options ( 'data_portfolio_caller' , array ( 'id' => $cm -> id , 'recordid' => $record -> id ), '/mod/data/locallib.php' );
2008-10-11 17:33:20 +00:00
list ( $formats , $files ) = data_portfolio_caller :: formats ( $fields , $record );
2008-09-16 15:48:24 +00:00
$button -> set_formats ( $formats );
2008-09-11 13:42:58 +00:00
$replacement [] = $button -> to_html ( PORTFOLIO_ADD_ICON_LINK );
2008-08-14 10:37:40 +00:00
} else {
$replacement [] = '' ;
}
2008-09-14 08:22:44 +00:00
2008-04-11 02:34:11 +00:00
$patterns [] = '##timeadded##' ;
2008-09-14 08:22:44 +00:00
$replacement [] = userdate ( $record -> timecreated );
2008-04-11 02:34:11 +00:00
$patterns [] = '##timemodified##' ;
2008-04-11 03:13:54 +00:00
$replacement [] = userdate ( $record -> timemodified );
2006-03-26 05:03:10 +00:00
2006-12-12 23:34:55 +00:00
$patterns [] = '##approve##' ;
2008-06-12 14:13:51 +00:00
if ( has_capability ( 'mod/data:approve' , $context ) && ( $data -> approval ) && ( ! $record -> approved )){
2011-09-16 11:44:14 +08:00
$replacement [] = '<span class="approve"><a href="' . $CFG -> wwwroot . '/mod/data/view.php?d=' . $data -> id . '&approve=' . $record -> id . '&sesskey=' . sesskey () . '"><img src="' . $OUTPUT -> pix_url ( 'i/approve' ) . '" class="iconsmall" alt="' . get_string ( 'approve' ) . '" /></a></span>' ;
2006-03-26 05:03:10 +00:00
} else {
2006-02-06 05:24:02 +00:00
$replacement [] = '' ;
}
2006-11-09 19:44:20 +00:00
2006-12-12 23:34:55 +00:00
$patterns [] = '##comments##' ;
2006-02-14 03:17:21 +00:00
if (( $template == 'listtemplate' ) && ( $data -> comments )) {
2009-11-18 06:00:48 +00:00
if ( ! empty ( $CFG -> usecomments )) {
2010-03-15 07:59:28 +00:00
require_once ( $CFG -> dirroot . '/comment/lib.php' );
2010-04-09 09:03:51 +00:00
list ( $context , $course , $cm ) = get_context_info_array ( $context -> id );
2010-09-21 08:54:01 +00:00
$cmt = new stdClass ();
2009-11-18 06:00:48 +00:00
$cmt -> context = $context ;
2010-04-09 09:03:51 +00:00
$cmt -> course = $course ;
$cmt -> cm = $cm ;
$cmt -> area = 'database_entry' ;
2009-11-18 06:00:48 +00:00
$cmt -> itemid = $record -> id ;
$cmt -> showcount = true ;
2010-08-25 03:50:19 +00:00
$cmt -> component = 'mod_data' ;
2009-11-18 06:00:48 +00:00
$comment = new comment ( $cmt );
2010-03-15 07:59:28 +00:00
$replacement [] = $comment -> output ( true );
2009-11-18 06:00:48 +00:00
}
2006-02-14 03:17:21 +00:00
} else {
$replacement [] = '' ;
}
2006-02-06 05:24:02 +00:00
2008-05-31 00:30:00 +00:00
// actual replacement of the tags
2006-12-08 22:29:11 +00:00
$newtext = str_ireplace ( $patterns , $replacement , $data -> { $template });
2006-12-11 09:35:27 +00:00
2008-05-31 00:30:00 +00:00
// no more html formatting and filtering - see MDL-6635
2006-12-17 21:48:51 +00:00
if ( $return ) {
return $newtext ;
} else {
echo $newtext ;
2008-06-12 14:13:51 +00:00
2006-12-17 21:48:51 +00:00
// hack alert - return is always false in singletemplate anyway ;-)
/**********************************
* Printing Ratings Form *
*********************************/
if ( $template == 'singletemplate' ) { //prints ratings options
data_print_ratings ( $data , $record );
}
2008-06-12 14:13:51 +00:00
2006-12-17 21:48:51 +00:00
/**********************************
2010-04-23 09:44:19 +00:00
* Printing Comments Form *
2006-12-17 21:48:51 +00:00
*********************************/
2010-04-23 09:44:19 +00:00
if (( $template == 'singletemplate' ) && ( $data -> comments )) {
2009-11-18 06:00:48 +00:00
if ( ! empty ( $CFG -> usecomments )) {
2010-03-15 07:59:28 +00:00
require_once ( $CFG -> dirroot . '/comment/lib.php' );
2010-04-09 09:03:51 +00:00
list ( $context , $course , $cm ) = get_context_info_array ( $context -> id );
2010-09-21 08:54:01 +00:00
$cmt = new stdClass ();
2009-11-18 06:00:48 +00:00
$cmt -> context = $context ;
2010-04-09 09:03:51 +00:00
$cmt -> course = $course ;
$cmt -> cm = $cm ;
$cmt -> area = 'database_entry' ;
2009-11-18 06:00:48 +00:00
$cmt -> itemid = $record -> id ;
$cmt -> showcount = true ;
2010-08-25 03:50:19 +00:00
$cmt -> component = 'mod_data' ;
2009-11-18 06:00:48 +00:00
$comment = new comment ( $cmt );
2010-03-15 07:59:28 +00:00
$comment -> output ( false );
2009-11-18 06:00:48 +00:00
}
2006-12-17 21:48:51 +00:00
}
2006-02-14 03:17:21 +00:00
}
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
}
2010-04-23 09:44:19 +00:00
/**
* Return rating related permissions
2011-05-11 13:32:36 +08:00
*
* @ param string $contextid the context id
* @ param string $component the component to get rating permissions for
* @ param string $ratingarea the rating area to get permissions for
2010-04-23 09:44:19 +00:00
* @ return array an associative array of the user ' s rating permissions
*/
2011-05-11 13:32:36 +08:00
function data_rating_permissions ( $contextid , $component , $ratingarea ) {
2012-08-21 14:20:30 +08:00
$context = context :: instance_by_id ( $contextid , MUST_EXIST );
2011-05-11 13:32:36 +08:00
if ( $component != 'mod_data' || $ratingarea != 'entry' ) {
2010-04-23 09:44:19 +00:00
return null ;
}
2011-05-11 13:32:36 +08:00
return array (
'view' => has_capability ( 'mod/data:viewrating' , $context ),
'viewany' => has_capability ( 'mod/data:viewanyrating' , $context ),
'viewall' => has_capability ( 'mod/data:viewallratings' , $context ),
'rate' => has_capability ( 'mod/data:rate' , $context )
);
2010-04-23 09:44:19 +00:00
}
2010-05-21 07:50:38 +00:00
/**
2011-04-01 17:20:33 +08:00
* Validates a submitted rating
* @ param array $params submitted data
* context => object the context in which the rated items exists [ required ]
* itemid => int the ID of the object being rated
* scaleid => int the scale from which the user can select a rating . Used for bounds checking . [ required ]
* rating => int the submitted rating
* rateduserid => int the id of the user whose items have been rated . NOT the user who submitted the ratings . 0 to update all . [ required ]
* aggregation => int the aggregation method to apply when calculating grades ie RATING_AGGREGATE_AVERAGE [ required ]
2011-05-04 15:00:16 +08:00
* @ return boolean true if the rating is valid . Will throw rating_exception if not
2010-05-21 07:50:38 +00:00
*/
2011-05-04 15:00:16 +08:00
function data_rating_validate ( $params ) {
2011-04-01 17:20:33 +08:00
global $DB , $USER ;
2011-05-11 13:32:36 +08:00
// Check the component is mod_data
if ( $params [ 'component' ] != 'mod_data' ) {
throw new rating_exception ( 'invalidcomponent' );
2011-04-01 17:20:33 +08:00
}
2011-05-11 13:32:36 +08:00
// Check the ratingarea is entry (the only rating area in data module)
if ( $params [ 'ratingarea' ] != 'entry' ) {
throw new rating_exception ( 'invalidratingarea' );
}
// Check the rateduserid is not the current user .. you can't rate your own entries
if ( $params [ 'rateduserid' ] == $USER -> id ) {
throw new rating_exception ( 'nopermissiontorate' );
}
$datasql = " SELECT d.id as dataid, d.scale, d.course, r.userid as userid, d.approval, r.approved, r.timecreated, d.assesstimestart, d.assesstimefinish, r.groupid
2011-04-01 17:20:33 +08:00
FROM { data_records } r
JOIN { data } d ON r . dataid = d . id
WHERE r . id = : itemid " ;
$dataparams = array ( 'itemid' => $params [ 'itemid' ]);
if ( ! $info = $DB -> get_record_sql ( $datasql , $dataparams )) {
2011-05-04 15:00:16 +08:00
//item doesn't exist
throw new rating_exception ( 'invaliditemid' );
2011-04-01 17:20:33 +08:00
}
2011-05-09 16:34:58 +08:00
if ( $info -> scale != $params [ 'scaleid' ]) {
//the scale being submitted doesnt match the one in the database
throw new rating_exception ( 'invalidscaleid' );
}
//check that the submitted rating is valid for the scale
2011-05-25 12:00:16 +02:00
// lower limit
if ( $params [ 'rating' ] < 0 && $params [ 'rating' ] != RATING_UNSET_RATING ) {
2011-05-09 16:34:58 +08:00
throw new rating_exception ( 'invalidnum' );
2011-05-25 12:00:16 +02:00
}
// upper limit
if ( $info -> scale < 0 ) {
2011-05-09 16:34:58 +08:00
//its a custom scale
2011-05-11 13:32:36 +08:00
$scalerecord = $DB -> get_record ( 'scale' , array ( 'id' => - $info -> scale ));
2011-05-09 16:34:58 +08:00
if ( $scalerecord ) {
$scalearray = explode ( ',' , $scalerecord -> scale );
if ( $params [ 'rating' ] > count ( $scalearray )) {
throw new rating_exception ( 'invalidnum' );
}
} else {
throw new rating_exception ( 'invalidscaleid' );
}
} else if ( $params [ 'rating' ] > $info -> scale ) {
//if its numeric and submitted rating is above maximum
throw new rating_exception ( 'invalidnum' );
}
2011-04-01 17:20:33 +08:00
if ( $info -> approval && ! $info -> approved ) {
//database requires approval but this item isnt approved
2011-05-04 15:00:16 +08:00
throw new rating_exception ( 'nopermissiontorate' );
2011-04-01 17:20:33 +08:00
}
2011-05-11 13:32:36 +08:00
// check the item we're rating was created in the assessable time window
2011-04-01 17:20:33 +08:00
if ( ! empty ( $info -> assesstimestart ) && ! empty ( $info -> assesstimefinish )) {
if ( $info -> timecreated < $info -> assesstimestart || $info -> timecreated > $info -> assesstimefinish ) {
2011-05-04 15:00:16 +08:00
throw new rating_exception ( 'notavailable' );
2011-04-01 17:20:33 +08:00
}
}
2011-05-11 13:32:36 +08:00
$course = $DB -> get_record ( 'course' , array ( 'id' => $info -> course ), '*' , MUST_EXIST );
$cm = get_coursemodule_from_instance ( 'data' , $info -> dataid , $course -> id , false , MUST_EXIST );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2011-04-01 17:20:33 +08:00
2011-05-11 13:32:36 +08:00
// if the supplied context doesnt match the item's context
if ( $context -> id != $params [ 'context' ] -> id ) {
2011-05-04 15:00:16 +08:00
throw new rating_exception ( 'invalidcontext' );
2011-04-01 17:20:33 +08:00
}
// Make sure groups allow this user to see the item they're rating
2011-05-11 13:32:36 +08:00
$groupid = $info -> groupid ;
2011-04-01 17:20:33 +08:00
if ( $groupid > 0 and $groupmode = groups_get_activity_groupmode ( $cm , $course )) { // Groups are being used
if ( ! groups_group_exists ( $groupid )) { // Can't find group
2011-05-04 15:00:16 +08:00
throw new rating_exception ( 'cannotfindgroup' ); //something is wrong
2011-04-01 17:20:33 +08:00
}
if ( ! groups_is_member ( $groupid ) and ! has_capability ( 'moodle/site:accessallgroups' , $context )) {
// do not allow rating of posts from other groups when in SEPARATEGROUPS or VISIBLEGROUPS
2011-05-04 15:00:16 +08:00
throw new rating_exception ( 'notmemberofgroup' );
2011-04-01 17:20:33 +08:00
}
}
return true ;
2010-05-21 07:50:38 +00:00
}
2006-02-13 07:57:54 +00:00
2009-05-27 04:06:19 +00:00
/**
2009-08-20 13:16:08 +00:00
* function that takes in the current data , number of items per page ,
* a search string and prints a preference box in view . php
*
* This preference box prints a searchable advanced search template if
* a ) A template is defined
* b ) The advanced search checkbox is checked .
2009-05-27 04:06:19 +00:00
*
* @ global object
* @ global object
2009-08-20 13:16:08 +00:00
* @ param object $data
* @ param int $perpage
2009-05-27 04:06:19 +00:00
* @ param string $search
* @ param string $sort
* @ param string $order
* @ param array $search_array
* @ param int $advanced
* @ param string $mode
* @ return void
*/
2007-02-26 06:56:05 +00:00
function data_print_preference_form ( $data , $perpage , $search , $sort = '' , $order = 'ASC' , $search_array = '' , $advanced = 0 , $mode = '' ){
2009-08-17 15:19:49 +00:00
global $CFG , $DB , $PAGE , $OUTPUT ;
2008-09-14 08:22:44 +00:00
2007-02-26 06:56:05 +00:00
$cm = get_coursemodule_from_instance ( 'data' , $data -> id );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2007-02-26 06:56:05 +00:00
echo '<br /><div class="datapreferences">' ;
2007-01-04 21:32:36 +00:00
echo '<form id="options" action="view.php" method="get">' ;
2007-02-26 06:56:05 +00:00
echo '<div>' ;
2006-03-26 05:03:10 +00:00
echo '<input type="hidden" name="d" value="' . $data -> id . '" />' ;
2007-02-26 06:56:05 +00:00
if ( $mode == 'asearch' ) {
$advanced = 1 ;
echo '<input type="hidden" name="mode" value="list" />' ;
}
2006-12-13 09:22:47 +00:00
echo '<label for="pref_perpage">' . get_string ( 'pagesize' , 'data' ) . '</label> ' ;
2006-12-13 09:38:46 +00:00
$pagesizes = array ( 2 => 2 , 3 => 3 , 4 => 4 , 5 => 5 , 6 => 6 , 7 => 7 , 8 => 8 , 9 => 9 , 10 => 10 , 15 => 15 ,
2006-02-06 05:24:02 +00:00
20 => 20 , 30 => 30 , 40 => 40 , 50 => 50 , 100 => 100 , 200 => 200 , 300 => 300 , 400 => 400 , 500 => 500 , 1000 => 1000 );
2010-01-16 18:29:51 +00:00
echo html_writer :: select ( $pagesizes , 'perpage' , $perpage , false , array ( 'id' => 'pref_perpage' ));
2012-08-20 17:16:15 +08:00
2007-02-26 06:56:05 +00:00
if ( $advanced ) {
2012-08-20 17:16:15 +08:00
$regsearchclass = 'search_none' ;
$advancedsearchclass = 'search_inline' ;
} else {
$regsearchclass = 'search_inline' ;
$advancedsearchclass = 'search_none' ;
2007-02-26 06:56:05 +00:00
}
2012-08-20 17:16:15 +08:00
echo '<div id="reg_search" class="' . $regsearchclass . '" > ' ;
echo '<label for="pref_search">' . get_string ( 'search' ) . '</label> <input type="text" size="16" name="search" id= "pref_search" value="' . s ( $search ) . '" /></div>' ;
2006-12-13 09:22:47 +00:00
echo ' <label for="pref_sortby">' . get_string ( 'sortby' ) . '</label> ' ;
2008-05-31 00:30:00 +00:00
// foreach field, print the option
2008-04-21 14:17:02 +00:00
echo '<select name="sort" id="pref_sortby">' ;
2008-06-06 08:04:22 +00:00
if ( $fields = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $data -> id ), 'name' )) {
2008-04-21 14:17:02 +00:00
echo '<optgroup label="' . get_string ( 'fields' , 'data' ) . '">' ;
foreach ( $fields as $field ) {
if ( $field -> id == $sort ) {
echo '<option value="' . $field -> id . '" selected="selected">' . $field -> name . '</option>' ;
} else {
echo '<option value="' . $field -> id . '">' . $field -> name . '</option>' ;
}
}
echo '</optgroup>' ;
2008-04-16 11:51:50 +00:00
}
2008-04-21 14:17:02 +00:00
$options = array ();
$options [ DATA_TIMEADDED ] = get_string ( 'timeadded' , 'data' );
$options [ DATA_TIMEMODIFIED ] = get_string ( 'timemodified' , 'data' );
$options [ DATA_FIRSTNAME ] = get_string ( 'authorfirstname' , 'data' );
$options [ DATA_LASTNAME ] = get_string ( 'authorlastname' , 'data' );
2008-04-19 20:48:48 +00:00
if ( $data -> approval and has_capability ( 'mod/data:approve' , $context )) {
$options [ DATA_APPROVED ] = get_string ( 'approved' , 'data' );
}
2008-04-21 14:17:02 +00:00
echo '<optgroup label="' . get_string ( 'other' , 'data' ) . '">' ;
2008-04-16 11:51:50 +00:00
foreach ( $options as $key => $name ) {
if ( $key == $sort ) {
echo '<option value="' . $key . '" selected="selected">' . $name . '</option>' ;
2006-02-03 08:11:36 +00:00
} else {
2008-04-16 11:51:50 +00:00
echo '<option value="' . $key . '">' . $name . '</option>' ;
2006-02-03 08:11:36 +00:00
}
}
2008-04-21 14:17:02 +00:00
echo '</optgroup>' ;
2006-02-03 08:11:36 +00:00
echo '</select>' ;
2006-12-13 09:22:47 +00:00
echo '<label for="pref_order" class="accesshide">' . get_string ( 'order' ) . '</label>' ;
echo '<select id="pref_order" name="order">' ;
2006-03-26 15:54:41 +00:00
if ( $order == 'ASC' ) {
2006-02-20 02:15:45 +00:00
echo '<option value="ASC" selected="selected">' . get_string ( 'ascending' , 'data' ) . '</option>' ;
2006-02-03 08:11:36 +00:00
} else {
echo '<option value="ASC">' . get_string ( 'ascending' , 'data' ) . '</option>' ;
}
2006-03-26 15:54:41 +00:00
if ( $order == 'DESC' ) {
2006-02-20 02:15:45 +00:00
echo '<option value="DESC" selected="selected">' . get_string ( 'descending' , 'data' ) . '</option>' ;
2006-02-03 08:11:36 +00:00
} else {
echo '<option value="DESC">' . get_string ( 'descending' , 'data' ) . '</option>' ;
}
2006-02-20 02:15:45 +00:00
echo '</select>' ;
2007-02-28 06:23:25 +00:00
2007-02-26 06:56:05 +00:00
if ( $advanced ) {
$checked = ' checked="checked" ' ;
}
else {
$checked = '' ;
}
2010-01-18 20:57:32 +00:00
$PAGE -> requires -> js ( '/mod/data/data.js' );
2008-04-16 13:54:01 +00:00
echo ' <input type="hidden" name="advanced" value="0" />' ;
2008-10-24 20:17:10 +00:00
echo ' <input type="hidden" name="filter" value="1" />' ;
2008-04-16 11:51:50 +00:00
echo ' <input type="checkbox" id="advancedcheckbox" name="advanced" value="1" ' . $checked . ' onchange="showHideAdvSearch(this.checked);" /><label for="advancedcheckbox">' . get_string ( 'advancedsearch' , 'data' ) . '</label>' ;
2007-02-26 06:56:05 +00:00
echo ' <input type="submit" value="' . get_string ( 'savesettings' , 'data' ) . '" />' ;
2008-09-14 08:22:44 +00:00
2007-02-26 06:56:05 +00:00
echo '<br />' ;
2012-08-20 17:16:15 +08:00
echo '<div class="' . $advancedsearchclass . '" id="data_adv_form">' ;
2007-02-26 06:56:05 +00:00
echo '<table class="boxaligncenter">' ;
2008-09-14 08:22:44 +00:00
2007-02-26 06:56:05 +00:00
// print ASC or DESC
echo '<tr><td colspan="2"> </td></tr>' ;
$i = 0 ;
// Determine if we are printing all fields for advanced search, or the template for advanced search
// If a template is not defined, use the deafault template and display all fields.
if ( empty ( $data -> asearchtemplate )) {
data_generate_default_template ( $data , 'asearchtemplate' );
}
static $fields = NULL ;
static $isteacher ;
static $dataid = NULL ;
2008-06-12 14:13:51 +00:00
2007-02-26 06:56:05 +00:00
if ( empty ( $dataid )) {
$dataid = $data -> id ;
} else if ( $dataid != $data -> id ) {
$fields = NULL ;
}
if ( empty ( $fields )) {
2008-06-06 08:04:22 +00:00
$fieldrecords = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $data -> id ));
2007-02-26 06:56:05 +00:00
foreach ( $fieldrecords as $fieldrecord ) {
$fields [] = data_get_field ( $fieldrecord , $data );
}
2008-06-12 14:13:51 +00:00
2007-02-26 06:56:05 +00:00
$isteacher = has_capability ( 'mod/data:managetemplates' , $context );
}
2008-05-31 00:30:00 +00:00
// Replacing tags
2007-02-26 06:56:05 +00:00
$patterns = array ();
$replacement = array ();
2008-05-31 00:30:00 +00:00
// Then we generate strings to replace for normal tags
2007-02-26 06:56:05 +00:00
foreach ( $fields as $field ) {
2008-05-24 11:09:42 +00:00
$fieldname = $field -> field -> name ;
$fieldname = preg_quote ( $fieldname , '/' );
$patterns [] = " / \ [ \ [ $fieldname\ ] \ ]/i " ;
2008-04-16 11:51:50 +00:00
$searchfield = data_get_field_from_id ( $field -> field -> id , $data );
2007-02-26 06:56:05 +00:00
if ( ! empty ( $search_array [ $field -> field -> id ] -> data )) {
$replacement [] = $searchfield -> display_search_field ( $search_array [ $field -> field -> id ] -> data );
} else {
$replacement [] = $searchfield -> display_search_field ();
}
}
2008-04-16 11:51:50 +00:00
$fn = ! empty ( $search_array [ DATA_FIRSTNAME ] -> data ) ? $search_array [ DATA_FIRSTNAME ] -> data : '' ;
$ln = ! empty ( $search_array [ DATA_LASTNAME ] -> data ) ? $search_array [ DATA_LASTNAME ] -> data : '' ;
$patterns [] = '/##firstname##/' ;
2012-08-15 17:45:48 +08:00
$replacement [] = '<label class="accesshide" for="u_fn">' . get_string ( 'authorfirstname' , 'data' ) . '</label><input type="text" size="16" id="u_fn" name="u_fn" value="' . $fn . '" />' ;
2008-04-16 11:51:50 +00:00
$patterns [] = '/##lastname##/' ;
2012-08-16 12:31:18 +08:00
$replacement [] = '<label class="accesshide" for="u_ln">' . get_string ( 'authorlastname' , 'data' ) . '</label><input type="text" size="16" id="u_ln" name="u_ln" value="' . $ln . '" />' ;
2008-04-16 11:51:50 +00:00
2008-05-31 09:51:48 +00:00
// actual replacement of the tags
2007-02-26 06:56:05 +00:00
$newtext = preg_replace ( $patterns , $replacement , $data -> asearchtemplate );
2008-06-12 14:13:51 +00:00
2010-09-21 08:37:36 +00:00
$options = new stdClass ();
2007-02-26 06:56:05 +00:00
$options -> para = false ;
$options -> noclean = true ;
echo '<tr><td>' ;
echo format_text ( $newtext , FORMAT_HTML , $options );
echo '</td></tr>' ;
2008-06-12 14:13:51 +00:00
2012-08-20 17:16:15 +08:00
echo '<tr><td colspan="4"><br/><input type="submit" value="' . get_string ( 'savesettings' , 'data' ) . '" /><input type="submit" name="resetadv" value="' . get_string ( 'resetsettings' , 'data' ) . '" /></td></tr>' ;
2007-02-26 06:56:05 +00:00
echo '</table>' ;
2006-03-26 15:54:41 +00:00
echo '</div>' ;
2007-02-26 06:56:05 +00:00
echo '</div>' ;
echo '</form>' ;
2008-05-31 00:30:00 +00:00
echo '</div>' ;
NEW MODULE FROM MOODLE.COM - DATABASE !
Finally, we have an early version good enough for everyone to
start banging on to help us polish it up and find bugs.
Please take a look and file bugs in the bug tracker under "Database module".
We urgently need
- new icons for existing field types
- testing on PostgreSQL install
Coming soon (?):
- Many more field types: calculation, checkbox, relation, date, datetime,
time, email, group, list, user, number, richtext
(Please let us know if you are interested in developing any of these)
- A way to save and restore "presets", which are field/template sets
- Backup/Restore support
- Groups Support
- RSS support
Many thanks to Yu for all the hard work under my whip.
2005-12-02 07:50:26 +00:00
}
2006-01-31 03:58:42 +00:00
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ global object
* @ param object $data
* @ param object $record
* @ return void Output echo ' d
*/
2006-02-14 03:17:21 +00:00
function data_print_ratings ( $data , $record ) {
2009-08-20 13:16:08 +00:00
global $OUTPUT ;
2011-05-11 13:32:36 +08:00
if ( ! empty ( $record -> rating )){
2010-04-23 09:44:19 +00:00
echo $OUTPUT -> render ( $record -> rating );
2006-02-14 03:17:21 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
* For Participantion Reports
*
* @ return array
*/
2006-03-09 06:26:42 +00:00
function data_get_view_actions () {
return array ( 'view' );
}
2009-05-27 04:06:19 +00:00
/**
* @ return array
*/
2006-03-09 06:26:42 +00:00
function data_get_post_actions () {
return array ( 'add' , 'update' , 'record delete' );
}
2009-05-27 04:06:19 +00:00
/**
* @ param string $name
* @ param int $dataid
* @ param int $fieldid
* @ return bool
*/
2010-09-21 21:57:03 +00:00
function data_fieldname_exists ( $name , $dataid , $fieldid = 0 ) {
global $DB ;
2006-03-22 08:07:26 +00:00
2010-09-21 21:57:03 +00:00
if ( ! is_numeric ( $name )) {
$like = $DB -> sql_like ( 'df.name' , ':name' , false );
2010-09-16 02:56:26 +00:00
} else {
2010-09-21 21:57:03 +00:00
$like = " df.name = :name " ;
2010-09-16 02:56:26 +00:00
}
2010-09-21 21:57:03 +00:00
$params = array ( 'name' => $name );
2006-11-09 19:44:20 +00:00
if ( $fieldid ) {
2010-09-21 21:57:03 +00:00
$params [ 'dataid' ] = $dataid ;
$params [ 'fieldid1' ] = $fieldid ;
$params [ 'fieldid2' ] = $fieldid ;
2008-06-06 08:04:22 +00:00
return $DB -> record_exists_sql ( " SELECT * FROM { data_fields} df
2010-09-21 21:57:03 +00:00
WHERE $like AND df . dataid = : dataid
AND (( df . id < : fieldid1 ) OR ( df . id > : fieldid2 )) " , $params );
2006-03-22 08:07:26 +00:00
} else {
2010-09-21 21:57:03 +00:00
$params [ 'dataid' ] = $dataid ;
2008-06-06 08:04:22 +00:00
return $DB -> record_exists_sql ( " SELECT * FROM { data_fields} df
2010-09-21 21:57:03 +00:00
WHERE $like AND df . dataid = : dataid " , $params );
2006-03-22 08:07:26 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
* @ param array $fieldinput
*/
2006-03-22 08:07:26 +00:00
function data_convert_arrays_to_strings ( & $fieldinput ) {
foreach ( $fieldinput as $key => $val ) {
if ( is_array ( $val )) {
$str = '' ;
foreach ( $val as $inner ) {
$str .= $inner . ',' ;
}
$str = substr ( $str , 0 , - 1 );
2008-06-12 14:13:51 +00:00
2006-03-22 08:07:26 +00:00
$fieldinput -> $key = $str ;
}
}
}
2006-08-15 08:42:06 +00:00
2006-09-20 16:57:01 +00:00
/**
* Converts a database ( module instance ) to use the Roles System
2009-05-27 04:06:19 +00:00
*
* @ global object
* @ global object
* @ uses CONTEXT_MODULE
* @ uses CAP_PREVENT
* @ uses CAP_ALLOW
* @ param object $data a data object with the same attributes as a record
* from the data database table
* @ param int $datamodid the id of the data module , from the modules table
2010-03-31 07:41:31 +00:00
* @ param array $teacherroles array of roles that have archetype teacher
* @ param array $studentroles array of roles that have archetype student
* @ param array $guestroles array of roles that have archetype guest
2009-05-27 04:06:19 +00:00
* @ param int $cmid the course_module id for this data instance
* @ return boolean data module was converted or not
2006-09-20 16:57:01 +00:00
*/
function data_convert_to_roles ( $data , $teacherroles = array (), $studentroles = array (), $cmid = NULL ) {
2009-08-18 05:13:51 +00:00
global $CFG , $DB , $OUTPUT ;
2006-11-09 19:44:20 +00:00
2006-09-20 16:57:01 +00:00
if ( ! isset ( $data -> participants ) && ! isset ( $data -> assesspublic )
&& ! isset ( $data -> groupmode )) {
// We assume that this database has already been converted to use the
// Roles System. above fields get dropped the data module has been
// upgraded to use Roles.
return false ;
}
2008-06-12 14:13:51 +00:00
2006-09-20 16:57:01 +00:00
if ( empty ( $cmid )) {
// We were not given the course_module id. Try to find it.
2006-09-20 17:46:20 +00:00
if ( ! $cm = get_coursemodule_from_instance ( 'data' , $data -> id )) {
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( 'Could not get the course module for the data' );
2006-09-20 16:57:01 +00:00
return false ;
} else {
$cmid = $cm -> id ;
}
}
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cmid );
2006-11-09 19:44:20 +00:00
2008-06-12 14:13:51 +00:00
2006-09-20 16:57:01 +00:00
// $data->participants:
// 1 - Only teachers can add entries
// 3 - Teachers and students can add entries
switch ( $data -> participants ) {
case 1 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:writeentry' , CAP_PREVENT , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:writeentry' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
case 3 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:writeentry' , CAP_ALLOW , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:writeentry' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
}
2006-11-09 19:44:20 +00:00
2006-09-20 16:57:01 +00:00
// $data->assessed:
// 2 - Only teachers can rate posts
// 1 - Everyone can rate posts
// 0 - No one can rate posts
switch ( $data -> assessed ) {
case 0 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:rate' , CAP_PREVENT , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:rate' , CAP_PREVENT , $teacherrole -> id , $context -> id );
}
break ;
case 1 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:rate' , CAP_ALLOW , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:rate' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
case 2 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:rate' , CAP_PREVENT , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:rate' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
}
2006-11-09 19:44:20 +00:00
2006-09-20 16:57:01 +00:00
// $data->assesspublic:
// 0 - Students can only see their own ratings
// 1 - Students can see everyone's ratings
switch ( $data -> assesspublic ) {
case 0 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:viewrating' , CAP_PREVENT , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:viewrating' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
case 1 :
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'mod/data:viewrating' , CAP_ALLOW , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'mod/data:viewrating' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
}
if ( empty ( $cm )) {
2008-06-06 08:04:22 +00:00
$cm = $DB -> get_record ( 'course_modules' , array ( 'id' => $cmid ));
2006-09-20 16:57:01 +00:00
}
2006-11-09 19:44:20 +00:00
2006-09-20 16:57:01 +00:00
switch ( $cm -> groupmode ) {
2007-08-20 14:04:10 +00:00
case NOGROUPS :
2006-09-20 16:57:01 +00:00
break ;
2007-08-20 14:04:10 +00:00
case SEPARATEGROUPS :
2006-09-20 16:57:01 +00:00
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'moodle/site:accessallgroups' , CAP_PREVENT , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'moodle/site:accessallgroups' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
2007-08-20 14:04:10 +00:00
case VISIBLEGROUPS :
2006-09-20 16:57:01 +00:00
foreach ( $studentroles as $studentrole ) {
assign_capability ( 'moodle/site:accessallgroups' , CAP_ALLOW , $studentrole -> id , $context -> id );
}
foreach ( $teacherroles as $teacherrole ) {
assign_capability ( 'moodle/site:accessallgroups' , CAP_ALLOW , $teacherrole -> id , $context -> id );
}
break ;
}
return true ;
}
2009-05-27 04:06:19 +00:00
/**
2006-10-02 17:24:54 +00:00
* Returns the best name to show for a preset
2009-05-27 04:06:19 +00:00
*
* @ param string $shortname
* @ param string $path
* @ return string
2006-10-02 17:24:54 +00:00
*/
function data_preset_name ( $shortname , $path ) {
2008-05-31 09:51:48 +00:00
// We are looking inside the preset itself as a first choice, but also in normal data directory
2007-08-21 03:38:45 +00:00
$string = get_string ( 'modulename' , 'datapreset_' . $shortname );
2006-10-02 17:24:54 +00:00
if ( substr ( $string , 0 , 1 ) == '[' ) {
return $shortname ;
} else {
return $string ;
}
}
2009-05-27 04:06:19 +00:00
/**
2010-08-25 01:22:15 +00:00
* Returns an array of all the available presets .
2009-05-27 04:06:19 +00:00
*
* @ return array
2006-10-02 17:24:54 +00:00
*/
function data_get_available_presets ( $context ) {
global $CFG , $USER ;
2008-06-12 14:13:51 +00:00
2006-10-02 17:24:54 +00:00
$presets = array ();
2008-06-12 14:13:51 +00:00
2010-08-25 01:22:15 +00:00
// First load the ratings sub plugins that exist within the modules preset dir
2006-10-02 17:24:54 +00:00
if ( $dirs = get_list_of_plugins ( 'mod/data/preset' )) {
foreach ( $dirs as $dir ) {
$fulldir = $CFG -> dirroot . '/mod/data/preset/' . $dir ;
if ( is_directory_a_preset ( $fulldir )) {
2010-09-21 08:37:36 +00:00
$preset = new stdClass ();
2006-10-02 17:24:54 +00:00
$preset -> path = $fulldir ;
$preset -> userid = 0 ;
$preset -> shortname = $dir ;
$preset -> name = data_preset_name ( $dir , $fulldir );
if ( file_exists ( $fulldir . '/screenshot.jpg' )) {
$preset -> screenshot = $CFG -> wwwroot . '/mod/data/preset/' . $dir . '/screenshot.jpg' ;
} else if ( file_exists ( $fulldir . '/screenshot.png' )) {
$preset -> screenshot = $CFG -> wwwroot . '/mod/data/preset/' . $dir . '/screenshot.png' ;
} else if ( file_exists ( $fulldir . '/screenshot.gif' )) {
$preset -> screenshot = $CFG -> wwwroot . '/mod/data/preset/' . $dir . '/screenshot.gif' ;
}
$presets [] = $preset ;
}
}
}
2010-08-25 01:22:15 +00:00
// Now add to that the site presets that people have saved
$presets = data_get_available_site_presets ( $context , $presets );
return $presets ;
}
2006-10-02 17:24:54 +00:00
2010-08-25 01:22:15 +00:00
/**
* Gets an array of all of the presets that users have saved to the site .
*
* @ param stdClass $context The context that we are looking from .
* @ param array $presets
* @ return array An array of presets
*/
function data_get_available_site_presets ( $context , array $presets = array ()) {
2010-09-18 12:40:24 +00:00
global $USER ;
2010-08-25 01:22:15 +00:00
$fs = get_file_storage ();
$files = $fs -> get_area_files ( DATA_PRESET_CONTEXT , DATA_PRESET_COMPONENT , DATA_PRESET_FILEAREA );
$canviewall = has_capability ( 'mod/data:viewalluserpresets' , $context );
if ( empty ( $files )) {
return $presets ;
}
foreach ( $files as $file ) {
if (( $file -> is_directory () && $file -> get_filepath () == '/' ) || ! $file -> is_directory () || ( ! $canviewall && $file -> get_userid () != $USER -> id )) {
continue ;
}
$preset = new stdClass ;
$preset -> path = $file -> get_filepath ();
$preset -> name = trim ( $preset -> path , '/' );
$preset -> shortname = $preset -> name ;
$preset -> userid = $file -> get_userid ();
$preset -> id = $file -> get_id ();
$preset -> storedfile = $file ;
$presets [] = $preset ;
}
return $presets ;
}
/**
* Deletes a saved preset .
*
* @ param string $name
* @ return bool
*/
function data_delete_site_preset ( $name ) {
$fs = get_file_storage ();
$files = $fs -> get_directory_files ( DATA_PRESET_CONTEXT , DATA_PRESET_COMPONENT , DATA_PRESET_FILEAREA , 0 , '/' . $name . '/' );
if ( ! empty ( $files )) {
foreach ( $files as $file ) {
$file -> delete ();
2006-10-02 17:24:54 +00:00
}
}
2008-06-12 14:13:51 +00:00
2010-08-25 01:22:15 +00:00
$dir = $fs -> get_file ( DATA_PRESET_CONTEXT , DATA_PRESET_COMPONENT , DATA_PRESET_FILEAREA , 0 , '/' . $name . '/' , '.' );
if ( ! empty ( $dir )) {
$dir -> delete ();
}
return true ;
2006-10-02 17:24:54 +00:00
}
2009-05-27 04:06:19 +00:00
/**
2010-08-25 01:22:15 +00:00
* Prints the heads for a page
*
* @ param stdClass $course
* @ param stdClass $cm
* @ param stdClass $data
2009-05-27 04:06:19 +00:00
* @ param string $currenttab
*/
2006-10-02 17:24:54 +00:00
function data_print_header ( $course , $cm , $data , $currenttab = '' ) {
2008-06-12 14:13:51 +00:00
2009-09-07 05:43:15 +00:00
global $CFG , $displaynoticegood , $displaynoticebad , $OUTPUT , $PAGE ;
2008-06-12 14:13:51 +00:00
2009-09-07 05:43:15 +00:00
$PAGE -> set_title ( $data -> name );
echo $OUTPUT -> header ();
2009-08-06 08:21:01 +00:00
echo $OUTPUT -> heading ( format_string ( $data -> name ));
2006-10-02 17:24:54 +00:00
2008-05-31 00:30:00 +00:00
// Groups needed for Add entry tab
2007-08-20 14:04:10 +00:00
$currentgroup = groups_get_activity_group ( $cm );
2007-08-20 21:16:43 +00:00
$groupmode = groups_get_activity_groupmode ( $cm );
2008-06-12 14:13:51 +00:00
2008-05-31 09:51:48 +00:00
// Print the tabs
2008-06-12 14:13:51 +00:00
2006-10-02 17:24:54 +00:00
if ( $currenttab ) {
2007-09-24 17:20:08 +00:00
include ( 'tabs.php' );
2006-10-02 17:24:54 +00:00
}
2008-06-12 14:13:51 +00:00
2008-05-31 00:30:00 +00:00
// Print any notices
2008-06-12 14:13:51 +00:00
2006-10-02 17:24:54 +00:00
if ( ! empty ( $displaynoticegood )) {
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( $displaynoticegood , 'notifysuccess' ); // good (usually green)
2006-10-02 17:24:54 +00:00
} else if ( ! empty ( $displaynoticebad )) {
2009-08-18 05:13:51 +00:00
echo $OUTPUT -> notification ( $displaynoticebad ); // bad (usuually red)
2006-10-02 17:24:54 +00:00
}
}
2006-09-20 16:57:01 +00:00
2009-05-27 04:06:19 +00:00
/**
2011-03-14 20:47:45 +01:00
* Can user add more entries ?
*
2009-05-27 04:06:19 +00:00
* @ param object $data
* @ param mixed $currentgroup
* @ param int $groupmode
2011-03-14 20:47:45 +01:00
* @ param stdClass $context
2009-05-27 04:06:19 +00:00
* @ return bool
*/
2011-03-11 10:03:14 +08:00
function data_user_can_add_entry ( $data , $currentgroup , $groupmode , $context = null ) {
2006-12-10 20:16:03 +00:00
global $USER ;
2008-06-12 14:13:51 +00:00
2011-03-11 10:03:14 +08:00
if ( empty ( $context )) {
2011-03-14 20:47:45 +01:00
$cm = get_coursemodule_from_instance ( 'data' , $data -> id , 0 , false , MUST_EXIST );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2011-03-11 10:03:14 +08:00
}
2011-03-14 20:47:45 +01:00
if ( has_capability ( 'mod/data:manageentries' , $context )) {
// no entry limits apply if user can manage
2011-03-11 10:03:14 +08:00
2011-03-14 20:47:45 +01:00
} else if ( ! has_capability ( 'mod/data:writeentry' , $context )) {
2011-03-11 10:03:14 +08:00
return false ;
2008-06-12 14:13:51 +00:00
2011-03-14 20:47:45 +01:00
} else if ( data_atmaxentries ( $data )) {
2006-12-10 20:16:03 +00:00
return false ;
2012-02-28 17:15:28 +00:00
} else if ( data_in_readonly_period ( $data )) {
// Check whether we're in a read-only period
2010-07-29 03:26:02 +00:00
return false ;
}
2007-06-03 19:36:20 +00:00
if ( ! $groupmode or has_capability ( 'moodle/site:accessallgroups' , $context )) {
return true ;
}
2006-12-10 20:16:03 +00:00
if ( $currentgroup ) {
2007-08-15 20:21:01 +00:00
return groups_is_member ( $currentgroup );
2006-12-10 20:16:03 +00:00
} else {
//else it might be group 0 in visible mode
if ( $groupmode == VISIBLEGROUPS ){
return true ;
2007-06-03 19:36:20 +00:00
} else {
return false ;
2006-12-10 20:16:03 +00:00
}
}
}
2012-02-28 17:15:28 +00:00
/**
* Check whether the specified database activity is currently in a read - only period
*
* @ param object $data
* @ return bool returns true if the time fields in $data indicate a read - only period ; false otherwise
*/
function data_in_readonly_period ( $data ) {
$now = time ();
if ( ! $data -> timeviewfrom && ! $data -> timeviewto ) {
return false ;
} else if (( $data -> timeviewfrom && $now < $data -> timeviewfrom ) || ( $data -> timeviewto && $now > $data -> timeviewto )) {
return false ;
}
return true ;
}
2007-04-26 22:04:43 +00:00
2009-05-27 04:06:19 +00:00
/**
* @ return bool
*/
2007-04-26 22:04:43 +00:00
function is_directory_a_preset ( $directory ) {
$directory = rtrim ( $directory , '/\\' ) . '/' ;
2008-04-20 09:29:57 +00:00
$status = file_exists ( $directory . 'singletemplate.html' ) &&
file_exists ( $directory . 'listtemplate.html' ) &&
file_exists ( $directory . 'listtemplateheader.html' ) &&
file_exists ( $directory . 'listtemplatefooter.html' ) &&
file_exists ( $directory . 'addtemplate.html' ) &&
file_exists ( $directory . 'rsstemplate.html' ) &&
file_exists ( $directory . 'rsstitletemplate.html' ) &&
file_exists ( $directory . 'csstemplate.css' ) &&
file_exists ( $directory . 'jstemplate.js' ) &&
file_exists ( $directory . 'preset.xml' );
2008-06-12 14:13:51 +00:00
2008-04-20 09:29:57 +00:00
return $status ;
2007-04-26 22:04:43 +00:00
}
2009-05-27 04:06:19 +00:00
/**
2010-08-04 08:23:52 +00:00
* Abstract class used for data preset importers
2009-05-27 04:06:19 +00:00
*/
2010-08-04 08:23:52 +00:00
abstract class data_preset_importer {
2008-06-12 14:13:51 +00:00
2010-08-04 08:23:52 +00:00
protected $course ;
protected $cm ;
protected $module ;
protected $directory ;
2007-04-26 22:04:43 +00:00
2009-05-27 04:06:19 +00:00
/**
2010-08-04 08:23:52 +00:00
* Constructor
*
* @ param stdClass $course
* @ param stdClass $cm
* @ param stdClass $module
* @ param string $directory
2009-05-27 04:06:19 +00:00
*/
2010-08-04 08:23:52 +00:00
public function __construct ( $course , $cm , $module , $directory ) {
2007-04-26 22:04:43 +00:00
$this -> course = $course ;
$this -> cm = $cm ;
2010-08-04 08:23:52 +00:00
$this -> module = $module ;
$this -> directory = $directory ;
}
/**
* Returns the name of the directory the preset is located in
* @ return string
*/
public function get_directory () {
return basename ( $this -> directory );
2007-04-26 22:04:43 +00:00
}
2010-10-01 02:06:56 +00:00
/**
* Retreive the contents of a file . That file may either be in a conventional directory of the Moodle file storage
* @ param file_storage $filestorage . should be null if using a conventional directory
* @ param stored_file $fileobj the directory to look in . null if using a conventional directory
* @ param string $dir the directory to look in . null if using the Moodle file storage
* @ param string $filename the name of the file we want
* @ return string the contents of the file
*/
public function data_preset_get_file_contents ( & $filestorage , & $fileobj , $dir , $filename ) {
if ( empty ( $filestorage ) || empty ( $fileobj )) {
if ( substr ( $dir , - 1 ) != '/' ) {
$dir .= '/' ;
}
return file_get_contents ( $dir . $filename );
} else {
$file = $filestorage -> get_file ( DATA_PRESET_CONTEXT , DATA_PRESET_COMPONENT , DATA_PRESET_FILEAREA , 0 , $fileobj -> get_filepath (), $filename );
return $file -> get_content ();
}
}
2009-05-27 04:06:19 +00:00
/**
2010-08-04 08:23:52 +00:00
* Gets the preset settings
* @ global moodle_database $DB
* @ return stdClass
2009-05-27 04:06:19 +00:00
*/
2010-08-04 08:23:52 +00:00
public function get_preset_settings () {
global $DB ;
2007-04-26 22:04:43 +00:00
2010-10-01 02:06:56 +00:00
$fs = $fileobj = null ;
2010-08-04 08:23:52 +00:00
if ( ! is_directory_a_preset ( $this -> directory )) {
2010-10-01 02:06:56 +00:00
//maybe the user requested a preset stored in the Moodle file storage
2010-10-03 13:15:49 +00:00
2010-10-01 02:06:56 +00:00
$fs = get_file_storage ();
$files = $fs -> get_area_files ( DATA_PRESET_CONTEXT , DATA_PRESET_COMPONENT , DATA_PRESET_FILEAREA );
2010-10-18 08:45:45 +00:00
//preset name to find will be the final element of the directory
$presettofind = end ( explode ( '/' , $this -> directory ));
//now go through the available files available and see if we can find it
2010-10-01 02:06:56 +00:00
foreach ( $files as $file ) {
if (( $file -> is_directory () && $file -> get_filepath () == '/' ) || ! $file -> is_directory ()) {
continue ;
}
$presetname = trim ( $file -> get_filepath (), '/' );
2010-10-18 08:45:45 +00:00
if ( $presetname == $presettofind ) {
2010-10-01 02:06:56 +00:00
$this -> directory = $presetname ;
$fileobj = $file ;
}
}
if ( empty ( $fileobj )) {
print_error ( 'invalidpreset' , 'data' , '' , $this -> directory );
}
2007-04-26 22:04:43 +00:00
}
2010-08-04 08:23:52 +00:00
$allowed_settings = array (
'intro' ,
'comments' ,
'requiredentries' ,
'requiredentriestoview' ,
'maxentries' ,
'rssarticles' ,
'approval' ,
'defaultsortdir' ,
'defaultsort' );
$result = new stdClass ;
$result -> settings = new stdClass ;
$result -> importfields = array ();
$result -> currentfields = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $this -> module -> id ));
if ( ! $result -> currentfields ) {
$result -> currentfields = array ();
}
2007-04-26 22:04:43 +00:00
/* Grab XML */
2010-10-01 02:06:56 +00:00
$presetxml = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , 'preset.xml' );
2008-04-11 03:59:41 +00:00
$parsedxml = xmlize ( $presetxml , 0 );
2007-04-26 22:04:43 +00:00
/* First, do settings. Put in user friendly array. */
$settingsarray = $parsedxml [ 'preset' ][ '#' ][ 'settings' ][ 0 ][ '#' ];
2010-08-04 08:23:52 +00:00
$result -> settings = new StdClass ();
2007-04-26 22:04:43 +00:00
foreach ( $settingsarray as $setting => $value ) {
2010-08-04 08:23:52 +00:00
if ( ! is_array ( $value ) || ! in_array ( $setting , $allowed_settings )) {
2008-04-20 19:22:06 +00:00
// unsupported setting
continue ;
}
2010-08-04 08:23:52 +00:00
$result -> settings -> $setting = $value [ 0 ][ '#' ];
2007-04-26 22:04:43 +00:00
}
/* Now work out fields to user friendly array */
$fieldsarray = $parsedxml [ 'preset' ][ '#' ][ 'field' ];
foreach ( $fieldsarray as $field ) {
2008-04-13 23:02:31 +00:00
if ( ! is_array ( $field )) {
continue ;
}
2007-04-26 22:04:43 +00:00
$f = new StdClass ();
foreach ( $field [ '#' ] as $param => $value ) {
2008-04-13 23:02:31 +00:00
if ( ! is_array ( $value )) {
continue ;
}
2008-06-06 08:04:22 +00:00
$f -> $param = $value [ 0 ][ '#' ];
2007-04-26 22:04:43 +00:00
}
2010-08-04 08:23:52 +00:00
$f -> dataid = $this -> module -> id ;
2007-04-26 22:04:43 +00:00
$f -> type = clean_param ( $f -> type , PARAM_ALPHA );
2010-08-04 08:23:52 +00:00
$result -> importfields [] = $f ;
2007-04-26 22:04:43 +00:00
}
/* Now add the HTML templates to the settings array so we can update d */
2010-10-01 02:06:56 +00:00
$result -> settings -> singletemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " singletemplate.html " );
$result -> settings -> listtemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " listtemplate.html " );
$result -> settings -> listtemplateheader = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " listtemplateheader.html " );
$result -> settings -> listtemplatefooter = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " listtemplatefooter.html " );
$result -> settings -> addtemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " addtemplate.html " );
$result -> settings -> rsstemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " rsstemplate.html " );
$result -> settings -> rsstitletemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " rsstitletemplate.html " );
$result -> settings -> csstemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " csstemplate.css " );
$result -> settings -> jstemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " jstemplate.js " );
2007-04-26 22:04:43 +00:00
2008-04-20 09:29:57 +00:00
//optional
2010-08-04 08:23:52 +00:00
if ( file_exists ( $this -> directory . " /asearchtemplate.html " )) {
2010-10-01 02:06:56 +00:00
$result -> settings -> asearchtemplate = $this -> data_preset_get_file_contents ( $fs , $fileobj , $this -> directory , " asearchtemplate.html " );
2008-04-20 09:29:57 +00:00
} else {
2010-08-04 08:23:52 +00:00
$result -> settings -> asearchtemplate = NULL ;
2007-04-26 22:04:43 +00:00
}
2010-08-04 08:23:52 +00:00
$result -> settings -> instance = $this -> module -> id ;
2008-06-12 14:13:51 +00:00
2010-08-04 08:23:52 +00:00
return $result ;
2007-04-26 22:04:43 +00:00
}
2009-05-27 04:06:19 +00:00
/**
2010-08-04 08:23:52 +00:00
* Import the preset into the given database module
2009-05-27 04:06:19 +00:00
* @ return bool
*/
2010-08-04 08:23:52 +00:00
function import ( $overwritesettings ) {
2010-09-30 02:40:51 +00:00
global $DB , $CFG ;
2007-04-26 22:04:43 +00:00
2010-08-04 08:23:52 +00:00
$params = $this -> get_preset_settings ();
$settings = $params -> settings ;
$newfields = $params -> importfields ;
$currentfields = $params -> currentfields ;
2007-04-26 22:04:43 +00:00
$preservedfields = array ();
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
/* Maps fields and makes new ones */
if ( ! empty ( $newfields )) {
/* We require an injective mapping, and need to know what to protect */
foreach ( $newfields as $nid => $newfield ) {
$cid = optional_param ( " field_ $nid " , - 1 , PARAM_INT );
2010-08-04 08:23:52 +00:00
if ( $cid == - 1 ) {
continue ;
}
2008-06-25 14:52:39 +00:00
if ( array_key_exists ( $cid , $preservedfields )){
print_error ( 'notinjectivemap' , 'data' );
2008-09-14 08:22:44 +00:00
}
2007-04-26 22:04:43 +00:00
else $preservedfields [ $cid ] = true ;
}
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
foreach ( $newfields as $nid => $newfield ) {
$cid = optional_param ( " field_ $nid " , - 1 , PARAM_INT );
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
/* A mapping. Just need to change field params. Data kept. */
if ( $cid != - 1 and isset ( $currentfields [ $cid ])) {
2010-08-04 08:23:52 +00:00
$fieldobject = data_get_field_from_id ( $currentfields [ $cid ] -> id , $this -> module );
2007-04-26 22:04:43 +00:00
foreach ( $newfield as $param => $value ) {
if ( $param != " id " ) {
$fieldobject -> field -> $param = $value ;
}
}
unset ( $fieldobject -> field -> similarfield );
$fieldobject -> update_field ();
unset ( $fieldobject );
2010-08-04 08:23:52 +00:00
} else {
/* Make a new field */
2007-04-26 22:04:43 +00:00
include_once ( " field/ $newfield->type /field.class.php " );
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
if ( ! isset ( $newfield -> description )) {
$newfield -> description = '' ;
}
$classname = 'data_field_' . $newfield -> type ;
2010-08-04 08:23:52 +00:00
$fieldclass = new $classname ( $newfield , $this -> module );
2007-04-26 22:04:43 +00:00
$fieldclass -> insert_field ();
unset ( $fieldclass );
}
}
}
/* Get rid of all old unused data */
if ( ! empty ( $preservedfields )) {
foreach ( $currentfields as $cid => $currentfield ) {
if ( ! array_key_exists ( $cid , $preservedfields )) {
/* Data not used anymore so wipe! */
print " Deleting field $currentfield->name <br /> " ;
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
$id = $currentfield -> id ;
//Why delete existing data records and related comments/ratings??
2008-06-06 08:04:22 +00:00
$DB -> delete_records ( 'data_content' , array ( 'fieldid' => $id ));
$DB -> delete_records ( 'data_fields' , array ( 'id' => $id ));
2007-04-26 22:04:43 +00:00
}
}
}
2010-08-04 08:23:52 +00:00
// handle special settings here
2008-04-20 19:22:06 +00:00
if ( ! empty ( $settings -> defaultsort )) {
if ( is_numeric ( $settings -> defaultsort )) {
2008-05-31 09:51:48 +00:00
// old broken value
2008-04-20 19:22:06 +00:00
$settings -> defaultsort = 0 ;
} else {
2010-08-04 08:23:52 +00:00
$settings -> defaultsort = ( int ) $DB -> get_field ( 'data_fields' , 'id' , array ( 'dataid' => $this -> module -> id , 'name' => $settings -> defaultsort ));
2008-04-20 19:22:06 +00:00
}
} else {
$settings -> defaultsort = 0 ;
}
// do we want to overwrite all current database settings?
2008-04-20 10:09:28 +00:00
if ( $overwritesettings ) {
2008-04-20 19:22:06 +00:00
// all supported settings
2008-04-20 10:09:28 +00:00
$overwrite = array_keys (( array ) $settings );
} else {
2008-04-20 19:22:06 +00:00
// only templates and sorting
2008-04-20 10:09:28 +00:00
$overwrite = array ( 'singletemplate' , 'listtemplate' , 'listtemplateheader' , 'listtemplatefooter' ,
'addtemplate' , 'rsstemplate' , 'rsstitletemplate' , 'csstemplate' , 'jstemplate' ,
2008-04-20 19:22:06 +00:00
'asearchtemplate' , 'defaultsortdir' , 'defaultsort' );
2008-04-20 10:09:28 +00:00
}
2008-04-20 19:22:06 +00:00
// now overwrite current data settings
2010-08-04 08:23:52 +00:00
foreach ( $this -> module as $prop => $unused ) {
2008-04-20 10:09:28 +00:00
if ( in_array ( $prop , $overwrite )) {
2010-08-04 08:23:52 +00:00
$this -> module -> $prop = $settings -> $prop ;
2007-08-20 10:52:59 +00:00
}
}
2007-12-05 06:13:17 +00:00
2010-08-04 08:23:52 +00:00
data_update_instance ( $this -> module );
2007-04-26 22:04:43 +00:00
2010-08-04 08:23:52 +00:00
return $this -> cleanup ();
}
2008-06-12 14:13:51 +00:00
2010-08-04 08:23:52 +00:00
/**
* Any clean up routines should go here
* @ return bool
*/
public function cleanup () {
2007-04-26 22:04:43 +00:00
return true ;
}
}
2010-08-04 08:23:52 +00:00
/**
* Data preset importer for uploaded presets
*/
class data_preset_upload_importer extends data_preset_importer {
public function __construct ( $course , $cm , $module , $filepath ) {
global $USER ;
if ( is_file ( $filepath )) {
$fp = get_file_packer ();
if ( $fp -> extract_to_pathname ( $filepath , $filepath . '_extracted' )) {
fulldelete ( $filepath );
}
$filepath .= '_extracted' ;
}
parent :: __construct ( $course , $cm , $module , $filepath );
}
public function cleanup () {
return fulldelete ( $this -> directory );
}
}
/**
* Data preset importer for existing presets
*/
class data_preset_existing_importer extends data_preset_importer {
protected $userid ;
public function __construct ( $course , $cm , $module , $fullname ) {
global $USER ;
list ( $userid , $shortname ) = explode ( '/' , $fullname , 2 );
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2010-08-04 08:23:52 +00:00
if ( $userid && ( $userid != $USER -> id ) && ! has_capability ( 'mod/data:manageuserpresets' , $context ) && ! has_capability ( 'mod/data:viewalluserpresets' , $context )) {
throw new coding_exception ( 'Invalid preset provided' );
}
$this -> userid = $userid ;
$filepath = data_preset_path ( $course , $userid , $shortname );
parent :: __construct ( $course , $cm , $module , $filepath );
}
public function get_userid () {
return $this -> userid ;
}
}
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ global object
* @ param object $course
* @ param int $userid
* @ param string $shortname
* @ return string
*/
2007-04-26 22:04:43 +00:00
function data_preset_path ( $course , $userid , $shortname ) {
global $USER , $CFG ;
2008-06-12 14:13:51 +00:00
2012-07-26 13:57:56 +08:00
$context = context_course :: instance ( $course -> id );
2008-06-12 14:13:51 +00:00
2007-04-26 22:04:43 +00:00
$userid = ( int ) $userid ;
2008-06-12 14:13:51 +00:00
2010-10-01 02:06:56 +00:00
$path = null ;
2007-04-26 22:04:43 +00:00
if ( $userid > 0 && ( $userid == $USER -> id || has_capability ( 'mod/data:viewalluserpresets' , $context ))) {
2010-10-01 02:06:56 +00:00
$path = $CFG -> dataroot . '/data/preset/' . $userid . '/' . $shortname ;
2007-04-26 22:04:43 +00:00
} else if ( $userid == 0 ) {
2010-10-01 02:06:56 +00:00
$path = $CFG -> dirroot . '/mod/data/preset/' . $shortname ;
2007-04-26 22:04:43 +00:00
} else if ( $userid < 0 ) {
2011-08-11 03:03:58 +09:30
$path = $CFG -> tempdir . '/data/' .- $userid . '/' . $shortname ;
2007-04-26 22:04:43 +00:00
}
2008-06-12 14:13:51 +00:00
2010-10-01 02:06:56 +00:00
return $path ;
2007-04-26 22:04:43 +00:00
}
2007-11-29 14:43:04 +00:00
/**
* Implementation of the function for printing the form elements that control
* whether the course reset functionality affects the data .
2009-05-27 04:06:19 +00:00
*
2007-11-29 14:43:04 +00:00
* @ param $mform form passed by reference
*/
function data_reset_course_form_definition ( & $mform ) {
$mform -> addElement ( 'header' , 'dataheader' , get_string ( 'modulenameplural' , 'data' ));
$mform -> addElement ( 'checkbox' , 'reset_data' , get_string ( 'deleteallentries' , 'data' ));
$mform -> addElement ( 'checkbox' , 'reset_data_notenrolled' , get_string ( 'deletenotenrolled' , 'data' ));
$mform -> disabledIf ( 'reset_data_notenrolled' , 'reset_data' , 'checked' );
$mform -> addElement ( 'checkbox' , 'reset_data_ratings' , get_string ( 'deleteallratings' ));
$mform -> disabledIf ( 'reset_data_ratings' , 'reset_data' , 'checked' );
$mform -> addElement ( 'checkbox' , 'reset_data_comments' , get_string ( 'deleteallcomments' ));
$mform -> disabledIf ( 'reset_data_comments' , 'reset_data' , 'checked' );
}
/**
* Course reset form defaults .
2009-05-27 04:06:19 +00:00
* @ return array
2007-11-29 14:43:04 +00:00
*/
function data_reset_course_form_defaults ( $course ) {
return array ( 'reset_data' => 0 , 'reset_data_ratings' => 1 , 'reset_data_comments' => 1 , 'reset_data_notenrolled' => 0 );
}
/**
* Removes all grades from gradebook
2009-05-27 04:06:19 +00:00
*
* @ global object
* @ global object
2007-11-29 14:43:04 +00:00
* @ param int $courseid
2009-05-27 04:06:19 +00:00
* @ param string $type optional type
2007-11-29 14:43:04 +00:00
*/
function data_reset_gradebook ( $courseid , $type = '' ) {
2008-06-06 08:04:22 +00:00
global $CFG , $DB ;
2007-11-29 14:43:04 +00:00
$sql = " SELECT d.*, cm.idnumber as cmidnumber, d.course as courseid
2008-06-06 08:04:22 +00:00
FROM { data } d , { course_modules } cm , { modules } m
WHERE m . name = 'data' AND m . id = cm . module AND cm . instance = d . id AND d . course = ? " ;
2007-11-29 14:43:04 +00:00
2008-06-06 08:04:22 +00:00
if ( $datas = $DB -> get_records_sql ( $sql , array ( $courseid ))) {
2007-11-29 14:43:04 +00:00
foreach ( $datas as $data ) {
data_grade_item_update ( $data , 'reset' );
}
}
}
/**
2010-09-18 12:08:16 +00:00
* Actual implementation of the reset course functionality , delete all the
2007-11-29 14:43:04 +00:00
* data responses for course $data -> courseid .
2009-05-27 04:06:19 +00:00
*
* @ global object
* @ global object
* @ param object $data the data submitted from the reset course .
2007-11-29 14:43:04 +00:00
* @ return array status array
*/
function data_reset_userdata ( $data ) {
2008-06-06 08:04:22 +00:00
global $CFG , $DB ;
2007-11-29 14:43:04 +00:00
require_once ( $CFG -> libdir . '/filelib.php' );
2010-04-23 09:44:19 +00:00
require_once ( $CFG -> dirroot . '/rating/lib.php' );
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
$componentstr = get_string ( 'modulenameplural' , 'data' );
$status = array ();
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
$allrecordssql = " SELECT r.id
2008-06-06 08:04:22 +00:00
FROM { data_records } r
INNER JOIN { data } d ON r . dataid = d . id
WHERE d . course = ? " ;
2007-11-29 14:43:04 +00:00
$alldatassql = " SELECT d.id
2008-06-06 08:04:22 +00:00
FROM { data } d
WHERE d . course = ? " ;
2007-11-29 14:43:04 +00:00
2010-04-23 09:44:19 +00:00
$rm = new rating_manager ();
2011-05-11 13:32:36 +08:00
$ratingdeloptions = new stdClass ;
$ratingdeloptions -> component = 'mod_data' ;
$ratingdeloptions -> ratingarea = 'entry' ;
2010-04-23 09:44:19 +00:00
2007-11-29 14:43:04 +00:00
// delete entries if requested
if ( ! empty ( $data -> reset_data )) {
2009-11-18 06:00:48 +00:00
$DB -> delete_records_select ( 'comments' , " itemid IN ( $allrecordssql ) AND commentarea='database_entry' " , array ( $data -> courseid ));
2008-06-06 08:04:22 +00:00
$DB -> delete_records_select ( 'data_content' , " recordid IN ( $allrecordssql ) " , array ( $data -> courseid ));
$DB -> delete_records_select ( 'data_records' , " dataid IN ( $alldatassql ) " , array ( $data -> courseid ));
2007-11-29 14:43:04 +00:00
2008-06-06 08:04:22 +00:00
if ( $datas = $DB -> get_records_sql ( $alldatassql , array ( $data -> courseid ))) {
2007-11-29 14:43:04 +00:00
foreach ( $datas as $dataid => $unused ) {
fulldelete ( " $CFG->dataroot / $data->courseid /moddata/data/ $dataid " );
2010-04-23 09:44:19 +00:00
if ( ! $cm = get_coursemodule_from_instance ( 'data' , $dataid )) {
continue ;
}
2012-07-26 13:57:56 +08:00
$datacontext = context_module :: instance ( $cm -> id );
2010-04-23 09:44:19 +00:00
$ratingdeloptions -> contextid = $datacontext -> id ;
$rm -> delete_ratings ( $ratingdeloptions );
2007-11-29 14:43:04 +00:00
}
}
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
if ( empty ( $data -> reset_gradebook_grades )) {
// remove all grades from gradebook
data_reset_gradebook ( $data -> courseid );
}
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'deleteallentries' , 'data' ), 'error' => false );
}
// remove entries by users not enrolled into course
if ( ! empty ( $data -> reset_data_notenrolled )) {
$recordssql = " SELECT r.id, r.userid, r.dataid, u.id AS userexists, u.deleted AS userdeleted
2008-06-06 08:04:22 +00:00
FROM { data_records } r
JOIN { data } d ON r . dataid = d . id
LEFT JOIN { user } u ON r . userid = u . id
WHERE d . course = ? AND r . userid > 0 " ;
2007-11-29 14:43:04 +00:00
2012-07-26 13:57:56 +08:00
$course_context = context_course :: instance ( $data -> courseid );
2007-11-29 14:43:04 +00:00
$notenrolled = array ();
$fields = array ();
2011-01-07 11:12:50 +01:00
$rs = $DB -> get_recordset_sql ( $recordssql , array ( $data -> courseid ));
foreach ( $rs as $record ) {
if ( array_key_exists ( $record -> userid , $notenrolled ) or ! $record -> userexists or $record -> userdeleted
or ! is_enrolled ( $course_context , $record -> userid )) {
//delete ratings
if ( ! $cm = get_coursemodule_from_instance ( 'data' , $record -> dataid )) {
continue ;
}
2012-07-26 13:57:56 +08:00
$datacontext = context_module :: instance ( $cm -> id );
2011-01-07 11:12:50 +01:00
$ratingdeloptions -> contextid = $datacontext -> id ;
$ratingdeloptions -> itemid = $record -> id ;
$rm -> delete_ratings ( $ratingdeloptions );
$DB -> delete_records ( 'comments' , array ( 'itemid' => $record -> id , 'commentarea' => 'database_entry' ));
$DB -> delete_records ( 'data_content' , array ( 'recordid' => $record -> id ));
$DB -> delete_records ( 'data_records' , array ( 'id' => $record -> id ));
// HACK: this is ugly - the recordid should be before the fieldid!
if ( ! array_key_exists ( $record -> dataid , $fields )) {
if ( $fs = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $record -> dataid ))) {
$fields [ $record -> dataid ] = array_keys ( $fs );
} else {
$fields [ $record -> dataid ] = array ();
2007-11-29 14:43:04 +00:00
}
}
2011-01-07 11:12:50 +01:00
foreach ( $fields [ $record -> dataid ] as $fieldid ) {
fulldelete ( " $CFG->dataroot / $data->courseid /moddata/data/ $record->dataid / $fieldid / $record->id " );
}
$notenrolled [ $record -> userid ] = true ;
2007-11-29 14:43:04 +00:00
}
}
2011-01-07 11:12:50 +01:00
$rs -> close ();
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'deletenotenrolled' , 'data' ), 'error' => false );
2007-11-29 14:43:04 +00:00
}
// remove all ratings
if ( ! empty ( $data -> reset_data_ratings )) {
2010-04-23 09:44:19 +00:00
if ( $datas = $DB -> get_records_sql ( $alldatassql , array ( $data -> courseid ))) {
foreach ( $datas as $dataid => $unused ) {
if ( ! $cm = get_coursemodule_from_instance ( 'data' , $dataid )) {
continue ;
}
2012-07-26 13:57:56 +08:00
$datacontext = context_module :: instance ( $cm -> id );
2010-04-23 09:44:19 +00:00
$ratingdeloptions -> contextid = $datacontext -> id ;
$rm -> delete_ratings ( $ratingdeloptions );
}
}
2007-11-29 14:43:04 +00:00
if ( empty ( $data -> reset_gradebook_grades )) {
// remove all grades from gradebook
data_reset_gradebook ( $data -> courseid );
}
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'deleteallratings' ), 'error' => false );
}
// remove all comments
if ( ! empty ( $data -> reset_data_comments )) {
2009-11-18 06:00:48 +00:00
$DB -> delete_records_select ( 'comments' , " itemid IN ( $allrecordssql ) AND commentarea='database_entry' " , array ( $data -> courseid ));
2007-11-29 14:43:04 +00:00
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'deleteallcomments' ), 'error' => false );
}
2008-05-31 00:30:00 +00:00
// updating dates - shift may be negative too
2007-11-29 14:43:04 +00:00
if ( $data -> timeshift ) {
shift_course_mod_dates ( 'data' , array ( 'timeavailablefrom' , 'timeavailableto' , 'timeviewfrom' , 'timeviewto' ), $data -> timeshift , $data -> courseid );
$status [] = array ( 'component' => $componentstr , 'item' => get_string ( 'datechanged' ), 'error' => false );
}
2008-06-12 14:13:51 +00:00
2007-11-29 14:43:04 +00:00
return $status ;
}
2008-07-24 21:59:13 +00:00
/**
* Returns all other caps used in module
2009-05-27 04:06:19 +00:00
*
* @ return array
2008-07-24 21:59:13 +00:00
*/
function data_get_extra_capabilities () {
2010-07-27 10:05:12 +00:00
return array ( 'moodle/site:accessallgroups' , 'moodle/site:viewfullnames' , 'moodle/rating:view' , 'moodle/rating:viewany' , 'moodle/rating:viewall' , 'moodle/rating:rate' , 'moodle/comment:view' , 'moodle/comment:post' , 'moodle/comment:delete' );
2008-07-24 21:59:13 +00:00
}
2008-07-29 17:22:47 +00:00
/**
* @ param string $feature FEATURE_xx constant for requested feature
* @ return mixed True if module supports feature , null if doesn ' t know
*/
function data_supports ( $feature ) {
switch ( $feature ) {
2009-04-21 08:57:20 +00:00
case FEATURE_GROUPS : return true ;
case FEATURE_GROUPINGS : return true ;
case FEATURE_GROUPMEMBERSONLY : return true ;
2009-04-21 21:17:21 +00:00
case FEATURE_MOD_INTRO : return true ;
2008-07-29 17:22:47 +00:00
case FEATURE_COMPLETION_TRACKS_VIEWS : return true ;
2009-04-21 08:57:20 +00:00
case FEATURE_GRADE_HAS_GRADE : return true ;
case FEATURE_GRADE_OUTCOMES : return true ;
2010-04-23 09:44:19 +00:00
case FEATURE_RATE : return true ;
2010-09-07 08:32:41 +00:00
case FEATURE_BACKUP_MOODLE2 : return true ;
2011-07-21 15:06:47 +01:00
case FEATURE_SHOW_DESCRIPTION : return true ;
2009-04-21 08:57:20 +00:00
2008-07-29 17:22:47 +00:00
default : return null ;
2009-06-19 14:25:56 +00:00
}
2008-07-29 17:22:47 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ param array $export
* @ param string $delimiter_name
* @ param object $database
* @ param int $count
* @ param bool $return
* @ return string | void
*/
2012-07-27 09:37:33 +08:00
function data_export_csv ( $export , $delimiter_name , $database , $count , $return = false ) {
2008-08-01 12:30:26 +00:00
global $CFG ;
require_once ( $CFG -> libdir . '/csvlib.class.php' );
2012-07-27 09:37:33 +08:00
$filename = $database . '-' . $count . '-record' ;
2008-07-31 12:21:25 +00:00
if ( $count > 1 ) {
$filename .= 's' ;
}
2012-07-27 09:37:33 +08:00
if ( $return ) {
return csv_export_writer :: print_array ( $export , $delimiter_name , '"' , true );
} else {
csv_export_writer :: download_array ( $filename , $export , $delimiter_name );
2008-07-31 12:21:25 +00:00
}
}
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ param array $export
* @ param string $dataname
* @ param int $count
* @ return string
*/
2008-08-11 10:40:04 +00:00
function data_export_xls ( $export , $dataname , $count ) {
2008-07-31 12:21:25 +00:00
global $CFG ;
require_once ( " $CFG->libdir /excellib.class.php " );
2010-09-18 12:46:11 +00:00
$filename = clean_filename ( " { $dataname } - { $count } _record " );
2008-07-31 12:21:25 +00:00
if ( $count > 1 ) {
$filename .= 's' ;
}
$filename .= clean_filename ( '-' . gmdate ( " Ymd_Hi " ));
$filename .= '.xls' ;
2008-08-01 12:30:26 +00:00
$filearg = '-' ;
$workbook = new MoodleExcelWorkbook ( $filearg );
2008-08-11 10:40:04 +00:00
$workbook -> send ( $filename );
2008-07-31 12:21:25 +00:00
$worksheet = array ();
$worksheet [ 0 ] =& $workbook -> add_worksheet ( '' );
$rowno = 0 ;
foreach ( $export as $row ) {
$colno = 0 ;
foreach ( $row as $col ) {
$worksheet [ 0 ] -> write ( $rowno , $colno , $col );
$colno ++ ;
}
$rowno ++ ;
}
$workbook -> close ();
2008-08-01 12:30:26 +00:00
return $filename ;
2008-07-31 12:21:25 +00:00
}
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ param array $export
* @ param string $dataname
* @ param int $count
* @ param string
*/
2008-08-11 10:40:04 +00:00
function data_export_ods ( $export , $dataname , $count ) {
2008-07-31 12:21:25 +00:00
global $CFG ;
require_once ( " $CFG->libdir /odslib.class.php " );
2010-09-18 12:46:11 +00:00
$filename = clean_filename ( " { $dataname } - { $count } _record " );
2008-07-31 12:21:25 +00:00
if ( $count > 1 ) {
$filename .= 's' ;
}
$filename .= clean_filename ( '-' . gmdate ( " Ymd_Hi " ));
$filename .= '.ods' ;
2008-08-01 12:30:26 +00:00
$filearg = '-' ;
2008-08-11 10:40:04 +00:00
$workbook = new MoodleODSWorkbook ( $filearg );
$workbook -> send ( $filename );
2008-07-31 12:21:25 +00:00
$worksheet = array ();
$worksheet [ 0 ] =& $workbook -> add_worksheet ( '' );
$rowno = 0 ;
foreach ( $export as $row ) {
$colno = 0 ;
foreach ( $row as $col ) {
$worksheet [ 0 ] -> write ( $rowno , $colno , $col );
$colno ++ ;
}
$rowno ++ ;
}
$workbook -> close ();
2008-08-01 12:30:26 +00:00
return $filename ;
}
2009-05-27 04:06:19 +00:00
/**
* @ global object
* @ param int $dataid
* @ param array $fields
* @ param array $selectedfields
2012-01-30 15:52:20 +08:00
* @ param int $currentgroup group ID of the current group . This is used for
* exporting data while maintaining group divisions .
2012-08-15 10:04:24 +08:00
* @ param object $context the context in which the operation is performed ( for capability checks )
* @ param bool $userdetails whether to include the details of the record author
* @ param bool $time whether to include time created / modified
* @ param bool $approval whether to include approval status
2009-05-27 04:06:19 +00:00
* @ return array
*/
2012-04-17 20:15:55 +01:00
function data_get_exportdata ( $dataid , $fields , $selectedfields , $currentgroup = 0 , $context = null ,
$userdetails = false , $time = false , $approval = false ) {
2008-08-01 12:30:26 +00:00
global $DB ;
2012-04-17 20:15:55 +01:00
if ( is_null ( $context )) {
$context = context_system :: instance ();
}
// exporting user data needs special permission
$userdetails = $userdetails && has_capability ( 'mod/data:exportuserinfo' , $context );
2008-08-01 12:30:26 +00:00
$exportdata = array ();
// populate the header in first row of export
foreach ( $fields as $key => $field ) {
if ( ! in_array ( $field -> field -> id , $selectedfields )) {
// ignore values we aren't exporting
unset ( $fields [ $key ]);
} else {
$exportdata [ 0 ][] = $field -> field -> name ;
}
}
2012-04-17 20:15:55 +01:00
if ( $userdetails ) {
$exportdata [ 0 ][] = get_string ( 'user' );
$exportdata [ 0 ][] = get_string ( 'username' );
$exportdata [ 0 ][] = get_string ( 'email' );
}
if ( $time ) {
$exportdata [ 0 ][] = get_string ( 'timeadded' , 'data' );
$exportdata [ 0 ][] = get_string ( 'timemodified' , 'data' );
}
if ( $approval ) {
$exportdata [ 0 ][] = get_string ( 'approved' , 'data' );
}
2008-08-01 12:30:26 +00:00
$datarecords = $DB -> get_records ( 'data_records' , array ( 'dataid' => $dataid ));
ksort ( $datarecords );
$line = 1 ;
foreach ( $datarecords as $record ) {
// get content indexed by fieldid
2012-01-30 15:52:20 +08:00
if ( $currentgroup ) {
$select = 'SELECT c.fieldid, c.content, c.content1, c.content2, c.content3, c.content4 FROM {data_content} c, {data_records} r WHERE c.recordid = ? AND r.id = c.recordid AND r.groupid = ?' ;
$where = array ( $record -> id , $currentgroup );
} else {
$select = 'SELECT fieldid, content, content1, content2, content3, content4 FROM {data_content} WHERE recordid = ?' ;
$where = array ( $record -> id );
}
if ( $content = $DB -> get_records_sql ( $select , $where ) ) {
2008-08-01 12:30:26 +00:00
foreach ( $fields as $field ) {
$contents = '' ;
if ( isset ( $content [ $field -> field -> id ])) {
$contents = $field -> export_text_value ( $content [ $field -> field -> id ]);
}
$exportdata [ $line ][] = $contents ;
}
2012-04-17 20:15:55 +01:00
if ( $userdetails ) { // Add user details to the export data
$userdata = get_complete_user_data ( 'id' , $record -> userid );
$exportdata [ $line ][] = fullname ( $userdata );
$exportdata [ $line ][] = $userdata -> username ;
$exportdata [ $line ][] = $userdata -> email ;
}
if ( $time ) { // Add time added / modified
$exportdata [ $line ][] = userdate ( $record -> timecreated );
$exportdata [ $line ][] = userdate ( $record -> timemodified );
}
if ( $approval ) { // Add approval status
$exportdata [ $line ][] = ( int ) $record -> approved ;
}
2008-08-01 12:30:26 +00:00
}
$line ++ ;
}
$line -- ;
return $exportdata ;
}
2012-05-09 01:56:39 +02:00
////////////////////////////////////////////////////////////////////////////////
// File API //
////////////////////////////////////////////////////////////////////////////////
2008-09-14 08:22:44 +00:00
/**
* Lists all browsable file areas
2009-05-27 04:06:19 +00:00
*
2012-02-15 12:48:57 +08:00
* @ package mod_data
* @ category files
* @ param stdClass $course course object
* @ param stdClass $cm course module object
* @ param stdClass $context context object
2009-05-27 04:06:19 +00:00
* @ return array
2008-09-14 08:22:44 +00:00
*/
function data_get_file_areas ( $course , $cm , $context ) {
2012-05-09 01:56:39 +02:00
return array ( 'content' => get_string ( 'areacontent' , 'mod_data' ));
2008-09-14 08:22:44 +00:00
}
2012-02-23 12:04:10 +08:00
/**
* File browsing support for data module .
*
* @ param file_browser $browser
* @ param array $areas
* @ param stdClass $course
* @ param cm_info $cm
* @ param context $context
* @ param string $filearea
* @ param int $itemid
* @ param string $filepath
* @ param string $filename
* @ return file_info_stored file_info_stored instance or null if not found
*/
2012-06-11 13:34:47 +08:00
function data_get_file_info ( $browser , $areas , $course , $cm , $context , $filearea , $itemid , $filepath , $filename ) {
2012-05-25 11:45:08 +08:00
global $CFG , $DB , $USER ;
2012-02-23 12:04:10 +08:00
if ( $context -> contextlevel != CONTEXT_MODULE ) {
return null ;
}
2012-05-09 01:56:39 +02:00
if ( ! isset ( $areas [ $filearea ])) {
return null ;
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
if ( is_null ( $itemid )) {
require_once ( $CFG -> dirroot . '/mod/data/locallib.php' );
return new data_file_info_container ( $browser , $course , $cm , $context , $areas , $filearea );
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
if ( ! $content = $DB -> get_record ( 'data_content' , array ( 'id' => $itemid ))) {
return null ;
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
if ( ! $field = $DB -> get_record ( 'data_fields' , array ( 'id' => $content -> fieldid ))) {
return null ;
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
if ( ! $record = $DB -> get_record ( 'data_records' , array ( 'id' => $content -> recordid ))) {
return null ;
}
if ( ! $data = $DB -> get_record ( 'data' , array ( 'id' => $field -> dataid ))) {
return null ;
}
//check if approved
if ( $data -> approval and ! $record -> approved and ! data_isowner ( $record ) and ! has_capability ( 'mod/data:approve' , $context )) {
return null ;
}
// group access
if ( $record -> groupid ) {
$groupmode = groups_get_activity_groupmode ( $cm , $course );
if ( $groupmode == SEPARATEGROUPS and ! has_capability ( 'moodle/site:accessallgroups' , $context )) {
if ( ! groups_is_member ( $record -> groupid )) {
return null ;
2012-02-23 12:04:10 +08:00
}
}
2012-05-09 01:56:39 +02:00
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
$fieldobj = data_get_field ( $field , $data , $cm );
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
$filepath = is_null ( $filepath ) ? '/' : $filepath ;
$filename = is_null ( $filename ) ? '.' : $filename ;
if ( ! $fieldobj -> file_ok ( $filepath . $filename )) {
return null ;
}
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
$fs = get_file_storage ();
if ( ! ( $storedfile = $fs -> get_file ( $context -> id , 'mod_data' , $filearea , $itemid , $filepath , $filename ))) {
return null ;
2012-02-23 12:04:10 +08:00
}
2012-05-25 11:45:08 +08:00
// Checks to see if the user can manage files or is the owner.
// TODO MDL-33805 - Do not use userid here and move the capability check above.
if ( ! has_capability ( 'moodle/course:managefiles' , $context ) && $storedfile -> get_userid () != $USER -> id ) {
return null ;
}
2012-05-09 01:56:39 +02:00
$urlbase = $CFG -> wwwroot . '/pluginfile.php' ;
2012-02-23 12:04:10 +08:00
2012-05-09 01:56:39 +02:00
return new file_info_stored ( $browser , $context , $storedfile , $urlbase , $itemid , true , true , false , false );
2012-02-23 12:04:10 +08:00
}
2008-09-14 08:22:44 +00:00
/**
* Serves the data attachments . Implements needed access control ; - )
2009-05-27 04:06:19 +00:00
*
2012-02-15 12:48:57 +08:00
* @ package mod_data
* @ category files
* @ param stdClass $course course object
* @ param stdClass $cm course module object
* @ param stdClass $context context object
* @ param string $filearea file area
* @ param array $args extra arguments
* @ param bool $forcedownload whether or not force download
2012-04-18 15:56:09 +02:00
* @ param array $options additional options affecting the file serving
2009-07-03 13:40:37 +00:00
* @ return bool false if file not found , does not return if found - justsend the file
2008-09-14 08:22:44 +00:00
*/
2012-04-18 15:56:09 +02:00
function data_pluginfile ( $course , $cm , $context , $filearea , $args , $forcedownload , array $options = array ()) {
2008-09-14 08:22:44 +00:00
global $CFG , $DB ;
2010-07-03 13:37:13 +00:00
if ( $context -> contextlevel != CONTEXT_MODULE ) {
2008-09-14 08:22:44 +00:00
return false ;
}
2010-10-03 13:15:49 +00:00
require_course_login ( $course , true , $cm );
2010-07-03 13:37:13 +00:00
if ( $filearea === 'content' ) {
2008-09-14 08:22:44 +00:00
$contentid = ( int ) array_shift ( $args );
if ( ! $content = $DB -> get_record ( 'data_content' , array ( 'id' => $contentid ))) {
return false ;
}
if ( ! $field = $DB -> get_record ( 'data_fields' , array ( 'id' => $content -> fieldid ))) {
return false ;
}
if ( ! $record = $DB -> get_record ( 'data_records' , array ( 'id' => $content -> recordid ))) {
return false ;
}
if ( ! $data = $DB -> get_record ( 'data' , array ( 'id' => $field -> dataid ))) {
return false ;
}
2010-10-13 17:19:17 +00:00
if ( $data -> id != $cm -> instance ) {
// hacker attempt - context does not match the contentid
return false ;
}
2008-09-14 08:22:44 +00:00
//check if approved
2010-10-13 17:19:17 +00:00
if ( $data -> approval and ! $record -> approved and ! data_isowner ( $record ) and ! has_capability ( 'mod/data:approve' , $context )) {
2008-09-14 08:22:44 +00:00
return false ;
}
// group access
if ( $record -> groupid ) {
2009-07-19 08:56:45 +00:00
$groupmode = groups_get_activity_groupmode ( $cm , $course );
2008-09-14 08:22:44 +00:00
if ( $groupmode == SEPARATEGROUPS and ! has_capability ( 'moodle/site:accessallgroups' , $context )) {
if ( ! groups_is_member ( $record -> groupid )) {
return false ;
}
}
}
2009-07-19 08:56:45 +00:00
$fieldobj = data_get_field ( $field , $data , $cm );
2008-09-14 08:22:44 +00:00
2010-07-03 13:37:13 +00:00
$relativepath = implode ( '/' , $args );
$fullpath = " / $context->id /mod_data/content/ $content->id / $relativepath " ;
2008-09-14 08:22:44 +00:00
if ( ! $fieldobj -> file_ok ( $relativepath )) {
return false ;
}
$fs = get_file_storage ();
if ( ! $file = $fs -> get_file_by_hash ( sha1 ( $fullpath )) or $file -> is_directory ()) {
return false ;
}
// finally send the file
2012-04-18 15:56:09 +02:00
send_stored_file ( $file , 0 , 0 , true , $options ); // download MUST be forced - security!
2008-09-14 08:22:44 +00:00
}
return false ;
}
2009-09-11 03:14:42 +00:00
function data_extend_navigation ( $navigation , $course , $module , $cm ) {
global $CFG , $OUTPUT , $USER , $DB ;
$rid = optional_param ( 'rid' , 0 , PARAM_INT );
$data = $DB -> get_record ( 'data' , array ( 'id' => $cm -> instance ));
$currentgroup = groups_get_activity_group ( $cm );
$groupmode = groups_get_activity_groupmode ( $cm );
$numentries = data_numentries ( $data );
/// Check the number of entries required against the number of entries already made (doesn't apply to teachers)
2012-07-26 13:57:56 +08:00
if ( $data -> requiredentries > 0 && $numentries < $data -> requiredentries && ! has_capability ( 'mod/data:manageentries' , context_module :: instance ( $cm -> id ))) {
2009-09-11 03:14:42 +00:00
$data -> entriesleft = $data -> requiredentries - $numentries ;
2010-04-19 06:30:30 +00:00
$entriesnode = $navigation -> add ( get_string ( 'entrieslefttoadd' , 'data' , $data ));
$entriesnode -> add_class ( 'note' );
2009-09-11 03:14:42 +00:00
}
2010-01-16 15:39:56 +00:00
$navigation -> add ( get_string ( 'list' , 'data' ), new moodle_url ( '/mod/data/view.php' , array ( 'd' => $cm -> instance )));
2009-09-11 03:14:42 +00:00
if ( ! empty ( $rid )) {
2010-01-16 15:39:56 +00:00
$navigation -> add ( get_string ( 'single' , 'data' ), new moodle_url ( '/mod/data/view.php' , array ( 'd' => $cm -> instance , 'rid' => $rid )));
2009-09-11 03:14:42 +00:00
} else {
2010-01-16 15:39:56 +00:00
$navigation -> add ( get_string ( 'single' , 'data' ), new moodle_url ( '/mod/data/view.php' , array ( 'd' => $cm -> instance , 'mode' => 'single' )));
2009-09-11 03:14:42 +00:00
}
2011-07-06 14:06:02 +08:00
$navigation -> add ( get_string ( 'search' , 'data' ), new moodle_url ( '/mod/data/view.php' , array ( 'd' => $cm -> instance , 'mode' => 'asearch' )));
2009-09-11 03:14:42 +00:00
}
2010-03-22 03:04:00 +00:00
/**
* Adds module specific settings to the settings block
*
* @ param settings_navigation $settings The settings navigation object
* @ param navigation_node $datanode The node to add module settings to
*/
function data_extend_settings_navigation ( settings_navigation $settings , navigation_node $datanode ) {
2010-05-13 08:44:35 +00:00
global $PAGE , $DB , $CFG , $USER ;
2009-12-24 02:06:05 +00:00
2010-05-13 08:44:35 +00:00
$data = $DB -> get_record ( 'data' , array ( " id " => $PAGE -> cm -> instance ));
2009-09-11 03:14:42 +00:00
$currentgroup = groups_get_activity_group ( $PAGE -> cm );
$groupmode = groups_get_activity_groupmode ( $PAGE -> cm );
2011-03-11 10:03:14 +08:00
if ( data_user_can_add_entry ( $data , $currentgroup , $groupmode , $PAGE -> cm -> context )) { // took out participation list here!
2010-09-18 12:46:11 +00:00
if ( empty ( $editentry )) { //TODO: undefined
2009-09-11 03:14:42 +00:00
$addstring = get_string ( 'add' , 'data' );
} else {
$addstring = get_string ( 'editentry' , 'data' );
}
2010-03-22 03:04:00 +00:00
$datanode -> add ( $addstring , new moodle_url ( '/mod/data/edit.php' , array ( 'd' => $PAGE -> cm -> instance )));
2009-09-11 03:14:42 +00:00
}
if ( has_capability ( DATA_CAP_EXPORT , $PAGE -> cm -> context )) {
// The capability required to Export database records is centrally defined in 'lib.php'
// and should be weaker than those required to edit Templates, Fields and Presets.
2011-02-11 23:20:16 +01:00
$datanode -> add ( get_string ( 'exportentries' , 'data' ), new moodle_url ( '/mod/data/export.php' , array ( 'd' => $data -> id )));
2009-09-11 03:14:42 +00:00
}
2010-06-04 08:21:24 +00:00
if ( has_capability ( 'mod/data:manageentries' , $PAGE -> cm -> context )) {
2011-02-11 23:20:16 +01:00
$datanode -> add ( get_string ( 'importentries' , 'data' ), new moodle_url ( '/mod/data/import.php' , array ( 'd' => $data -> id )));
2010-06-04 08:21:24 +00:00
}
2009-09-11 03:14:42 +00:00
if ( has_capability ( 'mod/data:managetemplates' , $PAGE -> cm -> context )) {
$currenttab = '' ;
if ( $currenttab == 'list' ) {
$defaultemplate = 'listtemplate' ;
} else if ( $currenttab == 'add' ) {
$defaultemplate = 'addtemplate' ;
} else if ( $currenttab == 'asearch' ) {
$defaultemplate = 'asearchtemplate' ;
} else {
$defaultemplate = 'singletemplate' ;
}
2010-04-19 06:30:30 +00:00
$templates = $datanode -> add ( get_string ( 'templates' , 'data' ));
2009-09-11 03:14:42 +00:00
$templatelist = array ( 'listtemplate' , 'singletemplate' , 'asearchtemplate' , 'addtemplate' , 'rsstemplate' , 'csstemplate' , 'jstemplate' );
foreach ( $templatelist as $template ) {
2010-01-16 15:39:56 +00:00
$templates -> add ( get_string ( $template , 'data' ), new moodle_url ( '/mod/data/templates.php' , array ( 'd' => $data -> id , 'mode' => $template )));
2009-09-11 03:14:42 +00:00
}
2010-03-22 03:04:00 +00:00
$datanode -> add ( get_string ( 'fields' , 'data' ), new moodle_url ( '/mod/data/field.php' , array ( 'd' => $data -> id )));
$datanode -> add ( get_string ( 'presets' , 'data' ), new moodle_url ( '/mod/data/preset.php' , array ( 'd' => $data -> id )));
2009-09-11 03:14:42 +00:00
}
2010-05-13 08:44:35 +00:00
if ( ! empty ( $CFG -> enablerssfeeds ) && ! empty ( $CFG -> data_enablerssfeeds ) && $data -> rssarticles > 0 ) {
require_once ( " $CFG->libdir /rsslib.php " );
$string = get_string ( 'rsstype' , 'forum' );
2010-07-19 10:57:52 +00:00
$url = new moodle_url ( rss_get_url ( $PAGE -> cm -> context -> id , $USER -> id , 'mod_data' , $data -> id ));
2010-05-13 08:44:35 +00:00
$datanode -> add ( $string , $url , settings_navigation :: TYPE_SETTING , null , null , new pix_icon ( 'i/rss' , '' ));
}
MDL-21695 Database module now uses new help strings
AMOS BEGIN
HLP data/exportzip.html,[exportaszip_help,mod_data]
HLP data/fields.html,[newfield_help,mod_data]
HLP data/fieldmappings.html,[fieldmappings_help,mod_data]
HLP data/importcsv.html,[csvimport_help,mod_data]
HLP data/importfromfile.html,[fromfile_help,mod_data]
HLP data/maxentries.html,[maxentries_help,mod_data]
HLP data/requireapproval.html,[requireapproval_help,mod_data]
HLP data/requiredentries.html,[requiredentries_help,mod_data]
HLP data/requiredentriestoview.html,[requiredentriestoview_help,mod_data]
HLP data/savepreset.html,[saveaspreset_help,mod_data]
HLP data/tags.html,[availabletags_help,mod_data]
HLP data/usepreset.html,[usestandard_help,mod_data]
AMOS END
2010-04-30 14:56:41 +00:00
}
2010-08-04 08:23:52 +00:00
2010-08-25 01:22:15 +00:00
/**
* Save the database configuration as a preset .
*
* @ param stdClass $course The course the database module belongs to .
* @ param stdClass $cm The course module record
* @ param stdClass $data The database record
* @ param string $path
* @ return bool
*/
function data_presets_save ( $course , $cm , $data , $path ) {
2012-02-23 11:20:16 +08:00
global $USER ;
2010-08-25 01:22:15 +00:00
$fs = get_file_storage ();
$filerecord = new stdClass ;
$filerecord -> contextid = DATA_PRESET_CONTEXT ;
$filerecord -> component = DATA_PRESET_COMPONENT ;
$filerecord -> filearea = DATA_PRESET_FILEAREA ;
$filerecord -> itemid = 0 ;
$filerecord -> filepath = '/' . $path . '/' ;
2012-02-23 11:20:16 +08:00
$filerecord -> userid = $USER -> id ;
2010-08-25 01:22:15 +00:00
$filerecord -> filename = 'preset.xml' ;
$fs -> create_file_from_string ( $filerecord , data_presets_generate_xml ( $course , $cm , $data ));
$filerecord -> filename = 'singletemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> singletemplate );
$filerecord -> filename = 'listtemplateheader.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> listtemplateheader );
$filerecord -> filename = 'listtemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> listtemplate );
$filerecord -> filename = 'listtemplatefooter.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> listtemplatefooter );
$filerecord -> filename = 'addtemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> addtemplate );
$filerecord -> filename = 'rsstemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> rsstemplate );
$filerecord -> filename = 'rsstitletemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> rsstitletemplate );
$filerecord -> filename = 'csstemplate.css' ;
$fs -> create_file_from_string ( $filerecord , $data -> csstemplate );
$filerecord -> filename = 'jstemplate.js' ;
$fs -> create_file_from_string ( $filerecord , $data -> jstemplate );
$filerecord -> filename = 'asearchtemplate.html' ;
$fs -> create_file_from_string ( $filerecord , $data -> asearchtemplate );
return true ;
}
2010-08-04 08:23:52 +00:00
2010-08-25 01:22:15 +00:00
/**
* Generates the XML for the database module provided
*
* @ global moodle_database $DB
* @ param stdClass $course The course the database module belongs to .
* @ param stdClass $cm The course module record
* @ param stdClass $data The database record
* @ return string The XML for the preset
*/
function data_presets_generate_xml ( $course , $cm , $data ) {
global $DB ;
2010-09-04 14:08:03 +00:00
2010-08-04 08:23:52 +00:00
// Assemble "preset.xml":
$presetxmldata = " <preset> \n \n " ;
// Raw settings are not preprocessed during saving of presets
$raw_settings = array (
'intro' ,
'comments' ,
'requiredentries' ,
'requiredentriestoview' ,
'maxentries' ,
'rssarticles' ,
'approval' ,
'defaultsortdir'
);
$presetxmldata .= " <settings> \n " ;
// First, settings that do not require any conversion
foreach ( $raw_settings as $setting ) {
$presetxmldata .= " < $setting > " . htmlspecialchars ( $data -> $setting ) . " </ $setting > \n " ;
}
// Now specific settings
if ( $data -> defaultsort > 0 && $sortfield = data_get_field_from_id ( $data -> defaultsort , $data )) {
$presetxmldata .= '<defaultsort>' . htmlspecialchars ( $sortfield -> field -> name ) . " </defaultsort> \n " ;
} else {
$presetxmldata .= " <defaultsort>0</defaultsort> \n " ;
}
$presetxmldata .= " </settings> \n \n " ;
// Now for the fields. Grab all that are non-empty
$fields = $DB -> get_records ( 'data_fields' , array ( 'dataid' => $data -> id ));
ksort ( $fields );
if ( ! empty ( $fields )) {
foreach ( $fields as $field ) {
$presetxmldata .= " <field> \n " ;
foreach ( $field as $key => $value ) {
if ( $value != '' && $key != 'id' && $key != 'dataid' ) {
$presetxmldata .= " < $key > " . htmlspecialchars ( $value ) . " </ $key > \n " ;
}
}
$presetxmldata .= " </field> \n \n " ;
}
}
$presetxmldata .= '</preset>' ;
2010-08-25 01:22:15 +00:00
return $presetxmldata ;
}
function data_presets_export ( $course , $cm , $data , $tostorage = false ) {
global $CFG , $DB ;
$presetname = clean_filename ( $data -> name ) . '-preset-' . gmdate ( " Ymd_Hi " );
2011-09-10 10:43:49 +02:00
$exportsubdir = " mod_data/presetexport/ $presetname " ;
make_temp_directory ( $exportsubdir );
2012-02-03 07:59:52 +08:00
$exportdir = " $CFG->tempdir / $exportsubdir " ;
2010-08-25 01:22:15 +00:00
// Assemble "preset.xml":
$presetxmldata = data_presets_generate_xml ( $course , $cm , $data );
2010-08-04 08:23:52 +00:00
// After opening a file in write mode, close it asap
$presetxmlfile = fopen ( $exportdir . '/preset.xml' , 'w' );
fwrite ( $presetxmlfile , $presetxmldata );
fclose ( $presetxmlfile );
// Now write the template files
$singletemplate = fopen ( $exportdir . '/singletemplate.html' , 'w' );
fwrite ( $singletemplate , $data -> singletemplate );
fclose ( $singletemplate );
$listtemplateheader = fopen ( $exportdir . '/listtemplateheader.html' , 'w' );
fwrite ( $listtemplateheader , $data -> listtemplateheader );
fclose ( $listtemplateheader );
$listtemplate = fopen ( $exportdir . '/listtemplate.html' , 'w' );
fwrite ( $listtemplate , $data -> listtemplate );
fclose ( $listtemplate );
$listtemplatefooter = fopen ( $exportdir . '/listtemplatefooter.html' , 'w' );
fwrite ( $listtemplatefooter , $data -> listtemplatefooter );
fclose ( $listtemplatefooter );
$addtemplate = fopen ( $exportdir . '/addtemplate.html' , 'w' );
fwrite ( $addtemplate , $data -> addtemplate );
fclose ( $addtemplate );
$rsstemplate = fopen ( $exportdir . '/rsstemplate.html' , 'w' );
fwrite ( $rsstemplate , $data -> rsstemplate );
fclose ( $rsstemplate );
$rsstitletemplate = fopen ( $exportdir . '/rsstitletemplate.html' , 'w' );
fwrite ( $rsstitletemplate , $data -> rsstitletemplate );
fclose ( $rsstitletemplate );
$csstemplate = fopen ( $exportdir . '/csstemplate.css' , 'w' );
fwrite ( $csstemplate , $data -> csstemplate );
fclose ( $csstemplate );
$jstemplate = fopen ( $exportdir . '/jstemplate.js' , 'w' );
fwrite ( $jstemplate , $data -> jstemplate );
fclose ( $jstemplate );
$asearchtemplate = fopen ( $exportdir . '/asearchtemplate.html' , 'w' );
fwrite ( $asearchtemplate , $data -> asearchtemplate );
fclose ( $asearchtemplate );
// Check if all files have been generated
if ( ! is_directory_a_preset ( $exportdir )) {
print_error ( 'generateerror' , 'data' );
}
2010-09-23 06:45:05 +00:00
$filenames = array (
2010-08-04 08:23:52 +00:00
'preset.xml' ,
'singletemplate.html' ,
'listtemplateheader.html' ,
'listtemplate.html' ,
'listtemplatefooter.html' ,
'addtemplate.html' ,
'rsstemplate.html' ,
'rsstitletemplate.html' ,
'csstemplate.css' ,
'jstemplate.js' ,
'asearchtemplate.html'
);
2010-09-23 06:45:05 +00:00
$filelist = array ();
foreach ( $filenames as $filename ) {
$filelist [ $filename ] = $exportdir . '/' . $filename ;
2010-08-04 08:23:52 +00:00
}
2010-08-25 01:22:15 +00:00
$exportfile = $exportdir . '.zip' ;
2010-08-04 08:23:52 +00:00
file_exists ( $exportfile ) && unlink ( $exportfile );
2010-08-25 01:22:15 +00:00
2010-09-18 12:42:06 +00:00
$fp = get_file_packer ( 'application/zip' );
$fp -> archive_to_pathname ( $filelist , $exportfile );
2010-08-25 01:22:15 +00:00
2010-08-04 08:23:52 +00:00
foreach ( $filelist as $file ) {
unlink ( $file );
}
rmdir ( $exportdir );
// Return the full path to the exported preset file:
return $exportfile ;
2010-08-25 03:50:19 +00:00
}
2011-05-04 17:23:46 +08:00
/**
* Running addtional permission check on plugin , for example , plugins
* may have switch to turn on / off comments option , this callback will
* affect UI display , not like pluginname_comment_validate only throw
* exceptions .
* Capability check has been done in comment -> check_permissions (), we
* don ' t need to do it again here .
*
2012-02-15 11:21:35 +08:00
* @ package mod_data
* @ category comment
*
2011-05-04 17:23:46 +08:00
* @ param stdClass $comment_param {
* context => context the context object
* courseid => int course id
* cm => stdClass course module object
* commentarea => string comment area
* itemid => int itemid
* }
* @ return array
*/
function data_comment_permissions ( $comment_param ) {
global $CFG , $DB ;
if ( ! $record = $DB -> get_record ( 'data_records' , array ( 'id' => $comment_param -> itemid ))) {
throw new comment_exception ( 'invalidcommentitemid' );
}
if ( ! $data = $DB -> get_record ( 'data' , array ( 'id' => $record -> dataid ))) {
throw new comment_exception ( 'invalidid' , 'data' );
}
if ( $data -> comments ) {
return array ( 'post' => true , 'view' => true );
} else {
return array ( 'post' => false , 'view' => false );
}
}
/**
* Validate comment parameter before perform other comments actions
*
2012-02-15 11:21:35 +08:00
* @ package mod_data
* @ category comment
*
2011-05-04 17:23:46 +08:00
* @ param stdClass $comment_param {
* context => context the context object
* courseid => int course id
* cm => stdClass course module object
* commentarea => string comment area
* itemid => int itemid
* }
* @ return boolean
*/
function data_comment_validate ( $comment_param ) {
global $DB ;
// validate comment area
if ( $comment_param -> commentarea != 'database_entry' ) {
throw new comment_exception ( 'invalidcommentarea' );
}
// validate itemid
if ( ! $record = $DB -> get_record ( 'data_records' , array ( 'id' => $comment_param -> itemid ))) {
throw new comment_exception ( 'invalidcommentitemid' );
}
if ( ! $data = $DB -> get_record ( 'data' , array ( 'id' => $record -> dataid ))) {
throw new comment_exception ( 'invalidid' , 'data' );
}
if ( ! $course = $DB -> get_record ( 'course' , array ( 'id' => $data -> course ))) {
throw new comment_exception ( 'coursemisconf' );
}
if ( ! $cm = get_coursemodule_from_instance ( 'data' , $data -> id , $course -> id )) {
throw new comment_exception ( 'invalidcoursemodule' );
}
if ( ! $data -> comments ) {
throw new comment_exception ( 'commentsoff' , 'data' );
}
2012-07-26 13:57:56 +08:00
$context = context_module :: instance ( $cm -> id );
2011-05-04 17:23:46 +08:00
//check if approved
if ( $data -> approval and ! $record -> approved and ! data_isowner ( $record ) and ! has_capability ( 'mod/data:approve' , $context )) {
throw new comment_exception ( 'notapproved' , 'data' );
}
// group access
if ( $record -> groupid ) {
$groupmode = groups_get_activity_groupmode ( $cm , $course );
if ( $groupmode == SEPARATEGROUPS and ! has_capability ( 'moodle/site:accessallgroups' , $context )) {
if ( ! groups_is_member ( $record -> groupid )) {
throw new comment_exception ( 'notmemberofgroup' );
}
}
}
// validate context id
if ( $context -> id != $comment_param -> context -> id ) {
throw new comment_exception ( 'invalidcontext' );
}
// validation for comment deletion
if ( ! empty ( $comment_param -> commentid )) {
if ( $comment = $DB -> get_record ( 'comments' , array ( 'id' => $comment_param -> commentid ))) {
if ( $comment -> commentarea != 'database_entry' ) {
throw new comment_exception ( 'invalidcommentarea' );
}
if ( $comment -> contextid != $comment_param -> context -> id ) {
throw new comment_exception ( 'invalidcontext' );
}
if ( $comment -> itemid != $comment_param -> itemid ) {
throw new comment_exception ( 'invalidcommentitemid' );
}
} else {
throw new comment_exception ( 'invalidcommentid' );
}
}
return true ;
}
MDL-26105 Block settings should contains less options, and be more user friendly
AMOS BEGIN
MOV [page-blog-index, pagetype], [page-blog-index, blog]
MOV [page-blog-x, pagetype], [page-blog-x, blog]
MOV [page-tag-x, pagetype], [page-tag-x, tag]
MOV [page-course-view-weeks, pagetype], [page-course-view-weeks, format_weeks]
MOV [page-course-view-weeks-x, pagetype], [page-course-view-weeks-x, format_weeks]
MOV [page-course-view-topics, pagetype], [page-course-view-topics, format_topics]
MOV [page-course-view-topics-x, pagetype], [page-course-view-topics-x, format_topics]
AMOS END
2011-04-28 11:20:30 +08:00
/**
* Return a list of page types
* @ param string $pagetype current page type
* @ param stdClass $parentcontext Block ' s parent context
* @ param stdClass $currentcontext Current context of block
*/
2011-06-17 16:23:10 +08:00
function data_page_type_list ( $pagetype , $parentcontext , $currentcontext ) {
MDL-26105 Block settings should contains less options, and be more user friendly
AMOS BEGIN
MOV [page-blog-index, pagetype], [page-blog-index, blog]
MOV [page-blog-x, pagetype], [page-blog-x, blog]
MOV [page-tag-x, pagetype], [page-tag-x, tag]
MOV [page-course-view-weeks, pagetype], [page-course-view-weeks, format_weeks]
MOV [page-course-view-weeks-x, pagetype], [page-course-view-weeks-x, format_weeks]
MOV [page-course-view-topics, pagetype], [page-course-view-topics, format_topics]
MOV [page-course-view-topics-x, pagetype], [page-course-view-topics-x, format_topics]
AMOS END
2011-04-28 11:20:30 +08:00
$module_pagetype = array ( 'mod-data-*' => get_string ( 'page-mod-data-x' , 'data' ));
return $module_pagetype ;
}
2011-12-13 10:45:48 +08:00
/**
* Get all of the record ids from a database activity .
*
* @ param int $dataid The dataid of the database module .
* @ return array $idarray An array of record ids
*/
function data_get_all_recordids ( $dataid ) {
global $DB ;
$initsql = ' SELECT c . recordid
FROM { data_fields } f ,
{ data_content } c
WHERE f . dataid = : dataid
AND f . id = c . fieldid
GROUP BY c . recordid ' ;
$initrecord = $DB -> get_recordset_sql ( $initsql , array ( 'dataid' => $dataid ));
$idarray = array ();
foreach ( $initrecord as $data ) {
$idarray [] = $data -> recordid ;
}
// Close the record set and free up resources.
$initrecord -> close ();
return $idarray ;
}
/**
* Get the ids of all the records that match that advanced search criteria
* This goes and loops through each criterion one at a time until it either
* runs out of records or returns a subset of records .
*
* @ param array $recordids An array of record ids .
2012-05-08 09:21:24 +08:00
* @ param array $searcharray Contains information for the advanced search criteria
2011-12-13 10:45:48 +08:00
* @ param int $dataid The data id of the database .
* @ return array $recordids An array of record ids .
*/
function data_get_advance_search_ids ( $recordids , $searcharray , $dataid ) {
$searchcriteria = array_keys ( $searcharray );
// Loop through and reduce the IDs one search criteria at a time.
foreach ( $searchcriteria as $key ) {
$recordids = data_get_recordids ( $key , $searcharray , $dataid , $recordids );
// If we don't have anymore IDs then stop.
if ( ! $recordids ) {
break ;
}
}
return $recordids ;
}
/**
* Gets the record IDs given the search criteria
*
2012-05-08 09:21:24 +08:00
* @ param string $alias Record alias .
* @ param array $searcharray Criteria for the search .
2011-12-13 10:45:48 +08:00
* @ param int $dataid Data ID for the database
* @ param array $recordids An array of record IDs .
* @ return array $nestarray An arry of record IDs
*/
function data_get_recordids ( $alias , $searcharray , $dataid , $recordids ) {
global $DB ;
$nestsearch = $searcharray [ $alias ];
// searching for content outside of mdl_data_content
if ( $alias < 0 ) {
$alias = '' ;
}
list ( $insql , $params ) = $DB -> get_in_or_equal ( $recordids , SQL_PARAMS_NAMED );
$nestselect = 'SELECT c' . $alias . ' . recordid
FROM { data_content } c ' . $alias . ' ,
{ data_fields } f ,
{ data_records } r ,
{ user } u ' ;
$nestwhere = ' WHERE u . id = r . userid
AND f . id = c ' . $alias . ' . fieldid
AND r . id = c ' . $alias . ' . recordid
AND r . dataid = : dataid
AND c ' . $alias .' . recordid ' . $insql . '
AND ' ;
$params [ 'dataid' ] = $dataid ;
if ( count ( $nestsearch -> params ) != 0 ) {
$params = array_merge ( $params , $nestsearch -> params );
$nestsql = $nestselect . $nestwhere . $nestsearch -> sql ;
} else {
$thing = $DB -> sql_like ( $nestsearch -> field , ':search1' , false );
$nestsql = $nestselect . $nestwhere . $thing . ' GROUP BY c' . $alias . '.recordid' ;
$params [ 'search1' ] = " % $nestsearch->data % " ;
}
$nestrecords = $DB -> get_recordset_sql ( $nestsql , $params );
$nestarray = array ();
foreach ( $nestrecords as $data ) {
$nestarray [] = $data -> recordid ;
}
// Close the record set and free up resources.
$nestrecords -> close ();
return $nestarray ;
}
/**
* Returns an array with an sql string for advanced searches and the parameters that go with them .
*
* @ param int $sort DATA_ *
2012-05-08 09:21:24 +08:00
* @ param stdClass $data Data module object
2011-12-13 10:45:48 +08:00
* @ param array $recordids An array of record IDs .
2012-05-08 09:21:24 +08:00
* @ param string $selectdata Information for the select part of the sql statement .
2011-12-13 10:45:48 +08:00
* @ param string $sortorder Additional sort parameters
2012-05-08 09:21:24 +08:00
* @ return array sqlselect sqlselect [ 'sql' ] has the sql string , sqlselect [ 'params' ] contains an array of parameters .
2011-12-13 10:45:48 +08:00
*/
function data_get_advanced_search_sql ( $sort , $data , $recordids , $selectdata , $sortorder ) {
global $DB ;
if ( $sort == 0 ) {
$nestselectsql = ' SELECT r . id , r . approved , r . timecreated , r . timemodified , r . userid , u . firstname , u . lastname
FROM { data_content } c ,
{ data_records } r ,
{ user } u ' ;
$groupsql = ' GROUP BY r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname ' ;
} else {
2012-05-08 09:21:24 +08:00
// Sorting through 'Other' criteria
if ( $sort <= 0 ) {
switch ( $sort ) {
case DATA_LASTNAME :
$sortcontentfull = " u.lastname " ;
break ;
case DATA_FIRSTNAME :
$sortcontentfull = " u.firstname " ;
break ;
case DATA_APPROVED :
$sortcontentfull = " r.approved " ;
break ;
case DATA_TIMEMODIFIED :
$sortcontentfull = " r.timemodified " ;
break ;
case DATA_TIMEADDED :
default :
$sortcontentfull = " r.timecreated " ;
}
} else {
$sortfield = data_get_field_from_id ( $sort , $data );
$sortcontent = $DB -> sql_compare_text ( 'c.' . $sortfield -> get_sort_field ());
$sortcontentfull = $sortfield -> get_sort_sql ( $sortcontent );
}
2012-04-03 15:06:09 +08:00
$nestselectsql = 'SELECT r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname, ' . $sortcontentfull . '
2012-05-18 16:39:53 +08:00
AS sortorder
2011-12-13 10:45:48 +08:00
FROM { data_content } c ,
{ data_records } r ,
{ user } u ' ;
2012-04-03 15:06:09 +08:00
$groupsql = ' GROUP BY r.id, r.approved, r.timecreated, r.timemodified, r.userid, u.firstname, u.lastname, ' . $sortcontentfull ;
2011-12-13 10:45:48 +08:00
}
$nestfromsql = ' WHERE c . recordid = r . id
AND r . dataid = : dataid
AND r . userid = u . id ' ;
// Find the field we are sorting on
if ( $sort > 0 or data_get_field_from_id ( $sort , $data )) {
$nestfromsql .= ' AND c.fieldid = :sort' ;
}
// If there are no record IDs then return an sql statment that will return no rows.
if ( count ( $recordids ) != 0 ) {
list ( $insql , $inparam ) = $DB -> get_in_or_equal ( $recordids , SQL_PARAMS_NAMED );
} else {
list ( $insql , $inparam ) = $DB -> get_in_or_equal ( array ( '-1' ), SQL_PARAMS_NAMED );
}
$nestfromsql .= ' AND c.recordid ' . $insql . $groupsql ;
$nestfromsql = " $nestfromsql $selectdata " ;
$sqlselect [ 'sql' ] = " $nestselectsql $nestfromsql $sortorder " ;
$sqlselect [ 'params' ] = $inparam ;
return $sqlselect ;
2011-09-16 11:44:14 +08:00
}
2012-05-02 09:03:22 +08:00
/**
* Checks to see if the user has permission to delete the preset .
* @ param stdClass $context Context object .
* @ param stdClass $preset The preset object that we are checking for deletion .
* @ return bool Returns true if the user can delete , otherwise false .
*/
function data_user_can_delete_preset ( $context , $preset ) {
global $USER ;
if ( has_capability ( 'mod/data:manageuserpresets' , $context )) {
return true ;
} else {
$candelete = false ;
if ( $preset -> userid == $USER -> id ) {
$candelete = true ;
}
return $candelete ;
}
2012-05-10 14:11:24 +12:00
}