<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.mipt.ru/index.php?action=history&amp;feed=atom&amp;title=Development%3ALibraries_Organization</id>
	<title>Development:Libraries Organization - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.mipt.ru/index.php?action=history&amp;feed=atom&amp;title=Development%3ALibraries_Organization"/>
	<link rel="alternate" type="text/html" href="http://wiki.mipt.ru/index.php?title=Development:Libraries_Organization&amp;action=history"/>
	<updated>2026-05-07T09:35:00Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>http://wiki.mipt.ru/index.php?title=Development:Libraries_Organization&amp;diff=11298&amp;oldid=prev</id>
		<title>Олег Давидович: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://wiki.mipt.ru/index.php?title=Development:Libraries_Organization&amp;diff=11298&amp;oldid=prev"/>
		<updated>2024-10-21T08:51:23Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 08:51, 21 октября 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Олег Давидович</name></author>
	</entry>
	<entry>
		<id>http://wiki.mipt.ru/index.php?title=Development:Libraries_Organization&amp;diff=11297&amp;oldid=prev</id>
		<title>1&gt;Dougiamas в 03:59, 16 марта 2010</title>
		<link rel="alternate" type="text/html" href="http://wiki.mipt.ru/index.php?title=Development:Libraries_Organization&amp;diff=11297&amp;oldid=prev"/>
		<updated>2010-03-16T03:59:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Moodle 2.0}}&lt;br /&gt;
This document defines standard library structures to keep Moodle readable and organised.&lt;br /&gt;
&lt;br /&gt;
= Structure =&lt;br /&gt;
&lt;br /&gt;
There are several standard locations for library code in Moodle. &lt;br /&gt;
&lt;br /&gt;
==Simple core library==&lt;br /&gt;
&lt;br /&gt;
If the widget feature is a very simple core library with no GUI scripts (like formslib) then do it like this:&lt;br /&gt;
&lt;br /&gt;
====lib/widgetlib.php====&lt;br /&gt;
&lt;br /&gt;
::This contains the main library functions.  New ones should always implement these as a class.  &lt;br /&gt;
&lt;br /&gt;
====lib/widget====&lt;br /&gt;
&lt;br /&gt;
::Any supporting files for this library can go in this sub-directory.  This directory should not contain any GUI scripts and files from here should NOT be directly included in Moodle code.&lt;br /&gt;
&lt;br /&gt;
==Plugins and complex core libraries==&lt;br /&gt;
&lt;br /&gt;
If the feature has some GUI scripts then it should have its own directory (eg like blog, comment, mod/forum, local/widget etc) and then this is always applies:&lt;br /&gt;
&lt;br /&gt;
====widget/locallib.php====&lt;br /&gt;
::for functions and classes that will only be used by scripts in widget directory. Generally there will be no capability checks in these functions.&lt;br /&gt;
====widget/lib.php====&lt;br /&gt;
::the main library file for the module containing functions that are either required by core code (eg forum_cron()), or simply being made available to other Moodle code (eg comment/lib.php).  Generally there will be no capability checks in these functions.&lt;br /&gt;
====widget/externallib.php====&lt;br /&gt;
::for functions and classes implementing external interface for use by third-party systems like web services, and may also be used by other modules in Moodle. These functions are a very stable API and implement full capability checking.&lt;br /&gt;
&lt;br /&gt;
= Refactoring of old code = &lt;br /&gt;
&lt;br /&gt;
This is some code that was refactored in 2.0 to fit the above guidelines. &lt;br /&gt;
&lt;br /&gt;
==Groups==&lt;br /&gt;
&lt;br /&gt;
===currently in group/lib.php===&lt;br /&gt;
* groups_add_member($grouporid, $userorid)&lt;br /&gt;
* groups_remove_member($grouporid, $userorid)&lt;br /&gt;
* groups_create_group($data, $editform=false, $editoroptions=null)&lt;br /&gt;
* groups_create_grouping($data, $editoroptions=null)&lt;br /&gt;
* groups_update_group($data, $editform=false)&lt;br /&gt;
* groups_update_grouping($data, $editoroptions=null)&lt;br /&gt;
* groups_delete_group($grouporid)&lt;br /&gt;
* groups_delete_grouping($groupingorid)&lt;br /&gt;
* groups_delete_group_members($courseid, $userid=0, $showfeedback=false)&lt;br /&gt;
* groups_delete_groupings_groups($courseid, $showfeedback=false)&lt;br /&gt;
* groups_delete_groups($courseid, $showfeedback=false)&lt;br /&gt;
* groups_delete_groupings($courseid, $showfeedback=false)&lt;br /&gt;
* groups_get_possible_roles($context)&lt;br /&gt;
* groups_get_potential_members($courseid, $roleid = null, $orderby = &amp;#039;lastname,firstname&amp;#039;)&lt;br /&gt;
* groups_parse_name($format, $groupnumber)&lt;br /&gt;
* groups_assign_grouping($groupingid, $groupid)&lt;br /&gt;
* groups_unassign_grouping($groupingid, $groupid)&lt;br /&gt;
* groups_get_members_by_role($groupid, $courseid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;u.lastname ASC&amp;#039;, $extrawheretest=&amp;#039;&amp;#039;, $whereparams=array())&lt;br /&gt;
* groups_calculate_role_people($rs, $context)&lt;br /&gt;
&lt;br /&gt;
===currently in lib/grouplib.php===&lt;br /&gt;
* groups_group_exists($groupid)&lt;br /&gt;
* groups_get_group_name($groupid)&lt;br /&gt;
* groups_get_grouping_name($groupingid)&lt;br /&gt;
* groups_get_group_by_name($courseid, $name)&lt;br /&gt;
* groups_get_grouping_by_name($courseid, $name)&lt;br /&gt;
* groups_get_group($groupid, $fields=&amp;#039;*&amp;#039;, $strictness=IGNORE_MISSING)&lt;br /&gt;
* groups_get_grouping($groupingid, $fields=&amp;#039;*&amp;#039;, $strictness=IGNORE_MISSING)&lt;br /&gt;
* groups_get_all_groups($courseid, $userid=0, $groupingid=0, $fields=&amp;#039;g.*&amp;#039;)&lt;br /&gt;
* groups_get_user_groups($courseid, $userid=0)&lt;br /&gt;
* groups_get_all_groupings($courseid)&lt;br /&gt;
* groups_is_member($groupid, $userid=null)&lt;br /&gt;
* groups_has_membership($cm, $userid=null)&lt;br /&gt;
* groups_get_members($groupid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;lastname ASC&amp;#039;)&lt;br /&gt;
* groups_get_grouping_members($groupingid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;lastname ASC&amp;#039;)&lt;br /&gt;
* groups_get_course_groupmode($course)&lt;br /&gt;
* groups_get_activity_groupmode($cm, $course=null)&lt;br /&gt;
* groups_print_course_menu($course, $urlroot, $return=false)&lt;br /&gt;
* groups_print_activity_menu($cm, $urlroot, $return=false, $hideallparticipants=false)&lt;br /&gt;
* groups_get_course_group($course, $update=false)&lt;br /&gt;
* groups_get_activity_group($cm, $update=false)&lt;br /&gt;
* groups_get_activity_allowed_groups($cm,$userid=0)&lt;br /&gt;
* groups_course_module_visible($cm, $userid=null)&lt;br /&gt;
&lt;br /&gt;
=== New group/lib.php ===&lt;br /&gt;
* groups_add_member($grouporid, $userorid)&lt;br /&gt;
* groups_remove_member($grouporid, $userorid)&lt;br /&gt;
* groups_create_group($data, $editform=false, $editoroptions=null)&lt;br /&gt;
* groups_create_grouping($data, $editoroptions=null)&lt;br /&gt;
* groups_update_group($data, $editform=false)&lt;br /&gt;
* groups_update_grouping($data, $editoroptions=null)&lt;br /&gt;
* groups_delete_group($grouporid)&lt;br /&gt;
* groups_delete_grouping($groupingorid)&lt;br /&gt;
* groups_delete_group_members($courseid, $userid=0, $showfeedback=false)&lt;br /&gt;
* groups_delete_groupings_groups($courseid, $showfeedback=false)&lt;br /&gt;
* groups_delete_groups($courseid, $showfeedback=false)&lt;br /&gt;
* groups_delete_groupings($courseid, $showfeedback=false)&lt;br /&gt;
* groups_assign_grouping($groupingid, $groupid)&lt;br /&gt;
* groups_unassign_grouping($groupingid, $groupid)&lt;br /&gt;
* groups_get_members_by_role($groupid, $courseid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;u.lastname ASC&amp;#039;, $extrawheretest=&amp;#039;&amp;#039;, $whereparams=array())&lt;br /&gt;
* groups_group_exists($groupid)&lt;br /&gt;
* groups_get_group_name($groupid)&lt;br /&gt;
* groups_get_grouping_name($groupingid)&lt;br /&gt;
* groups_get_group_by_name($courseid, $name)&lt;br /&gt;
* groups_get_grouping_by_name($courseid, $name)&lt;br /&gt;
* groups_get_group($groupid, $fields=&amp;#039;*&amp;#039;, $strictness=IGNORE_MISSING)&lt;br /&gt;
* groups_get_grouping($groupingid, $fields=&amp;#039;*&amp;#039;, $strictness=IGNORE_MISSING)&lt;br /&gt;
* groups_get_all_groups($courseid, $userid=0, $groupingid=0, $fields=&amp;#039;g.*&amp;#039;)&lt;br /&gt;
* groups_get_user_groups($courseid, $userid=0)&lt;br /&gt;
* groups_get_all_groupings($courseid)&lt;br /&gt;
* groups_is_member($groupid, $userid=null)&lt;br /&gt;
* groups_has_membership($cm, $userid=null)&lt;br /&gt;
* groups_get_members($groupid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;lastname ASC&amp;#039;)&lt;br /&gt;
* groups_get_grouping_members($groupingid, $fields=&amp;#039;u.*&amp;#039;, $sort=&amp;#039;lastname ASC&amp;#039;)&lt;br /&gt;
* groups_get_course_groupmode($course)&lt;br /&gt;
* groups_get_activity_groupmode($cm, $course=null)&lt;br /&gt;
* groups_get_course_group($course, $update=false)&lt;br /&gt;
* groups_get_activity_group($cm, $update=false)&lt;br /&gt;
* groups_get_activity_allowed_groups($cm,$userid=0)&lt;br /&gt;
* groups_print_course_menu($course, $urlroot, $return=false)&lt;br /&gt;
* groups_print_activity_menu($cm, $urlroot, $return=false, $hideallparticipants=false)&lt;br /&gt;
* groups_course_module_visible($cm, $userid=null)&lt;br /&gt;
&lt;br /&gt;
=== New group/locallib.php ===&lt;br /&gt;
groups_get_possible_roles($context)&amp;lt;br/&amp;gt;&lt;br /&gt;
groups_get_potential_members($courseid, $roleid = null, $orderby = &amp;#039;lastname,firstname&amp;#039;)&amp;lt;br/&amp;gt;&lt;br /&gt;
groups_parse_name($format, $groupnumber)&amp;lt;br/&amp;gt;&lt;br /&gt;
groups_calculate_role_people($rs, $context)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Users==&lt;br /&gt;
&lt;br /&gt;
===Currently in lib/datalib.php ===&lt;br /&gt;
* get_users($get=true, $search=&amp;#039;&amp;#039;, $confirmed=false, array $exceptions=null, $sort=&amp;#039;firstname ASC&amp;#039;, $firstinitial=&amp;#039;&amp;#039;, $lastinitial=&amp;#039;&amp;#039;, $page=&amp;#039;&amp;#039;, $recordsperpage=&amp;#039;&amp;#039;, $fields=&amp;#039;*&amp;#039;, $extraselect=&amp;#039;&amp;#039;, array $extraparams=null) &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* get_users_confirmed()&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* get_users_listing($sort=&amp;#039;lastaccess&amp;#039;, $dir=&amp;#039;ASC&amp;#039;, $page=0, $recordsperpage=0, $search=&amp;#039;&amp;#039;, $firstinitial=&amp;#039;&amp;#039;, $lastinitial=&amp;#039;&amp;#039;, $extraselect=&amp;#039;&amp;#039;, array $extraparams=null)&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* search_users($courseid, $groupid, $searchtext, $sort=&amp;#039;&amp;#039;, array $exceptions=null)&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* user_accesstime_log($courseid=0)&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* user_can_create_courses()&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Currently in user/profile/lib.php ===&lt;br /&gt;
* profile_user_record($userid) &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
* profile_load_data(&amp;amp;$user)&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;New for triage&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Currently in lib/moodlelib.php ===&lt;br /&gt;
authenticate_user_login($username, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
calculate_user_dst_table($from_year = NULL, $to_year = NULL, $strtimezone = NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
check_user_preferences_loaded($time = null)&amp;lt;br/&amp;gt;&lt;br /&gt;
complete_user_login($user, $setcookie=true)&amp;lt;br/&amp;gt;&lt;br /&gt;
create_user_key($script, $userid, $instance=null, $iprestriction=null, $validuntil=null)&amp;lt;br/&amp;gt;&lt;br /&gt;
create_user_record($username, $password, $auth=&amp;#039;manual&amp;#039;)&amp;lt;br/&amp;gt;&lt;br /&gt;
delete_user($user)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_complete_user_data($field, $value, $mnethostid=null)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_directories($only_non_empty=true, $legacy=false)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_fieldnames()&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_preferences($name=NULL, $default=NULL, $otheruserid=NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_timezone($tz = 99)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_timezone_offset($tz = 99)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_users_from_config($value, $capability)&amp;lt;br/&amp;gt;&lt;br /&gt;
guest_user()&amp;lt;br/&amp;gt;&lt;br /&gt;
hash_internal_user_password($password)&amp;lt;br/&amp;gt;&lt;br /&gt;
is_restored_user($username)&amp;lt;br/&amp;gt;&lt;br /&gt;
isguestuser($user=NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
isloggedin()&amp;lt;br/&amp;gt;&lt;br /&gt;
make_user_directory($userid, $test=false)&amp;lt;br/&amp;gt;&lt;br /&gt;
mark_user_preferences_changed($userid)&amp;lt;br/&amp;gt;&lt;br /&gt;
set_user_preference($name, $value, $otheruserid=NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
set_user_preferences($prefarray, $otheruserid=NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
truncate_userinfo($info)&amp;lt;br/&amp;gt;&lt;br /&gt;
unset_user_preference($name, $otheruserid=NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
update_internal_user_password(&amp;amp;$user, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
update_user_login_times()&amp;lt;br/&amp;gt;&lt;br /&gt;
update_user_record($username, $authplugin)&amp;lt;br/&amp;gt;&lt;br /&gt;
user_not_fully_set_up($user)&amp;lt;br/&amp;gt;&lt;br /&gt;
user_preference_allow_ajax_update($name, $paramtype)&amp;lt;br/&amp;gt;&lt;br /&gt;
userdate($date, $format = &amp;#039;&amp;#039;, $timezone = 99, $fixday = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
usergetdate($time, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usergetmidnight($date, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usertime($date, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usertimezone($timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
validate_internal_user_password(&amp;amp;$user, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Move to lib/deprecatedlib.php ===&lt;br /&gt;
* create_user_record($username, $password, $auth=&amp;#039;manual&amp;#039;)&lt;br /&gt;
* update_user_record($username, $authplugin)&lt;br /&gt;
* get_complete_user_data($field, $value, $mnethostid=null)&lt;br /&gt;
&lt;br /&gt;
=== New user/lib.php ===&lt;br /&gt;
* user_create_user($user)&lt;br /&gt;
* user_delete_user($user)&lt;br /&gt;
* user_update_user($user)&lt;br /&gt;
* user_get_user($user)&lt;br /&gt;
&lt;br /&gt;
* get_user_preferences($name=NULL, $default=NULL, $otheruserid=NULL)&lt;br /&gt;
* set_user_preference($name, $value, $otheruserid=NULL)&lt;br /&gt;
* set_user_preferences($prefarray, $otheruserid=NULL)&lt;br /&gt;
* unset_user_preference($name, $otheruserid=NULL)&lt;br /&gt;
* guest_user()&lt;br /&gt;
* isguestuser($user=NULL)&lt;br /&gt;
* isloggedin()&lt;br /&gt;
* is_restored_user($username)&lt;br /&gt;
* complete_user_login($user, $setcookie=true)&lt;br /&gt;
&lt;br /&gt;
=== New user/locallib.php ===&lt;br /&gt;
authenticate_user_login($username, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
check_user_preferences_loaded($time = null)&amp;lt;br/&amp;gt;&lt;br /&gt;
create_user_key($script, $userid, $instance=null, $iprestriction=null, $validuntil=null)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_directories($only_non_empty=true, $legacy=false)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_fieldnames()&amp;lt;br/&amp;gt;&lt;br /&gt;
get_users_from_config($value, $capability)&amp;lt;br/&amp;gt;&lt;br /&gt;
hash_internal_user_password($password)&amp;lt;br/&amp;gt;&lt;br /&gt;
make_user_directory($userid, $test=false)&amp;lt;br/&amp;gt;&lt;br /&gt;
mark_user_preferences_changed($userid)&amp;lt;br/&amp;gt;&lt;br /&gt;
truncate_userinfo($info)&amp;lt;br/&amp;gt;&lt;br /&gt;
update_internal_user_password(&amp;amp;$user, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
update_user_login_times()&amp;lt;br/&amp;gt;&lt;br /&gt;
user_not_fully_set_up($user)&amp;lt;br/&amp;gt;&lt;br /&gt;
user_preference_allow_ajax_update($name, $paramtype)&amp;lt;br/&amp;gt;&lt;br /&gt;
validate_internal_user_password(&amp;amp;$user, $password)&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New lib/timelib.php ===&lt;br /&gt;
&lt;br /&gt;
userdate($date, $format = &amp;#039;&amp;#039;, $timezone = 99, $fixday = true)&amp;lt;br/&amp;gt;&lt;br /&gt;
usergetdate($time, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usergetmidnight($date, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usertime($date, $timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
usertimezone($timezone=99)&amp;lt;br/&amp;gt;&lt;br /&gt;
calculate_user_dst_table($from_year = NULL, $to_year = NULL, $strtimezone = NULL)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_timezone($tz = 99)&amp;lt;br/&amp;gt;&lt;br /&gt;
get_user_timezone_offset($tz = 99)&amp;lt;br/&amp;gt;&lt;/div&gt;</summary>
		<author><name>1&gt;Dougiamas</name></author>
	</entry>
</feed>