<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
* A tiddler's tags are show ''above'' the tiddlers title (instead of in a right-floated box).
* A tiddler's tagging list is shown ''below'' the tiddlers content (instead of in a left-floated box).
These layout changes are done with small changes to ViewTemplate (See TagglyTaggingViewTempplate) and EditTemplate (see TagglyTaggingEditTemplate) and with some CSS from TagglyTaggingStyles.
The default TW tagging macro is called "tagging". TagglyTagging provides an enhanced version of this called "tagglyTagging". So in the TagglyTaggingViewTemplate, macro="tagging" is replaced by "macro="tagglyTagging". The tagglyTagging macro lets you do things like:
* Sort the tagged list ascending or descending by title, modified date or created date
* Format the list in columns
* Hide the tagged list
It also remembers your preference on a per-tiddler basis. 
The "New Here" button is optional but very useful. It lets you quickly create a new tiddler that is automatically tagged with the tag you're looking at. Eg if you are looking at Addresses, clicking "new here" creates a new Address.
This is also optional. Because we often want to view a tag as a tiddler this makes the default action when you click on a tag. You can access to other tag functions by clicking the drop down icon to the right of the tag.
!User accounts
are created with {{{accountsync.php}}} and pre-populated as follows. LDAP serves only to authenticate. +++[big advantage]>
What follows from this is that user accounts will exist on the system ''before'' the user logs in and therefore courses can be pre-populated with Teacher and Student enrollments.
=== 
User's Profile field is pre-populated ''before'' they login to the Moodle system with the following from :
* First name [givenName]
* Last name (surname) [sn]
* Email address [mail]
* Home town (city/town) -- permanent residence
* ID number -- student id (SPRIDEN_ID from Banner)
The fields are ''locked'' by the LDAP enrollment plugin so that the information comes from the {{{accountsync.php}}} script only and the user cannot change.
|!Profile Field|!LDAP field|!Lock value|!Banner field|!Comment|
|First name | givenName | unlocked| | |
|Surname | sn | locked| SPRIDEN_LAST_NAME | |
|Email address | mail | locked| GOREMAL_EMAIL_ADDRESS | |
|City/Town| blank | unlocked?| //needed// |not clear whether this should be locked|
|ID number| blank | locked| SPRIDEN_ID |uniquely identify person|
|Institution|'Earlham College'| locked| | |
|Description| blank | locked| from Banner View |Teacher, Staff, Administrator, Other|
;Lock value: 
:If enabled, will prevent Moodle users and admins from editing the field directly. Use this option if you are maintaining this data in the external auth system.
Installed MGMT334 on Rublev [[here|http://rublev.lly.earlham.edu/~markp/moo-p97/course/view.php?id=1004]]
We want groupings Marketeer / Stragegers so that only selected assignments appear to the grouping.
Add in 5 teams and see what effect that has.
[[Moodle Tracker summary|http://tracker.moodle.org/browse/MDL]] page has interesting chart of issues created and resolved. Most interesting however is the projected timetable for:
!!Versions due
|!Version|!Release Date|
| 1.9.11| 28-Feb-11|
| 2.0.2| 10-Feb-11|
| 2.1| 30-Jun-11|
The point here is one I've made before. The cycle of moodle releases is not conducive to the academic timetable of North American Higher Ed institutions. //If// we were going with version 2 next year, it would be foolish not to go with v2.1, but with the release at the end of June (at the //earliest//) this gives us just July to get all the plugins tested with this version.
TagglyTagging (also known as "TagglyWiki Style Tagging") is set of plugins, templates and styles you can install in your TiddlyWiki that let you use tagging in powerful and useful ways.
!!System Roles
;Librarian Moodle Support
: Reference Amy, Neal Reference.
: unset //Initial Subscriptions// so that they do not get email.
: check 'hidden assignment' box so that no-one sees them
: system wide role
;Course Assistant
: have ''removed'' Cheri Gaddis from system-wide role
: allocate to individual Categories
!!~Banner-Moodle Integration Project
Email from [[Ken Newquist|newquisk @ lafayette.edu]]
;To:
:To: "Fritz Vandover" (macalester.edu), "Barron Koralesky" (macalaster), "Joanne Cannon" (smith.edu), "Caroline Moore" (smith.edu), "Joseph Murphy" (kenyon.edu), "Mark Pearson" (earlham.edu)

Everyone,

A while back we talked about working together on Banner-Moodle  Integration as a CLAMP side project. This issue just popped back up on  our radar at Lafayette, and our administrative information services  office (AIS) has dedicated some programmer time to work on this.

To recap: after many conversations with Sungard about integrating   Banner and Moodle, the conclusion was reached that the only method  that Sungard supports for exporting Banner course and enrollment data  to an LMS (be it Moodle, Blackboard or Sakai) is through the IMS  Enterprise (http://docs.moodle.org/en/IMS_Enterprise).  There's a  Banner component from Sungard that will generate this IMS file which,  once created, can be used by Moodle to drive course creation, account  creation, and add/drops.  There are some issues with tweaking the  Banner IMS file to meet what Moodle wants, but we have scripts from  Bates College (who is doing this exact process) that can be used to  make those tweaks.

The last time we tried this at Lafayette (about a year ago IIRC,  before the project got sidelined by more pressing needs) we were able  to generate the basic XML skeleton of the IMS file, but it was empty,  with no course or enrollment data. We're now restarting this process  with the goal of having a working IMS export by November 1st and  having a development instance of Moodle successfully importing the  file by November 30.  Assuming we can get it to work, we'll try and  recreate the Fall 2009 enrollments and compare them about what we have  in our production instance. If we get it close to where we need it,  we'll do test runs (with our manual process running alongside the  automated IMS one) during the Winter and Spring terms.  If it all  shakes out, we'd like to be in production with this solution by Summer  2010.

These are arbitrary dates, as we're not sure how long any of this is  going to take, but it's a start.

We realize that everyone's project plans may already be set for the  Fall and Spring semesters, but since we've got the ball rolling here,  we wanted to see if anyone else wanted to join us.  I think there are  a few ways we could go about this:

# Have multiple schools attempt to implement Sungard's IMS export  option for Banner
# Have Lafayette make a go at it, and create a project that AIS  equivalents at our different schools could join to support the effort  (e.g. answering specific questions/problems that we come up against)
# Coordinating teleconferences between interested schools and places  like Bates, which have it working.
# Arranging a "mini-hack doc fest" to get AIS and Moodle folks  together to work through integration issues (or, depending on the timing, make that the focus of January's Hack/Doc Fest)
# All of the above.
# Something else entirely.

I've already taken the liberty of creating a CLAMP Redmine Project to  coordinate this effort:

http://redmine.clamp-it.org/projects/show/banner-moodle

If you're interested in this project, let me know -- I'll add you as  members of the Redmine Project, and we can continue our planning  efforts and discussions there.
I got this message from Ken Newquist and it seemed very timely since I had been intending to email you about this very topic (ie importing courses from Banner). While we on the old system of course registration for students I was sanguine about the need for direct course enrollment from Banner but now both students and faculty are confused when after having enrolled with Self Service they have to enrol in the course on Moodle as well. Ken's message below suggests that we could join with others in the CLAMP group for a joint approach to this and I think that this is an excellent idea.

There are a few other modifications to the Moodle system which I could do with Ben's help with:

* ZIP download of assignments. Several faculty have been asking for this one. I need to work with Ben on adapting the updated version (for v2.0) and making it backwards compatible with 1.9.5.
* Fix RSS reading. The Librarians are interested in RSS feeds and are pushing this. But the RSS reader in Moodle is broken. A CLAMP patch fixes this.
* Anonymous forums. I've had interest in the ability to make anonymous postings to a Forum. Again a CLAMP patch.
* TinyMCE html interface. Every text entry form in Moodle uses a WYSYWG html editor called HTMLArea. The problem is that it's obsolete, bug ridden and has not been maintained for years. Moodle v2.0 promises a choice of modern editors but that's a ways off. Mac users are particularly ill served because HTMLArea does not operate with the Safari browser which tends to be the default web browser folks use on the Mac. In addition, it does not cope well with MS Word pasting. The TinyMCE editor overcomes all these problems and I've been working with Bob Puffer from Luther College to get it going. He has come up with a patch (which is on the CLAMP repository) and here again, I could use some expert support with implementing this.

As you can see all of these are existing patches and it's a matter of carefully applying these and testing them out rather than from scratch coding.

+++[Ken Newquist's email]>
<<tiddler [[10 Sept 2009 Banner-Moodle Integration Project]]>>
=== 

<<notes heading:"Remarks" tag:"NoteTiddlers" suffix:"Notes">>
# Setup Moodle 2011 on the //test// server
** Make course backups and move to test server
# configure alias moodle.earlham.edu to point to new location on test server
# purchase new drives for production
** install new FreeBSD and 2 Jails
** set up jails with php ''and'' mysql
# copy code + data + database over
** freeze Moodle access
** check that it works
# switch alias to production!
In Jane Terashima's INTD203:201010
+++[Screen errors]>
Assignment fo...	
Include Quizzes without user data
Error: Missing question options!
Error: Missing question options!
Error: Missing question options!
Error: Missing question options for multichoice question1184!
Error: Missing question options for multichoice question1185!
Error: Missing question options for multichoice question1186!
Error: Missing question options for multichoice question1187!
Error: Missing question options for multichoice question1188!
Error: Missing question options for multichoice question1189!
Error: Missing question options for multichoice question1190!
Error: Missing question options for multichoice question1191!
Error: Missing question options for multichoice question1192!
Error: Missing question options for multichoice question1193!
Error: Missing question options!
Error: Missing question options!
Error: Missing question options!
Error: Missing question options!
Error: Missing question options!
Error: Missing question options for multichoice question1209!
Error: Missing question options for multichoice question1210!
Error: Missing question options for multichoice question1211!
Error: Missing question options for multichoice question1212!
Error: Missing question options for multichoice question1213!
=== 
[[This screenshot|graphics/terashima_intd203_missq.png]] of question 1189 shows why -- the answer options are simply not there!
[[github issues|http://github.com/djplaner/BIM/issues]] shows that BIM is actively being worked on. 
{{ts{12/05/10 12:02}}} Update the code with git and apply mods:
* +++[update]>
{{{
2010-test-mods/BIM]$ git pull
remote: Counting objects: 70, done.
remote: Compressing objects: 100% (53/53), done.
remote: Total 53 (delta 35), reused 0 (delta 0)
Unpacking objects: 100% (53/53), done.
From git://github.com/djplaner/BIM
   ab67e14..aa26e05  master     -> origin/master
Updating ab67e14..aa26e05
Fast forward
 README                       |    9 +++-
 backuplib.php                |    6 +-
 coordinator/find_student.php |    6 ++-
 db/install.xml               |    6 +-
 db/upgrade.php               |  116 ++++--------------------------------------
 icon.gif                     |  Bin 3292 -> 1655 bytes
 lib/bim_rss.php              |    6 ++-
 lib/locallib.php             |   23 ++++++++-
 lib/simplepie/simplepie.inc  |    2 +
 marker/view.php              |   16 ++++--
 version.php                  |    2 +-
 11 files changed, 68 insertions(+), 124 deletions(-)
}}}
=== Note that simplepie.inc has been changed.
* copy into place -- +++[code]>
{{{
/public_html/clamp-LAE/mod]$ sudo rm -r bim
/2010-test-mods]$ cp -r BIM ~/public_html/clamp-LAE/mod/bim
/public_html/clamp-LAE/mod/bim]$ sudo rm -r .git
}}}
=== 
* Apply modifications -- from [[BIM problems : more]] 
## delete the bim simplepie {{{clamp-LAE/mod/bim/lib]$ rm -r simplepie}}}
## repoint the location in ''bim_rss.php'' {{{  require_once($CFG->dirroot.'/lib/simplepie_1.2/simplepie.inc');}}}
* Also make sure to apply hack in simplepie.inc as outlined in [[BIM problems : https]]
* tar up modified version : {{{public_html/clamp-LAE/mod]$ tar cvzf ~/2010-test-mods/bim-may12-updated.tgz bim}}}
I did a full complete backup of this course from the production Moodle with all the users, grade histories, files, etc reasoning that if the restore is successful on this, it should work on most others.
+++[Success]
* Creating new course
          o MISC-DADA:2011 - Defence Against the Dark Arts (MISC-DADA:2011)
          o Category: Miscellaneous (MISC)
          o Not using an idnumber to avoid collisions
* Creating the Restorelog.html in the course backup folder
* Creating users
. . . . . . (New: 5, Existing: 17)
          o Students: 0
          o Teachers: 0
* Creating sections
{{{
<h2>Transfiguration with Trionna McGonnagal</h2><img width=\"352\" vspace=\"0\" hspace=\"4\" height=\"256\" border=\"4\"
 align=\"left\" title=\"Media girl\" alt=\"Media girl\" src=\"$@FILEPHP@$$@SLASH@$preview.jpg\" />
some text here<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />

      changed to

<h2>Transfiguration with Trionna McGonnagal</h2><img width=\"352\" vspace=\"0\" hspace=\"4\" height=\"256\" border=\"4\" 
align=\"left\" title=\"Media girl\" alt=\"Media girl\" src=\"http://rublev.lly.earlham.edu/~markp/clamp-LAE/file.php/192/preview.jpg\" />
some text here<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
}}}
* Creating categories and questions
          o Category "Default for MISC-DADA:2009 - Defence Against the Dark Arts"
          o Category "Default for ART212:201010 Survey of Western Art"
            . . . . . . . . . . . . . . . . .
          o Category "Default for FREN201:201010 -- Intermediate French"
{{{
            <h2>I – “L’oreille fine” comprehension exercise (45 MN. - 1 heure)</h2>IMPORTANT: Read a,b,c, BEFORE starting<br /> <ol type=\"a\"> <li>Read the title of each question (1-to 6). Listen to the tape step by step following the same order.</li> <li>Write a short paragraph for each sequence, giving as much information and details as you can. Write complete sentences. You will be evaluated on the quality and quantity of information that you were able to comprehend and transfer on paper.</li> <li>Strategy. Proceed step by step, jot down a few things on scrap paper to remember and then write your paragraph. If you have time you can listen to the tape a second time.</li> </ol><a href=\"$@FILEPHP@$$@SLASH@$Le_Grand_Chemin.mp3\" title=\"Comprehension audio\">Comprehension audio</a><br />
            changed to
            <h2>I – “L’oreille fine” comprehension exercise (45 MN. - 1 heure)</h2>IMPORTANT: Read a,b,c, BEFORE starting<br /> <ol type=\"a\"> <li>Read the title of each question (1-to 6). Listen to the tape step by step following the same order.</li> <li>Write a short paragraph for each sequence, giving as much information and details as you can. Write complete sentences. You will be evaluated on the quality and quantity of information that you were able to comprehend and transfer on paper.</li> <li>Strategy. Proceed step by step, jot down a few things on scrap paper to remember and then write your paragraph. If you have time you can listen to the tape a second time.</li> </ol><a href=\"http://rublev.lly.earlham.edu/~markp/clamp-LAE/file.php/192/Le_Grand_Chemin.mp3\" title=\"Comprehension audio\">Comprehension audio</a><br />
}}}
            . . .
          o Category "Default for Examen Final : listening comprehension"
* Copying user files. . . . . . . . .
          o User zones: 18
* Copying course files. . . . . . . . .
          o Files/folders: 19
* Copying site files used in course
* Creating scales
* Creating events
* Creating course modules
          o Assignment "Paper #1"
          o Assignment "Vampires east and west"
          o Assignment "Paper #3"
          o Assignment "TEST 1"
          o Assignment "Veritaserum"
          o Assignment "Transfiguration spells"
          o Assignment "Paper #1"
          o Assignment "Paper #1"
          o Assignment "Comment on Today's Reading"
          o Assignment "Avoiding underwater ghoulies"
          o Assignment "Comment on Today's Reading"
          o Assignment "Ghoules and ghoulies"
          o Assignment "Comment on Today's Reading"
          o Assignment "Blog Posting"
          o Assignment "Blog Posting II"
          o Assignment "Blog Posting III"
          o Assignment "Final Project"
          o Assignment "New assignment not graded yet"
          o Chat "Yackedy Yack at 3pm EST (-5GMT)"
          o Choice "Discussion sign-up sheet"
{{{        Notice: Undefined index: ASEARCHTEMPLATE in /usr/home/markp/public_html/clamp-LAE/mod/data/restorelib.php on line 88}}}
          o Database "Test database import"
          o Forum "News forum"
          o Forum "Upload Comic assignment"
          o Forum "Presentations"
          o Forum "Upload video"
          o Glossary "Test Concordance"
          o . Quiz "Examen Final : listening comprehension"
          o Quiz "Survey Test 1"
          o . . . . . . . . . . . . . . Quiz "Quiz #1"
{{{
            <a href=\"$@FILEPHP@$$@SLASH@$First_show_is_conquering_wall_of_cultural_differences.mp3\" title=\"podcast\">Cultural differences</a>
            changed to
            <a href=\"http://rublev.lly.earlham.edu/~markp/clamp-LAE/file.php/192/First_show_is_conquering_wall_of_cultural_differences.mp3\" title=\"podcast\">Cultural differences</a>
}}}
          o Resource "Turkey podcast episode"
          o Resource "SYLLABUS"
          o Resource "Intro to potions"
          o Resource "Blue resource"
          o Resource "Class Calendar"
          o Resource "List of Spells"
          o Resource "Syllabus"
          o Resource "Syllabus"
          o Resource "Instructions"
          o Resource "NASA"
          o Resource "Cosmic Voyage Youtube video"
          o Resource "Little Britain video"
                + Feedback "Fiscal Challenge Task Force Survey"
{{{
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
}}}
                + Feedback "DAD Fieldtrip feedback"
{{{
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
}}}
                + Feedback "Feedback for the course"
{{{
          Notice: Undefined index: FBVALUES in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 184
          Notice: Undefined index: TRACKINGS in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 205
          Notice: Undefined index: COMPLETEDS in /usr/home/markp/public_html/clamp-LAE/mod/feedback/restorelib.php on line 229
}}}
          o . . . OU wiki "Potions and Hexes"
* Creating blocks
* Course format data
* Checking instances
* Refreshing events
* Decoding internal links
          o From Course
          o From Sections
          o From Assignments. . .
          o From Chats
          o From Choices
          o From Databases
          o From Forums. . . . .
          o From Glossaries. . . . . . . . . . . . . . . . .
          o From Quizzes
          o From Resources. .
          o From OU wikis
          o From Blocks
          o From Questions. . . . . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . . . . . .
* Creating gradebook
          o Grade letters
          o Outcomes
          o Grade items
            . . . 
* Creating roles definitions
* Creating course level role assignments and overrides
* Creating module level role assignments and overrides
* Creating block level role assignments and overrides
* Creating user level role assignments and overrides
* . . Checking course
* Cleaning temp data
* Closing the Restorelog.html file.
=== 
File references translated successfully in Outline and quiz questions.
Try again on a Dan Graves History Western Music course!
July 1
Get source code from (download location of clamp-lae) and use svn to download
{{ts{13/07/10 10:12}}}
Update source
{{{
/markp/clamp-LAE]$ cd 1.9.9-LAE1.0dev/
/markp/clamp-LAE/1.9.9-LAE1.0dev]$ svn update
U    lib/weblib.php
Updated to revision 324.
}}}
;Note:
: This is a beta version for testing. ''BUT'' if the add-in plugins work fine with this, then they should be good with the production version. 
: Pull over latest production database from {{{/home/fc-raid-00-2/backups/mysql-backups/moodleDB-peace.sql}}} 
: also test with blank database to make sure that restores work.
Set up data dir:
{{{
/usr/home/markp]$ mkdir LAE-199-data
/usr/home/markp]$ sudo chown -R markp:www LAE-199-data/
/usr/home/markp]$ sudo chmod -R 775 LAE-199-data/
}}}
Create database:

So, I've done the basic install and Aaron has got me the current live data dir. The three components are nearly in place:
# Code -- weekly 1.9.7+ from moodle.org in {{{/user/home/markp/public_html/moo-97t}}}
** Add blocks and modules to test setup in order to check that they are all working properly
** ~MyMoodle hacks
** ZIP download
# Database
** Test out blocks and modules with Test db.
** Dump test db just in case
** grab new sql dump of db from Rahu
** Create new db and import production database (after module testing)
# Data
** move //moodledata195// to {{{/user/home/moodle/data}}} as production data dir
** use test data dir {{{/usr/home/markp/moo97t-data}}} for testing
** when ready (ie code with modules and database import) switch to point to production data dir
# track database changes carefully when linking production db and production data dir.
Interesting conversation about [[Taking over the hosting of the NITLE Moodle Exchange|http://redmine.clamp-it.org/boards/8/topics/show/486]]. Here's my latest 2c:
<<<
Great idea Barron for Clamp Moodle Exchange. 
Are we agreed that the key component to NME is the HELP forum? Everything else we accomplish through the CLAMP-IT site. It seems to me that there are two possibilities for implementing a help discussion forum:

# We could use _bbpress_ plugin for WordPress and integrate it with the clamp-it site. This would have the advantage of close integration with the blog and  other content. Plus sticky posts. Cons : user account maintenance.
# We could use a Moodle course at another site and link to this. Pros: we could demo the Liberal Arts Edition that we're pushing, and we could import both content and users from the current HELP forum.

If we choose the latter, I am exploring the possibility of offering a moodle system at Earlham (the 1.9.9 LAE version) that would host Clamp Moodle Exchange (in addition to other off campus courses). I would be willing to set this up, do the HELP Forum import from the current NME site and figure out the management of user accounts. Also make regular course backups.
I am fairly confident that this would be approved but it may take some time if the boss is on vaca.
<<<

Email to Scott (CC to Aaron, Tom Steffes, Randy S, Wes Miller):
<<<
We have several situations where Earlham faculty ask for moodle 'courses' where most if not all the participants are from outside the College. Model United Nations is a good example of this, though there are many others. After consultation this is allowed and I add the users as manual accounts to our Moodle system. But this has always made me queasy since it's not difficult for participants to wander around Moodle and accidentally enroll themselves into a regular course (many faculty don't set enrollment keys despite my urgings). This has not occurred yet to my knowledge but I do know of cases where students have accidentally enrolled themselves into the wrong course.

To address this issue (and also another case) I would like to propose a separate, independent Moodle instance where courses involving off-campus user accounts are located. In particular, I would like to include in this Moodle a course open to all members of the Collaborative Liberal Arts Moodle Project (CLAMP). This course would take over from the NITLE hosted Nitle Moodle Exchange which they are planning to shut down, and would primarily serve as a platform for the HELP forum which provides appropriate help for moodle admins and faculty. The membership of this course would be up for discussion within the CLAMP admin group and currently this has approx 235 participants with 36% posting and 62% viewing.
<<<
I'm going to ask Aaron to upgrade the production moodle with :
* [[Scheduler|Scheduler request]]
* [[Enhanced file upload|Enhanced File Module]]
* and possibly [[Lightbox Gallery|Lightbox Gallery Resource]]
+++[Installation instructions scheduler]>
# move {{{scheduler-mod.tgz}}} to moodle code root
# unpack with {{{tar xvf scheduler-mod.tgz}}}. This will place the code into {{{mod/scheduler}}}
# Open moodle site and login as Administrator
# Click @@Notifications@@ link to install the database tables
# Done!
=== 
!!Creating Enhanced File Mod installer
Check that Enhanced File Module has not been updated -- latest version is Jul-8-2010
This installs a yui menu folder {{{gtlib_yui/}}} in /lib as well as the resource in /mod
So go to {{{moodle_enhanced_file_mod/package}}} and from there {{{moodle_enhanced_file_mod/package]$ tar zvcf ../enhanced-file-upload.tgz *}}}
Now it can be installed in the test and production sites with the above instructions

!![[Lightbox Gallery|Lightbox Gallery Resource]]
Installed in mirror test on rublev {{ts{15/12/10 18:08}}}
Note a couple of 'features':
# the arrangement of thumbnails across the page is dependent upon the them. Anomaly displays them correctly. Others (such as autumn may not)
# there is no reordering facility. Photos are displayed in strict filename order. Therefore rename files to get into correct order (use 001, 002, etc) and use the caption to descibe the image.
/%
Next week:

%/
;Grading on letter scale and display on letter scale. Problem:
:each letter increment is worth 3.3 points. So the third grading point in each decade is 6.66. Eg a B+ evaluates to 86.6, a C+ evaluates to 76.6, a D+ evaluates to 66.6 etc. But the letter display defaults to 87, 77, 67 etc for the + grade. Therefore B+ will display as B. So, for the letter display change the level to 86, 76, 66 etc and everyone is now happy.
;Hiding / revealing Categories:
: Hide -- click on eye
: reveal -- eye click doesn't work. use 'Edit' and then uncheck.
; Global Settings for gradebook
: Change default from % (letter) to real(%). That way you get to see the actual grade for each category and it's virtual %
; Grader Report settings:
: Show % -- hide
: show hidden -- no.
Figure out other default settings.

!!Faculty Workshop
Take course syllabus, construct Grading Categories, then create Outline and add assignments. Adjust grades and display for each category and totals. Add details to Course outline. Add readings to Progress Bar
Following from [[moo-195 problems]] I get this error opening any course:
{{{
Warning: Invalid argument supplied for foreach() in /usr/home/markp/public_html/moo-195/blocks/yui_menu/plugin/mods.php on line 31
}}}
Having updated the database for [[Fileresponse quiz question type]] I get the following error message:
{{{
Warning: Call-time pass-by-reference has been deprecated in /usr/home/markp/public_html/moo-195/blocks/yui_menu/block_yui_menu.php on line 63
}}}
Although this is just a Warning, it's till spooky.
{{ts{2/08/10 10:54}}}
# --get Moodle going on test server (Aaron)--
** --upload users--
** --upload course / category list--
# --Move all Marya's courses over (PHIL363:201110 - Bioethics, WMNS375, PHIL250:201110 - Rationalism) {{ts{4/08/10 11:18}}}--
# get started on Dan Graves' courses
# Sort out [[font size issues|Font scaling in New School Themes]]
** remake Parchment to blue and match with Anomaly colour ?
# --create new user list and course list with information from Ben Johnson--
** @@Full course backup on Moodle Prod using large memory footprint (to avoid problems)@@
# --Redo course restore/create forms--
# --Reference Librarian role and occupants (refneal, refamy)--  give them [[access to site file|Access Site Files]] so that they can restore. @@Done {{ts{4/08/10 11:17}}}@@
# --create Course Assistant role.-- Apply to users [[System roles : Course Assistant]] 
# --Configure MyMoodle--

!! Flagged issues <<tag [[FLAG]]>>

* Change ''Support page'' link (in Site Admin : Server : Email) +++[details]>
This web address will be published to users of this site as the one to go to when they need general help (for example, when new users create their own accounts). If this address is left blank then no link will be supplied.
=== 


1. Backup db:
{{{
/usr/home/markp/moo-archives]$ mysqldump -u moodlebackup -p -C -Q -e mooclampprod >moo-195_backup.sql
Enter password: 
}}}
2. Test course upload with //moo-195/admin/uploadcourse.php //
3. Use data produced by Ben and massaged -- //courseDeptExtract_nonTBA_201020-edit.csv//
4. Do live upload tomorrow morning with Amy Bryant.

Actually a lot less than there used to be since TiddlyWiki version 2.0! (TagglyTagging introduced the concept that a tag was a tiddler and vice-versa. Since version 2.0 this concept central to tagging in TiddlyWiki. See "Where did it come from?" below for more information).
The situation with regard to courses and working databases was confusing and dangerous:
# course MUS484:201020 -- FK: Live Music in Richmond has the following databases:
** Venues / Organizations [[got totally corrupted|Big Problems with Mus484 Database]] by applying the Rearch preset while in the Venues db.
** Musicians (54 entries) -- good data
** Performance Calendar (528 entries) -- good
** Research (109 entries) -- good
# course MUS484-BB:201020 -- Live Music in Richmond (dup) has the following databases which have correct data:
** Venues / Organizations (53 entries)
** Musicians (54 entries)
** Performance Calendar (529 entries)
** the [[Research database has been corrupted|Big Problems with Mus484 Database]] (by applying the wrong preset to it)
!Fix
* I found that the Sharing Cart will not transfer a database correctly because it cannot move user data with the Activity.
* So, in course ''MUS484:201020'' do a Course Backup of //just the Research database// together with the users
** ''BUT'' attempting to do a course backup in the Teacher role gives me a screen //with no option to include user data//. This is new to 1.9.7+. So -- as a short term measure do the course backup as Admin. [[Backup user data by teachers]]
* Save locally, and then upload into ''MUS484-BB:201020'' Files:backupdata
** delete empty Research database to avoid confusion
** restore //into current course//
** restore successful and database is accessible and complete
!!Assignment ZIP
Denise,

One feature from last year's Moodle that I did not manage to get sussed out for this year's was the modification to the Assignment module to allow all the student assignment responses to be downloaded as a single zip file. Basically, in the submission page the faculty would just click on a button labelled something like 'ZIP and download' and then save the zip file. Expanding the downloaded zip file gives all the files uploaded by students with their names appended to the front  of the filenames.
Well, I've had a lot of complaints about the lack of this feature (from some unexpected quarters) and I've have just found time to try out the CLAMP version of Assignment ZIP. It was successful and so I'd like to spend 10-15 minutes (literally) with Aaron copying this into place on the Moodle testing server preparatory to putting into production over the Thanksgiving break. Could we do this sometime on Thursday 22nd Oct?
Getting list from [[21 December 2009 Modules and blocks]]
Having had some issues with YUI stuff (see [[Enhanced File Module]]) let's start with:
!!1. Course Menu (YUI menu) [Block]
Located in //~/moo-plugins/contrib/plugins/blocks/yui_menu//
+++[cvs update:]>
{{{
 ~/moo-plugins/contrib/plugins/blocks/yui_menu]$ cvs update -dP
cvs update: Updating .
P block_yui_menu.php
P styles.php
cvs update: Updating db
cvs update: Updating icons
cvs update: Updating lang
cvs update: Updating lang/en_utf8
cvs update: Updating lang/fr_utf8
cvs update: Updating lang/zh_tw_utf8
cvs update: Updating plugin
P plugin/outline.php
cvs update: Updating skin
}}}
=== 
Copy into [[test clamp|Testing 2010]] {{{~/moo-plugins/contrib/plugins/blocks]$ cp -r yui_menu ~/public_html/clamp-LAE/blocks/yui_menu}}}
Course Menu tables set up correctly.
Works fine with current themes. Problems with Autumn -- doesn't display the topic line correctly.
;Preliminary verdict:  
: @@SUCCESS@@
----
!!2. myCourses [Block]
I had contemplated getting rid of this but I found a couple of faculty who seem to like it.
Copy from //moo-plugins/myCourses//
Tables set up OK
Error to screen:
{{{Notice: Undefined property: stdClass::$block_myCourses_showsearchbox in /usr/home/markp/public_html/clamp-LAE/blocks/myCourses/block_myCourses.php on line 343}}}
When I set the Admin settings to Search, this went away!
!!3. My Moodle [hack]
I had created a tgz file with all the MyMoodle components from [[here|http://www.earlham.edu/markp/miss/#%5b%5bMyMoodle%20for%201.9.5%5d%5d]] But careful examination of the process showed that it included a files from the standard distro that was overwritten -- ie //theme/standard/styles_layout.css//. The problem is that the default theme has changed from 1.9.5 to the clamp version in 1.9.7 and may well change to 1.9.8. Better to add the my_moodle styles as a separate file and then append to the end of standard/styles_layout.css.
[[MyMoodle remake]]
--Get error with Autumn theme : {{{Notice: Undefined property: stdClass::$mynumber in /usr/home/markp/public_html/clamp-LAE/local/lib.php on line 62}}}--
Went away when it was reloaded.
!!4. Sharing Cart [Block]
Don Hinkelman the author announced [[here|http://moodle.org/mod/forum/discuss.php?d=87044#p596136]] that there was a new version in CVS. 
<<<
Note that Sharing Cart Release 12 (20100212) is now available from CVS. This corrects a small bug introduced in Release 11. The latest Project Course Format release 5 is only available from CVS. Do *not* use the englishforum download site.
<<<
Update the sharing_cart code in moo-plugins/contrib and apply. Doing the {{{cvs update -dP}}} removes a bunch of files and also updates to //v20100308.txt//
Copy into place {{{/moo-plugins/contrib/plugins/blocks]$ cp -r sharing_cart ~/public_html/clamp-LAE/blocks}}}. Tables set up correctly and Settings made.
Now all that's needed is testing.



<<notes>>
See also [[Testing 2010]]
!!Modules
* [[BIM – Feed Aggregation Management and Marking]]
* [[ForumNG]]
* [[Enhanced File Module]]
[[Activity modules installed in clamp_LAE|graphics/activity_modules_installed.png]]<<imagebox>>
!!Blocks
* [[Time Management Tool]]
In Site Administration : Modules : Blocks : Manage Blocks don't forget to hide the standard //Courses// and //Current Courses// blocks
!!4. OU Wiki
In [[OU wiki: Long page names cause database insert errors|http://tracker.moodle.org/browse/CONTRIB-1726]] Sam Marshall announces an update to OUWiki and implies that it's present in CVS.
Got new version from CVS: {{{/moo-plugins $ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P -r MOODLE_19_STABLE contrib/plugins/mod/ouwiki}}}. Revealed in version.php to be {{{$module->version  = 2010042201;}}}
Copy this into place {{{moo-plugins/contrib/plugins/mod]$ cp -r ouwiki ~/public_html/clamp-LAE/mod}}}
Tables set up correctly
!5. Attendance
Did a CVS update but only the langs seem to change +++[output]>
moo-plugins/contrib/plugins/blocks/attendance]$ cvs update -dP
cvs update: Updating .
cvs update: Updating db
cvs update: Updating lang
cvs update: Updating lang/cs_utf8
cvs update: Updating lang/de
cvs update: Updating lang/en
cvs update: Updating lang/en/help
cvs update: Updating lang/en/help/block_attendance
cvs update: Updating lang/en_us_utf8
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/block_attendance
cvs update: Updating lang/es
cvs update: Updating lang/es/help
cvs update: Updating lang/es/help/block_attendance
cvs update: Updating lang/es_utf8
cvs update: Updating lang/es_utf8/help
cvs update: Updating lang/es_utf8/help/block_attendance
cvs update: Updating lang/eu_utf8
cvs update: Updating lang/eu_utf8/help
cvs update: Updating lang/eu_utf8/help/block_attendance
cvs update: Updating lang/fr_utf8
cvs update: Updating lang/it
cvs update: Updating lang/it/help
cvs update: Updating lang/it/help/block_attendance
cvs update: Updating lang/ja_utf8
cvs update: Updating lang/ja_utf8/help
cvs update: Updating lang/ja_utf8/help/block_attendance
cvs update: Updating lang/ru
cvs update: Updating lang/ru/help
cvs update: Updating lang/ru/help/block_attendance
cvs update: Updating lang/ru_utf8
cvs update: Updating lang/ru_utf8/help
cvs update: Updating lang/ru_utf8/help/block_attendance
cvs update: Updating lang/sk
cvs update: Updating lang/sk_utf8
cvs update: Updating lang/sv
=== 
Same when updating 'mod/attforblock'
I downloaded the package from [[here|http://download.moodle.org/packages19/attendance_package.zip]] and expanded. It turns out that the version in the Modules database is ''newer'' than the CVS version +++[how I discovered this]>
Modules db : attforblock/version.php: (located in // ~/moo-plugins/attendance/April2010/mod/attforblock//)
{{{
$module->version  = 2009022800;  // The current module version (Date: YYYYMMDDXX)
$module->release = '2.1.1';
$module->cron     = 0;           // Period for cron to check this module (secs)
}}}
CVS update : attforblock/version.php: (located in //~/moo-plugins/contrib/plugins/mod/attforblock//)
{{{
$module->version  = 2009022400;  // The current module version (Date: YYYYMMDDXX)
$module->release = '2.1.0';
$module->cron     = 0;           // Period for cron to check this module (secs)
}}}
=== 
May still be a [[Daylight Saving Time problem|http://tracker.moodle.org/browse/CONTRIB-1074]] -- check this out! Tried this out with MISC-DADA:201010 and daylight savings time change seems to be sorted!
+++[Install]>
Do a db backup before proceeding : {{{~/moo-archives]$ mysqldump -u moodlebackup -p -C -Q -e clampLAE >clampLAE-197-test.sql}}}
{{{
~/moo-plugins/attendance/April2010/mod]$ cp -r attforblock ~/public_html/clamp-LAE/mod
~/moo-plugins/attendance/April2010/mod]$ cd ../blocks/
~/moo-plugins/attendance/April2010/blocks]$ cp -r attendance ~/public_html/clamp-LAE/blocks
}}}
attforblock and attendance tables set up correctly
=== 
;Reminder to do:
: need icon for Attendance (in Autumn theme anyway)
!!6. Feedback
Updated the CVS version in //moo-plugins/contrib/plugins/mod/feedback//. There seem to be some differences with what is currently in production. +++[diffs]>
{{{
 ~/moo-plugins/contrib/plugins/mod]$ diff -qr feedback ~/public_html/moo-p97/mod/feedback | grep -v CVS
Files feedback/complete.php and /home/markp/public_html/moo-p97/mod/feedback/complete.php differ
Files feedback/complete_guest.php and /home/markp/public_html/moo-p97/mod/feedback/complete_guest.php differ
Files feedback/icon.gif and /home/markp/public_html/moo-p97/mod/feedback/icon.gif differ
Only in /home/markp/public_html/moo-p97/mod/feedback: icon.gif.old
Files feedback/lang/de_utf8/feedback.php and /home/markp/public_html/moo-p97/mod/feedback/lang/de_utf8/feedback.php differ
Files feedback/lang/en_utf8/feedback.php and /home/markp/public_html/moo-p97/mod/feedback/lang/en_utf8/feedback.php differ
Only in feedback: settings.php
Files feedback/view.php and /home/markp/public_html/moo-p97/mod/feedback/view.php differ
}}}
===
After installation, copy over the icon.gif from moo-p97 since that is the new one (I think)
Tables created successfully. 

<<notes>>
!Issue
There's an issue with copying CVS code as is -- wouldn't it be better ''not'' to copy the //CVS// directories? But how? Perhaps this is something that can be done with an {{{--except}}} clause when tarring up?
Convene meeting to talk about some outstanding Moodle issues:
;Membership:
: Scott Silverman, Tom Steffes, Wes Miller, Aaron Cayard-Roberts, Amy, Neal, Anne
!!Agenda
!!!System issues
* Old Moodle versions. We need to retire the Hedd server and put the old Moodle versions onto a VM server. +++[Subtext]>
Every semester I get requests for courses that were run off Hedd (05-06, 06-07, 07-08). In fact in the Fall semester I got a request for a course from spring 2004, the pilot year. Currently, the Hedd hardware configuration won't allow mass course backups, so we cannot just create backups of all the courses and store them. Moreover, Hedd is on it's last legs and if it crashes permanently we'll be stuck.
We only need a single Virtual Machine running FreeBSD and MySQL and Postgres with sufficient disk space to accommodate the code and data directories. This would also free up space elsewhere. My feeling is that it wouldn't take too much effort to do this and I'd be willing to do it if I had the sudo permission on the VM box.
=== 
* @@Course backups@@ -- I'd like to do regular (weekly?) automated course backups. Space on the network to store the files? +++[Background]>
We've been treading on thin ice for some time and I'd like to take steps to prevent a mini-Armageddon before it happens. Basically, if a teacher accidentally screws up a course (and clicking Administration : Reset will do this) we have no way of restoring it apart from taking the whole server down and doing a system wide restore. It's a trivial matter to configure regular course backups system wide -- all we need is the space to store the files and an agreed policy
=== 
* Space to expand -- do we have enough disk space on the Moodle server to cope with next year?
* Should we start off with a new database next year?
!!!Support Issues (thanks Amy)
* End of the semester maintenance with Faculty and Moodle - I recall that last year there were some issues that Neal was stuck handling because we were in Turkey. What should procedure be this year to make things easier for all?
* Moodle support for the Fall. Who's doing what, especially with sabbaticals, etc.
* Automatic course creation based on Banner info. We did in the past, can we try again?  Pros/Cons?
** We've never had 'automatic' course creation. +++[What actually happens]>
I beg for a slice of Ben's time; he runs a script which pulls out a list of courses and teachers from Webdb which he sends to me. I clean up the data, test it by uploading into a test Moodle version and then upload it into the production Moodle instance. Many of the course records have the teacher 'TBA' and therefore these have to be manually allocated to teachers when they become known. Still a labour intensive task.
=== We ''could'' implement automatic course creation but this would need to go on ECS's priority list.
** Course Creation form to go inside Moodle?
* Does the "Moodle Support" team need more support? How can we document stuff for ourselves most efficiently? 

!Add Modules and blocks to 1.9.7 install
# [[Attendance|22 December 2009 Modules]]
# [[Feedback|22 December 2009 Modules]]
# [[Book|22 December 2009 Modules]]
# [[OUWiki|22 December 2009 Modules]]
# [[Sharing Cart|21 December 2009 Sharing Cart]]
# [[Quickmail|22 December 2009 Blocks]]
# [[Course Menu|22 December 2009 Blocks]]
# [[My Courses|22 December 2009 Blocks]]
# [[MyMoodle|22 December 2009 Blocks]]
# [[ZIP & download|23 December 2009 Zip & Download]]
# +++[Census & Uploadcourses]>
{{{
public_html/moo-97t/admin]$ cp ../../moo-195/admin/census.php .
public_html/moo-97t/admin]$ cp ../../moo-195/admin/uploadcourse.php .
}}}
=== 
Question:
* Where should I be copying the canonical code from? {{{moo-195}}} or {{{moo-t95}}} ?
Check that the code is the same:
{{{
 ~/public_html/moo-t95/mod]$ diff -rq feedback/ ~/public_html/moo-97t/mod/feedback/
}}}
And so on for book, ouwiki, attendance, Sharing Cart.
Sharing Cart was different since I had downloaded the latest code and installed that. But attendance (mod & blocks) was ''the same'' which surprised me since the version here is certainly not what's being used in Production.

Move the moodle_data from {{{/usr/home/markp}}} to {{{/usr/home/moodle/data}}} and change owner:
{{{
/usr/home/markp]$ mv moodledata195 /usr/home/moodle/data/
/usr/home/markp]$ cd ../moodle/data
/usr/home/moodle/data]$ ls -l
total 14
drwxrwxr-x  347 www    admins  4608 Nov 18 21:37 moodledata192+
drwxrwx---  543 markp  admins  6656 Dec 21 20:23 moodledata195
 /usr/home/moodle/data]$ sudo chown -R www moodledata195
}}}
References: http://www.earlham.edu/markp/miss/#sharing_cart
From [[Sharing Cart docs|http://docs.moodle.org/en/Sharing_Cart]]
<<<
* Block: Sharing Cart 1.9 release 9 - 2009.11.30 (adds a bulk delete/empty cart feature) 

Note: the Sharing Cart is not yet compatible with Moodle ver. 1.9.7. Please check back soon. 
<<<
Move old version to sharing_cart_195
[[Download|http://download.moodle.org/download.php/plugins/blocks/sharing_cart.zip]] and unzip to {{{markp/moo-plugins/sharing_cart}}}
Backup db just in case:
{{{
~/moo-archives]$ mysqldump -u moodlebackup -p -C -Q -e moo97t >moo97db_pre-sharingcart.sql
}}}
Copy into correct location:
{{{
markp/moo-plugins]$ cp -r sharing_cart ~/public_html/moo-97t/blocks
}}}
Go to http://rublev.lly.earlham.edu/~markp/moo-97t/admin/ and tables set up correctly
Working with secretaries Jane and Sarah yesterday they were commenting about the date order day-month-year. That got me to realising that the production Moodle was probably working on British english spelling. There is a {{{en_us_utf8}}} US english language file, and that does need to get installed into production. It's not in the 'miiror' site so it won't be in production either. It may not affect the date ordering but it'll mean that //enrollment// gets spelled with two els.

[[Language strings missing]]
!!6. Quickmail
Copy from {{{moo-t95}}}
{{{
~/public_html/moo-t95/blocks]$ cp -r quickmail ../../moo-97t/blocks
}}}
Quickmail tables set up correctly
!!7. Course Menu (~YUI_Menu)
[[install details|23 December 2009 Course Menu (YUI_menu)]]
Course Menu tables set up correctly
!!8. ~MyCourses
I contemplated removing this and it can probably go away next year.
Located in {{{moo-plugins/myCourses}}}
{{{
~/moo-plugins]$ cp -r myCourses ~/public_html/moo-97t/blocks
}}}
database tables updated.
!!9. ~MyMoodle
~Minh-Tam Nguyen does not seem to have updated this, so go ahead with installation as per [[instructions|http://www.earlham.edu/markp/miss/#%5B%5BMyMoodle%20for%201.9.5%5D%5D]]
{{{
markp/public_html/moo-97t]$ cp ~/moo-patch/mymoodle_gui_new.tgz .
markp/public_html/moo-97t]$ tar -xvf mymoodle_gui_new.tgz
}}}
Remember to add user profile fields and also to set ~MyMoodle as the default with Administration : Appearance : MyMoodle
Look for usage of Book in In Site Admin : Modules : Activities : Manage activities
Only 16 activities:

|NSW:2009 -- New Student Orientation|* Teacher: Wes Miller|Category: 2009 / Programs (PROG)|
|MISC-DADA:201010 - Defence Against the Dark Arts|* Wizard/Witch: Mark Pearson|Category: Miscellaneous (MISC)|
|ECON484:200920 -- Ford/Knight No Child Left Behind|* Teacher: Rajaram Krishnan|Category: 2009 / Economics (ECON)|
|NSO:2010 -- New Student Orientation|* Teacher: Wes Miller|Category: Miscellaneous (MISC)|
|INTP150-12:200920 -- Corporations for Activists|* Teacher: Monteze Snyder|Category: 2009 / Interpretive Practices (INTP)|
|MGMT321:200910 - Nonprofits in Civil Society|* Teacher: Monteze Snyder|Category: 2009 / Business & Non-Profit Management (MGMT)|

Only used extensively in New Student Orientation NSO:2010
Backedup Julie May's Survey Western Art from production. Added everything except resources and resource files
Restore:
<<<
* Creating new course
    o ~ART212:201010 Survey of Western Art (ART212:201010)
    o Category: Art (ART)
* Creating the Restorelog.html in the course backup folder
* Creating users
      . . . . . . . . . . . . . . . . . . (New: 56, Existing: 6)
          o Students: 0
          o Teachers: 0
* Creating groups
* Creating sections
* Creating categories and questions
          o Category "Default for ART212:201010 Survey of Western Art"
            . . . . . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . . . . . .
            . . . . . . .
          o Category "Default for Survey Test 1"
          o Category "Default for Test One : repeat"
          o Category "Default for Test TWO"
          o Category "Default for Test Two Repeat"
          o Category "Default for Quiz 4"
* Copying user files. . . . . . .
          o User zones: 15
* Creating scales
* Creating events
* Creating course modules 
<<<
Copy these over as is from the previous install:
!!1. Attendance
{{{
/markp/public_html/moo-195/mod]$ cp -r attforblock ../../moo-97t/mod
/markp/public_html/moo-195/mod]$ cd ../blocks/
/markp/public_html/moo-195/blocks]$ cp -r attendance ../../moo-97t/blocks
}}}
Tables set up Correctly
!!2. Feedback
{{{
/markp/public_html/moo-195/mod]$ cp -r feedback ../../moo-97t/mod
}}}
Feedback tables set up
!!3. Book
Even thought there are few courses that use this [[ 22 December 2009 Book] I'll copy it over:
{{{
/markp/public_html/moo-195/mod]$ cp -r book ../../moo-97t/mod
}}}
Tables set up correctly
!!4. ~OUwiki
This will definitely not have been updated.
{{{
markp/public_html/moo-195/mod]$ cp -r ouwiki ../../moo-97t/mod
}}}
Tables set up correctly. There is a new setting:
<<<
New settings - OU wiki
Roles included in reports : 
Default: Empty
Only users with these roles are counted and displayed on the reporting screens. This field must be a comma-separated list of role ID numbers. (To find the numbers, use the links from the 'Define roles' screen and look in the URL.)
<<<
Now [[22 December 2009 Test 1.9.7]]
* Backup //MISC-DADA:201010 - Defence Against the Dark Arts// with users, user data 
* FTP to Rublev
* Move to Site Files / backupdata for restoring {{{~/moo97t-data]$ mv ../backup-misc-dada_201010-20091222-1426.zip 1/backupdata/}}}
# Attendance. The version in moo-195 is the 'new' one with expanded fields. Look at thi to determine if it's what I want to unleash on unsuspecting faculty.
** Problems with [[restoring course|22 December 2009 Errors on Course Restore]]
!!!Note: 
If I get any more problems with this, just find the old version and drop the Attendance tables using phpmyadmin
The sole source for ~YUI_menu (Course Menu) is {{{moo-plugins/contrib/plugins/blocks/yui_menu}}}
Still getting this error on moo-195 and moo-t95 sites:
<<<
Warning: Call-time pass-by-reference has been deprecated in /usr/home/markp/public_html/moo-t95/blocks/yui_menu/block_yui_menu.php on line 63
<<<
''But'' I think that this has to do with php 5.2 version I'm running. Will file a bug report though.
Get the latest update from CVS (login first then update) +++[here]>
{{{
$ cd moo-plugins/contrib/plugins/blocks/yui_menu
$ cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle login
moo-plugins/contrib/plugins/blocks/yui_menu]$ cvs update -dP
}}}
=== 
Now +++[copy to blocks:]>
{{{
moo-plugins/contrib/plugins/blocks/yui_menu]$ cd ..
moo-plugins/contrib/plugins/blocks]$ cp -r yui_menu ~/public_html/moo-97t/blocks
}}}
=== 
!Update
[[29 December 2009 latest YUI_Menu]]

The error was reported as [[Run time warning error in Course Menu (YUI menu)|http://tracker.moodle.org/browse/CONTRIB-1695]]. Alan Trick fixed the code generating the error, ''however'' the CVS update that I did before copying into moo-97t and moo-p97 also fixed it (at the least the error wasn't apparent). So, having confirmed that there was still an error with moo-195, I did a CVS update, copied the code to moo-195 and that did the trick -- the error was gone. So, I'll tar gzip this up to update the testing site.
The LAE Assignment ZIP referred to [[here|http://www.earlham.edu/markp/miss/#%5B%5BLAE%20Assignment%20Zip%5D%5D]] was for version 1.9.5. The default mod/assignment/lib.php has changed quite a lot to 1.9.7 so I had to figure out what to add. I figured that what I needed to do was to see the code inserted in the //1.9.5// lib.php and then apply that to the //1.9.7// lib.php.
Used:
{{{
diff -iwBu ~/public_html/moo-195/mod/assignment/lib.php ~/public_html/moo-195/mod/assignment/lib.php.org >diffs-195ass.txt
}}}
To list the diffs then applied +++[these code changes:]>
{{{
   7
   8 require_once($CFG->dirroot . '/lib/LAE/zip.php');
   9
}}}
and
{{{
1171
1172 /// ZipArchive zip and download code
1173
1174         if (class_exists('ZipArchive')) {
1175           $files_tozip = array(); // zip assignment files
1176
1177           require_once($CFG->dirroot.'/mod/assignment/type/'.$assignment->assignmenttype.'/assignment.class.php');
1178           $assignmentclass = 'assignment_'.$assignment->assignmenttype;
1179           $assignmentinstance = new $assignmentclass($cm->id, $assignment, $cm, $course);
1180
1181           foreach (assignment_get_all_submissions($assignment, '', 'DESC') as $sub) {
1182             $filearea = $assignmentinstance->file_area_name($sub->userid);
1183             $fullpath = $CFG->dataroot . '/' . $filearea;
1184             $subuser = get_record('user', 'id', $sub->userid);
1185
1186             if ($files = get_directory_list($fullpath, 'responses'))
1187               foreach ($files as $key => $file)
1188                 $files_tozip[$file] = array('path' => $fullpath . "/" . $file . " ", 'author' => $subuser->firstname      . " " . $subuser->lastname);
1189           }
1190         }
1191
}}}
and
{{{
1363
1364         if(class_exists('ZipArchive') && sizeof($files_tozip) > 1) {
1365           echo file_collection_form($files_tozip, $assignment->name);
1366         }
1367
}}}
=== 
!!Archive code with tar
;Change permissions to {{{drwxr-xr--}}} 
:{{{$ sudo chmod -R 754 AssignmentZip}}}
;Change ownership to Apache: 
:{{{$ sudo chown -R www:www AssignmentZip}}}
;Create the archive:
:{{{AssignmentZip]$ sudo tar -cvf ../AssignmentZip197.tar *  }}} Note that I'm in the assignmentzip 'root' because I will untar in the Moodle 'root' and I want the unpacked files to go straight into the correct destinations. +++[output]>
a LAE
a LAE/zipfile.php
a lib
a lib/LAE
a lib/LAE/zip.php
a lib/LAE/xor.php
a mod
a mod/assignment
a mod/assignment/lib.php
a mod/assignment/libzip_195.php
=== 
!!Test it out
; Copy into place:
: {{{ cp AssignmentZip197.tar ~/public_html/moo-97t/}}}
; Paranoia backup of the code just in case of disaster:
: {{{public_html]$ tar -cvzf moo97t_prezip.tgz moo-97t/}}}
; Paranoia copy of original lib code:
: {{{moo-97t]$ cd mod/assignment/ ; moo-97t/mod/assignment]$ mv lib.php lib_197.php ; $ cd ../..}}}
; now unpack archive:
: {{{moo-97t]$ tar -xvf AssignmentZip197.tar}}} +++[output]>
x LAE/
x LAE/zipfile.php
x lib/
x lib/LAE/
x lib/LAE/zip.php
x lib/LAE/xor.php
x mod/
x mod/assignment/
x mod/assignment/lib.php
x mod/assignment/libzip_195.php
=== 
!It Works
Here's how it works different : [[Assignment Zip : new working]]




[[Exabis|http://www.moodlekurse.org/course/view.php?id=13]] is an eportfolio module for Moodle which is Open Source and seems to be actively maintained.
* Documentation on Moodledocs is [[here|http://docs.moodle.org/en/Exabis_e-portfolio_block]]
* Discussion forum is [[here|http://moodle.org/mod/forum/discuss.php?d=77046]] and seems to be up to date at the current time.
!!To Do
Install and test on a sandbox Moodle
{{{
CloudEngine/cloudengine]$ hg pull
pulling from http://bitbucket.org/cloudengine/cloudengine
searching for changes
adding changesets
adding manifests
adding file changes
added 8 changesets with 28 changes to 10 files
(run 'hg update' to get a working copy)
[markp@sergius /usr/home/markp/CloudEngine/cloudengine]$ hg update
10 files updated, 0 files merged, 0 files removed, 0 files unresolved
}}}
# --Suss out attendance-- {{ts{27/06/11 15:10}}}
# implement ~MyMoodle -- [[MyMoodle remake]] -- done {{ts{28/06/11 11:38}}} @@remember@@ when using code for new installation, create the new profile fields or it won't work properly. 
# install themes. Change default theme? Fix Anomaly? +++[parchment revisited]>
tidy up Parchment. revert to original menu.php. figure out what to add as options. ? pull down list of courses would be way cool
[img[graphics/parchment-theme-steel_grey.png]]
Link to Earlham web site, and blog site
=== @@conclude@@ ''no'' to parchment. Anomaly better.
** install favicon -- LAE199-anomaly-favicon.ico -- into anomaly @@done@@ 
# Fix smart pix icons. Really wierd situation where in both LAE-199 and mirro10 there's a {{{pix/pix}}} directory as though it's been copied wrongly. So try tarring up the default pix, then delete and copy the 'old' pix over from LAE-199/pix/pix. -- @@looks good@@
# install JMOL into chemix-12. Get filter operational. [[New Jmol install & test]]
** think about whether to copy this back to //ref-12//
# redo categories
# Install [[Topcoll -- new course format]] by copying from LAE-199 -- in @@chemix-12@@. Changes -- [[Topcoll for moodle-12]]
# apply the ~TinyMCE config changes (to @@chemix-12@@)-- [[TinyMCE button bar reconfig]] +++[latest reconfig]>
<<tiddler [[TinyMCE for moodle-12]]>>
=== 
# @@test luminis message broker@@ [[LMB for moodle-12]] -- {{ts{29/06/11 12:35}}} Backup working code dirs before testing the lmb enrollment plugin. +++[dir]>
{{{
-rw-r--r--   1 markp  admins   394K Jun 29 16:26 chemix12-db-june29.sql
-rw-r--r--   1 markp  admins    26M Jun 29 16:25 chemix-12-june29.tgz
-rw-r--r--   1 markp  admins    23M Jun 29 16:23 ref-12-june29.tgz
-rw-r--r--   1 markp  admins    16M Jun 29 16:22 bc-ref-12.tgz
-rw-r--r--   1 markp  admins    21M Jun 29 16:21 bc-chemix-12.tgz
}}}
=== 
# [[Change 'Assign roles']] to 'enrollments'. Just copy {{{moo-2011t/lang/en_utf8/role.php}}} done to chemix-12 -- {{ts{29/06/11 17:57}}}
## Install and test [[moodle media player]] into moo-2011t. I don't have time to play about with this to get it going and anyway this is something I need to investigate in my sabbatical. So don't update media stuff for fall 2011.
# Set [[Default course blocks & config settings]]


Are you interested in attending the CLAMP Hack/Doc in Jan 2010? Here are the details:

* Dates : Tuesday Jan 5th - Thursday lunch Jan 7th 2010 (1st week Jan)
* Where : Lafayette College, E Pennsylvania (Lafayette College, Easton, PA 18042 (610) 330-5000). 9hrs -- Driveable.
* Funding : apparently the meals are free and there may be on campus lodging. But each institution funds own transport (no external grant funding). I can look into getting funding from the Evan Farber fund.

If you're interested let me know and I'll ask Denise and Scott about covering transport, accommodation etc. It shouldn't be too expensive.

<<notes heading:"Remarks" tag:"NoteTiddlers" suffix:"Notes">>
Ben's response:
<<<
Hi Mark.
Yeah, it sounds groovy to me. I thought it was educational and fun last year; plus this time I'll know what I'm supposed to be doing
Let me know if you need any help in working on Denise/Tom/Scott.
<<<
TW configuration still to do:
* Implement [[tagglytagging|http://mptw.tiddlyspot.com/]] properly from the [[MPTW|http://monkeypiratetiddlywiki.blogspot.com/]] or ~MonkeyPirate ~TiddlyWiki system. Don't cha just love the name?
* get the system so that the tagglytagging works properly
* tweak colours (index not bold) and layout (add the HoverMenu plugin)
* move tag entry box to the top of the edit box
* Expand to remove left margin
!!Resources:
* http://mptw.tiddlyspot.com/
* http://monkeypiratetiddlywiki.blogspot.com/
* http://www.encounteraday.com/2009/05/20/making-kickass-campaign-sites-with-mptw/
!!Background
Lori Watson teaching at Oak Ridge. Wanted a Moodle course copy of Inorganic Chem. But outside users. Got this set up in early summer on the old system. Took a while to get the 'ECM' system set up and so she carried on using the old system as moodle08-10. Then Aaron switched off access to it from outside and we were screwed.
Also, there were firewall issues accessing the non-standard port and https: from within Oak Ridge and Lori found that the Oak Ridge firewall would not let her get access. She talked about using Googledocs but it turned out that doing the Moodle stuff from off campus/home was sufficiently good enough.
Aaron finally wants to switch off access to moodle08-10 this week so I have done a full backup with user account, grade histories and reports and restored to https://emc.earlham.edu:3443
!!!Minor Issue on restore
When restoring the course backup zip, get an +++[error message:]>
* Copying user files
{{{
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
}}}
=== 
But the restore completed successfully.
Found a duplicate user -- Samuel Slocum had logged in with his Earlham account but also had a gmail account. I unenrolled the gmail user from the courses and then deleted it. I think that this was what caused the restore problem.
Have emailed Lori to check out the new course and get students onto it.



From Lori:
<<<
So.. Did/could you also transfer the ORSS seminar course (I think it's like Chem599 or something?)
<<<
I found the course (in 2011 category) and removed the superfluous Samuael Slocum account. But still got +++[restore errors]>
* Creating users
. . (New: 9, Existing: 8)
** Students: 0
** Teachers: 0
* Creating sections
* Creating categories and questions
* Copying user files
{{{
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
}}}
=== 
Wierd.
* Downloaded latest version Anomaly from http://newschoollearning.com/theme/
* tarred up old ~/moo-plugins/themes/anomaly_ecs and deleted it (I could never figure out what exactly I used this for)
* rename unzipped anomaly_dec09.zip to //anomaly_ecs//. Now do a diff with the theme //in situ// to determine the icons that have been updated. +++[results:]
{{{
 ~/moo-plugins/themes]$ diff -qr anomaly_ecs/pix/ ~/public_html/moo-97t/theme/anomaly/pix/ | grep -v tab
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: a
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: adv.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: b.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: c
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: colorstrip.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: css.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: docs.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: f
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: g
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: help.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: i
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: m
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: mod
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: movehere.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: pix
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: req.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: rightarrow2.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: s
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: section_508.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: spacer.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: switch_minus.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: switch_plus.gif
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: t
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: u
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: webding.png
Only in /home/markp/public_html/moo-97t/theme/anomaly/pix/: xhtml_1_0.gif
}}}
=== 
I want to copy over everything except the //tab// directory. Solution: hide the tab folder by renaming it to //.tab// and do the copy.
{{{
~/public_html/moo-97t/theme/anomaly/pix]$ mv tab .tab
~/public_html/moo-97t/theme/anomaly/pix]$ cp -rv *  ~/moo-plugins/themes/anomaly_ecs/pix
}}}
And also copy it to the root moodle code {{{~/public_html/moo-97t/theme/anomaly/pix]$ cp -r *  ~/public_html/moo-97t/pix}}}
Having updated anomaly and made //anomaly_ecs// the canonical theme we'll now go ahead and delete the anomaly directory in the theme folder and copy over the new fresh version:
{{{
~/public_html/moo-97t/theme]$ rm -r anomaly/
~/public_html/moo-97t/theme]$ cp -rv ~/moo-plugins/themes/anomaly_ecs anomaly
}}}
Filed +++[this bug report]>
I have just done a CVS update of blocks/yui_menu and tested it on 1.9.5 and 1.9.7 moodle test installs with Debugging "Shaow all reasonable PHP debug messages". I get this warning when executing admin/index.php:

Warning: Call-time pass-by-reference has been deprecated in /usr/home/markp/public_html/moo-t95/blocks/yui_menu/block_yui_menu.php on line 63

I running php 5.2.8 and I *think* it's an issue with php 5 having more strict rules about parameter passing but I could be utterly wrong....
=== with the tracker ( [[Run time warning error in Course Menu (YUI menu)|http://tracker.moodle.org/browse/CONTRIB-1695]] ). I got a response on Dec 29th from Alan Trick saying that he'd look at the issue in Jan.
!!Other issues
* [[The block doesn't highlight where you are|http://tracker.moodle.org/browse/CONTRIB-1644]] +++[Solution:]>
I've come up with a solution. The current section is given the class "marker" and the section being viewed is given the class "display". In the css there are these rules:
{{{
.yui_menu_tree .marker {
    font-weight: bold;
}
.yui_menu_tree .display {
    font-weight: bold;
}
}}}
If you want it to do something else you can change these CSS rules or override them in you theme.
=== 
* [[Discussion|http://moodle.org/mod/forum/discuss.php?d=76661]]
* [[Block : YUI menu|http://moodle.org/mod/data/view.php?d=13&rid=915]]
Similar to :
* [[28 September 2010 Move CHEM999]] and 
* [[28 September 2010 Move CHEM598]]
+++[Errors on course restore:]>
* Copying user files
{{{
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
.
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
}}}
=== 
Now I'm suspecting that there's a systemic problem here. I'll try the restore on my [[moodle testbed|http://rublev.lly.earlham.edu/~markp/moo-2011t/]] to see what happens there.
No restore errors with same course on testbed site.
I have found to my horror that for most users the ''Force password change:'' setting is checked by default. This means that when they login they are sent to Earlham's password change page. Not a good thing to happen.
I want to be able to reset this setting without having to touch each user.
First step : Set Security : Site policies : Password policy -- uncheck / off (not needed cos we're not having manual accounts in here).
Second step : enquire in moodle.org
Fix the problem : +++[How do I ''not'' force a password change]
[[Here|http://moodle.org/mod/forum/discuss.php?d=122868]]
<<<
The way Moodle remembers that a user should be forced to change their password is with a row in the user_preferences table in the DB. So, to clear this flag for everyone on your site, execute:
{{{SELECT * FROM mdl_user_preferences WHERE name='auth_forcepasswordchange' and value='1'}}} on the database
<<<
=== 
+++!![More detailed commands to fix:]
* Backup the database just in case {{{markp]$ mysqldump -u moodlebackup -p -C -Q -e LAE199 >moo-archives/LAE199-preauthfix.sql}}}
* Access the MySQL as the Moodle user {{{/markp]$ mysql -u lae199_user -p}}}
* Now do the database commands:
<<<
{{{
mysql> SHOW DATABASES;
mysql> USE LAE199;
mysql> SHOW TABLES;
mysql> SELECT * FROM mdl_user_preferences WHERE name='auth_forcepasswordchange' and value='1';

| 468 |    188 | auth_forcepasswordchange | 1     |
| 469 |    189 | auth_forcepasswordchange | 1     |
+-----+--------+--------------------------+-------+
79 rows in set (0.00 sec)
mysql> UPDATE mdl_user_preferences SET VALUE='0' WHERE NAME='auth_forcepasswordchange' AND VALUE='1';
Query OK, 79 rows affected (0.01 sec)
Rows matched: 79  Changed: 79  Warnings: 0
}}}
<<<
=== 
This Tracker item addresses the problem:
* [[Bulk user upload force password change when auth=POP3|http://tracker.moodle.org/browse/MDL-21559]]
* Same issue with LDAP
Try this patch out : 20100311_MDL-21559_HEAD_add.patch
Delete some users from Rublev.lly and then test adding them back in after applying the patch.
+++!![Test user upload fix patch]
# Delete some users
** Site Admin : Users : Accounts : Bulk User actions
** New filter : "fullname starts with 'A'"
** Select all users (barring Aaron C-R) 
** With selected users -> delete
# Download patch
# Backup code
# Copy to the correct location
# Apply patch
{{{
moo-patch]$ wget http://tracker.moodle.org/secure/attachment/19752/20100312_MDL-21559_HEAD_add_edit.patch
moo-patch]$ pushd ../moo-archives/                                        
markp/moo-archives]$ tar -czvf LAE-199code_safe.tgz ../public_html/LAE-199/
moo-patch]$ cp 20100312_MDL-21559_HEAD_add_edit.patch ../public_html/LAE-199/
moo-patch]$ pushd ../public_html/LAE-199/
}}}
Apply patch:
{{{
public_html/LAE-199]$ pushd admin
/usr/home/markp/public_html/LAE-199/admin /usr/home/markp/public_html/LAE-199 /usr/home/markp/moo-patch
[markp@rublev /usr/home/markp/public_html/LAE-199/admin]$ cp uploaduser.php uploaduser.php.bak
[markp@rublev /usr/home/markp/public_html/LAE-199/admin]$ popd
/usr/home/markp/public_html/LAE-199 /usr/home/markp/moo-patch
[markp@rublev /usr/home/markp/public_html/LAE-199]$ patch <20100312_MDL-21559_HEAD_add_edit.patch
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: moodle/admin/uploaduser.php
|--- moodle/admin/uploaduser.php Base (1.108)
|+++ moodle/admin/uploaduser.php Locally Modified (Based On 1.108)
--------------------------
File to patch: admin/uploaduser.php
Patching file admin/uploaduser.php using Plan A...
Hunk #1 succeeded at 154 with fuzz 1 (offset -10 lines).
Hunk #2 failed at 201.
Hunk #3 succeeded at 427 with fuzz 1 (offset -7 lines).
Hunk #4 succeeded at 455 (offset -10 lines).
Hunk #5 succeeded at 495 with fuzz 1 (offset -7 lines).
Hunk #6 succeeded at 527 with fuzz 2 (offset -11 lines).
Hunk #7 succeeded at 571 (offset -7 lines).
Hunk #8 failed at 820.
2 out of 8 hunks failed--saving rejects to admin/uploaduser.php.rej
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: moodle/admin/uploaduser_form.php
|--- moodle/admin/uploaduser_form.php Base (1.17)
|+++ moodle/admin/uploaduser_form.php Locally Modified (Based On 1.17)
--------------------------
File to patch: admin/uploaduser_form.php
Patching file admin/uploaduser_form.php using Plan A...
Hunk #1 succeeded at 66 (offset 4 lines).
Hunk #2 succeeded at 299 (offset -6 lines).
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|
|Index: moodle/lang/en_utf8/moodle.php
|--- moodle/lang/en_utf8/moodle.php Base (1.280)
|+++ moodle/lang/en_utf8/moodle.php Locally Modified (Based On 1.280)
--------------------------
File to patch: lang/en_utf8/moodle.php
Patching file lang/en_utf8/moodle.php using Plan A...
Hunk #1 succeeded at 1829 with fuzz 2 (offset -1 lines).
patch: **** misordered hunks! output would be garbled
}}}

=== 



TagglyTagging lets you better utilise the power of tagging your TiddlyWiki data. 
A brief list of what you can do with TagglyTagging:
* Dynamically define the structure of your data.
* Avoid hand maintaining "index" pages of your tiddlers.
* Make all your data easily locatable via your tag heirachy.

Other reasons you should give TagglyTagging a try:
* You find you aren't getting a lot of value from tagging your tiddlers in TiddlyWiki.
* You are sometimes annoyed by tag popup menus especially when they are longer than your page.

Sounds good but I'm not feelin' it...
* It is hard to explain without a demonstration. Try the TagglyTaggingTutorial.
!!Backup test database and code
Copy config-dist.php to config-prod.php, then edit to configure and add default blocks. Then :
{{{
~/public_html/moo-97t]$ mv config.php config-org.php
~/public_html/moo-97t]$ cp config-prod.php config.php
}}}
Backup:
{{{
~/public_html/moo-97t]$ tar -czvf moo97t-code.tgz moo-97t/
~/moo-archives]$ mysqldump -u moodlebackup -p -C -Q -e moo97t >moo97tDB-test.sql
}}}
!!Prepare
# Rename config-prod.php to config-test.php since this refers to the test db/data
# create new blank database {{{moo97prod}}}
# load production database 
** Data from @@Dec-10@@ and database dump from @@Dec-8@@ +++[load database into moo97prod]>
{{{
markp/moo-archives]$ mysql -u  moo97p_user -p -D moo97prod <moodleDB-peace-dec8.sql
}}}
=== 
# point new config-prod to correct places
!!Execute
1^^st^^ try -- ''unable to connect'' to site:
# Try changing permissions: {{{/usr/home]$ sudo chown -R markp:www moodle}}}
# Realize the URL gets transformed to {{{https://rublev.lly.earlham.edu/~markp/moo-97t/login/index.php}}} with a secure connection cos it's using the production db. +++[fix]>
{{{
SELECT *  FROM `moo97prod`.`mdl_config` WHERE (`id` LIKE '%https%' OR `name` LIKE '%https%' OR `value` LIKE '%https%');
UPDATE `moo97prod`.`mdl_config` SET `value` = '0' WHERE `mdl_config`.`id` =84 LIMIT 1 ;
}}}
Change the @@https@@ setting from true (1) to false (0)
=== 
2^^nd^^ try : moodle site appears but administrator login doesn't work. Cookie left over from previous time. Delete all rublev moodle cookies.
3^^rd^^ try : @@great success@@
!!Rebuild database
# +++[initial output]>
{{{
Your Moodle files have been changed, and you are about to automatically upgrade your server to this version:
1.9.7+ (Build: 20091202) (2007101570)
Once you do this you can not go back again.
Please note that this process can take a long time.
Are you sure you want to upgrade this server to this version?
}}}
=== 
# +++[All checks passed]>
|!Name	|!Information	|!Report	|!Status|
| moodle	|	|version 1.0 is required and you are running 1.9.5|	OK|
| unicode	|	|must be installed and enabled|	OK|
| database	| mysql	|version 4.1.16 is required and you are running 5.0.75|	OK|
| php	|	|version 4.3.0 is required and you are running 5.2.8|	OK|
|php_extension|	iconv	|should be installed and enabled for best results|	OK|
|php_extension|	mbstring	|should be installed and enabled for best results|	OK|
|php_extension|	curl	|should be installed and enabled for best results|	OK|
|php_extension|	openssl	|should be installed and enabled for best results|	OK|
|php_extension|	tokenizer	|should be installed and enabled for best results|	OK|
|php_extension|	xmlrpc	|should be installed and enabled for best results|	OK|
|php_extension|	ctype	|should be installed and enabled for best results|	OK|
=== 
# [[plugins check|graphics/moodle197_plugins_check.png]]<<imagebox>>
# +++[Upgrading database]>
!!Upgrading Moodle database from version 1.9.5+ (Build: 20090708) (2007101550) to 1.9.7+ (Build: 20091202) (2007101570)...
Moodle 1.9.7 contains a number of security fixes to user passwords and backups to protect the user data on your site. As a result some of your settings and permissions relating to backups may have changed.
See the [[Moodle 1.9.7 release notes|http://docs.moodle.org/en/Moodle_1.9.7_release_notes]] for full details.
To reduce the risk of password theft, you are strongly recommended to set a password salt.
See the [[password salting documentation|http://docs.moodle.org/en/report/security/report_security_check_passwordsaltmain]] for details.
=== @@great success@@
# +++[New Settings]>
;Multimedia plugins
:Enable Youtube link filter : yes
;Site Policies
:password policy : yes
;HTTP security
: regenerate session id during login : unset {"Regeneration of the session id during each login request is highly recommended. " -- I don't really understand what this is about}
: required Flash player version : 10.0.12 (hopefully this is the same as what we use :->
;Experimental
: enable CC import : unset (not interested)
: enable safe browser integration : unset ("This adds the choice 'Require Safe Exam Browser' to the 'Browser security' field on the quiz settings form. See http://www.safeexambrowser.org/ for more information." -- may be useful)
=== 
# +++[set up module tables]>
!!!resource module needs upgrading
----
{{{(mysql): UPDATE mdl_resource SET options = 'objectframe' WHERE (UPPER(reference) LIKE '%.PDF' OR UPPER(reference) LIKE '%.FDF' OR UPPER(reference) LIKE '%.XDP' OR UPPER(reference) LIKE '%.XFD' OR UPPER(reference) LIKE '%.XFDF') AND type='file' AND popup = '' AND ( options = '' OR options = 'frame')}}}
----
Success
resource tables have been set up correctly
!!!workshop module needs upgrading
=== 
# +++[upgrading database]>
Backup version is now 2009111300
=== 
# @@Great Sucess@@ {{{Moodle 1.9.7+ (Build: 20091202)}}}
Today I found some interesting stuff at [[Moodlerooms|http://development.moodlerooms.com]] that I referred to [[here|http://www.earlham.edu/markp/miss/#%5B%5BMoodlerooms%20modules%5D%5D]] and [[here|http://www.earlham.edu/markp/miss/#%5B%5BModules%20to%20investigate%5D%5D]]
Look at :
* Flex page course format
* themed resource (to go with flexpage)
* Assessment module
* Trouble ticket block
To do this I really need a test site which replicates the production test but does not pollute the code. In addition the production test is still in a directory {{{mm-t97}}} which suggests that it's the testing site.
[[31 December 2009 Refactor 1.9.7 sites]]
# Assessment module
Go through the rest next Monday.
# Rename {{{public_html/moo-97t}}} to {{{moo-p97}}} and adjust config-prod.php (//dirroot// and //wwwroot//)
** copy to config.php
** copy over _ecs themes from moo-195 +++[code]>
{{{
/moo-p97/theme]$ cp -r ../../moo-195/theme/chameleon_ecs .
/moo-p97/theme]$ cp -r ../../moo-195/theme/formal_ecs .
}}}
=== 
** rename new themes with '0-' at the front. This seems to work to get the new themes at the top of the list. +++[themes renamed]>
{{{
moo-p97/theme]$ mv parchment 0-parchment
moo-p97/theme]$ mv Facebooky 0-facebooky
moo-p97/theme]$ mv leatherbound 0-leatherbound
moo-p97/theme]$ mv serenity 0-serenity
}}}
=== 
# copy {{{moo-p97}}} back to {{{moo-97t}}} and mv the config-test.php to config.php to reestablish the test site with test db and data dir
** delete config-test.php from moo-p97 to prevent disaster
** ditto for config-prod.php in moo-97t
# @@create a different cookie name in moo-97t@@ so that both sites can operate in the same browser.
** Site Administration : Server : Session handling -> Cookie prefix

!!Installation
From the +++[README:]>
To work correctly the format requires all 5 components to be installed.
To install:
# Put the blocks/page_module block in your moodle/blocks folder.
# Put the course/format/page course format in your moodle/course/format/ folder
# Put the language files in lang/en_utf8/ files in your moodle/lang/en_utf8/folder.
# Put the mod/pagemenu in your moodle/mod/pagemenu folder
# Put the theme/page in your moodle/theme/page folder.
{{{
/moo-plugins/flexpage]$ cp -r blocks/page_module ~/public_html/moo-t95/blocks
/moo-plugins/flexpage]$ cp -r course/format/page ~/public_html/moo-t95/course/format
/moo-plugins/flexpage]$ cp -r mod/pagemenu ~/public_html/moo-t95/mod
/moo-plugins/flexpage]$ cp -r theme/page ~/public_html/moo-t95/theme
}}}
Note that the language files are now part of mod/pagemenu
Woops. Went into the wrong place! Should have been copied into @@moo-97t@@
{{{
/moo-plugins/flexpage]$ cp -r blocks/page_module ~/public_html/moo-97t/blocks
/moo-plugins/flexpage]$ cp -r course/format/page ~/public_html/moo-97t/course/format
/moo-plugins/flexpage]$ cp -r mod/pagemenu ~/public_html/moo-97t/mod
/moo-plugins/flexpage]$ cp -r theme/page ~/public_html/moo-97t/theme
}}}
=== 
Open http://rublev.lly.earlham.edu/~markp/moo-97t/admin/index.php
* Page Menu tables set up correctly
* Page module tables have been set up correctly
* {{{course/format/page plugin needs upgrading}}} but page tables have been set up correctly
Done.
!!Create a test course
Full name : ~MISC-FLEX:2010 -- Flexpage
Short name : ~MISC-FLEX:2010
Format : Page format
 # weeks/topics : 4
Show gradebook : no
Force Theme : page
Assign teacher role : markp
!!!Setting up the pages
Following the [[Flexpage Tutorial|http://development.moodlerooms.com/course/view.php?id=34&page=698]]. 
[[Initial settings:|graphics/flexpage_initial_pagesettings.png]]<<imagebox>>

Found otu that there's a new version (or at least different version of Attendance. Download from [[here| ]]
Expand into {{{moo-plugins/attendance/version2010}}}
+++[Install]>
Remove current code:
{{{
public_html/moo-p97]$ rm -r mod/attforblock
public_html/moo-p97]$ rm -r blocks/attendance
}}}
Now copy into place:
{{{
moo-plugins/attendance/version2010]$ cp -r mod/attforblock ~/public_html/moo-p97/mod
moo-plugins/attendance/version2010]$ cp -r blocks/attendance ~/public_html/moo-p97/blocks
}}}
=== 
The easiest way is to download an empty file from [[Download]]. You can of course install each component listed at TagglyTagging.
# Add users with Site Administration : Users : Accounts : Upload users
** 143 users added OK.
# Add Categories and courses with http://rublev.lly.earlham.edu/~markp/clamp-LAE/admin/uploadcourse.php

!!Problems with uploadcourse.php
Full debugging is switched on. +++[error message]>
{{{
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 730
print_header() was called more than once - this should not happen. Please check the code for this page closely. Note: error() and redirect() are now safe to call after print_header().

* line 2507 of lib/weblib.php: call to debugging()
* line 75 of admin/uploadcourse.php: call to print_header()
* line 257 of admin/uploadcourse.php: call to csverror()
* line 723 of admin/uploadcourse.php: call to validateas()
}}}
=== 
The line what it's on:
{{{    730                 $coursetocreate['topics'] = $coursetopics;}}}
You will ''always'' find usernames in the course list which aren't in the user list. This is because the user list seems to omit anyone who's been on sabbatical the previous year.
Once the input file has been processed successfully another error occurs per line processed +++[error]>
{{{
Parsed 184 course(s) from CSV
Notice: Undefined offset: 1 in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 414
}}}
=== 
Final output:
{{{
Created 184 course(s) out of 184
49 new category(ies) were created
You may wish to manually Re-Sort the categories
Re-Sorted courses
ANALYZE Database Tables OK
OPTIMIZE Database Tables OK
Total Execution Time: 3.95 s

[Upload Courses]

Notice: Undefined variable: course in /usr/home/markp/public_html/clamp-LAE/admin/uploadcourse.php on line 944
[Moodle 1.9.7+ (Build: 20091230)] 
}}}
--No categories created - try to figure out why. Reload backup database.--
!!{{ts{6/05/10 14:07}}} Update
Turns out that the categories ''were'' created; they were just not listed on the front page. So, the system is working.

[[Upload courses : configuration]]
See [[TagglyTagging History]].
As announced on Moodle Czar's blog:
<<<
* --create Questionairre for course create and restore in the Teachers on Moodle course. This'll take quite a while methinks.--
* --Apply patch to fix "Hide the course total and hide the whole gradebook" issue. Need to test on my sandbox site first.-- --[[Gradebook Fix]]-- done 8/10/2010
* --Configure sitewide course backup on current Moodle production for tonight.--
<<<

!!Carried over from [[2 August 2010 To Do]]
* @@get started on Dan Graves' courses@@

!! Flagged issues <<tag [[FLAG]]>>

!!New Ideas <<tag [[Ideas]]>>

* --Scales done--
Thinking about how to change the current system of 51 departmental categories.
!!Issues with current system
* 50 odd categories are difficult and unwieldy to manage. Adding new ones and getting in alphabetic disorder.
* Not obvious where cross listed courses are located, so finding them is error prone and frustrating for students wanting to enrol.
* retiring courses at the end of the year means moving all the categories into a 'year' category. Again, clumsy.
!!!!Advantage
* Admin Assistants can be assigned that role for a whole departments worth of courses.

!!Suggested change of Categories
* Use the Luther model of year:semester (or in their case, year:term). 
** Place ''all'' courses into a single semester
** Place non-teaching moodle sites, eg committees, etc into categories that remain in the same place
!New server drive ready
Randy Schultz, great lad that he is, has installed, & formatted the new set of 1Gb drives (two 1Gb drive in RAID-0 formation) on the Moodle production server. He's also installed the latest FreeBSD version 7 operating system so we have a brand spanking new system to work with.
Next week when Aaron Cayard-Roberts gets back we'll install and configure Apache, php, and other utilities that Moodle uses. Then we'll copy back the moodle code and data to restart EC Moodle on the new capacious system. (Obviously, we'll need to take both the Test and Production systems down to do this).
!!New Course Request Form
I've been working on a [[Course Request Form|https://moodle.earlham.edu/mod/feedback/view.php?id=30795]] hosted on Moodle itself. This has a number of advantages for us managers (completed forms are saved and can thus be tracked, forms are emailed to moodle support (Neal, Mark & Wes) and other advantages) as well as being simple for teachers to fill in. 

I'm still working on the Course Restore Form. For us to accurately identify the course to be restored we need to know the year and semester that the course was taught and also the ID of the course (eg BIOL111). 
Why do we need this ID? We will be doing the course restore straight from the //backup file// (rather than the course itself) which has the format {{{backup-<Course Id>_<graduation year><semester>-<date backup>-<time backup>.zip}}}. As you can see the backup file has the id and year-semester of the course in it's name (eg backup-''hist232''_''200820''-20080730-1118.zip) and this allows us to identify the course correctly. So you can see that all we have to go on to identify the course is the ID that you give us together with the graduation year and semester the course was taught.

Some [[issues with permissions|6 January 2010 Permissions problems]] delayed the startup of Moodletest.
On the Testing server we have a copy of the current moodle data and a copy of the production database. So the first thing that happens is that we go through a similar process of database rebuild ([[detailed in here|30 December 2009 Test with Production]]) that happened with the production test on my sandbox server.
!!Comments
# Initial out fine
# +++[Server checks]>
* @@php extension xmlrpc not present@@ {{{Installing the optional xmlrpc extension is useful for Moodle Networking functionality.}}}. Since we don't use Moodle networking this is not current an issue (though it could be later).
* ~MySql database version 5.0.45 (Rublev = 5.0.75)
* php version 5.2.6 (Rublev = 5.2.8)
So my sandbox, Rublev, is very close to the testing server in versions.
Report for //moodle// says {{{version 1.0 is required and you are running 1.9.5}}}. But why does it not say //1.9.7+//?. I think that the version here refers to the current versions that the database is at.
Interesting language note:
<<<
Note for translators: During the upgrade, Moodle will try to update your language pack. Your modifications in non-local language folders will be overwritten.
<<<
===  
# plugins check the same (as it should be)
# +++[Upgrading database]>
!!Upgrading Moodle database from version 1.9.5+ (Build: 20090708) (2007101550) to 1.9.7+ (Build: 20091202) (2007101570)...
Exactly the same as before. 
=== @@great success@@
# New Settings as before (~YouTube link filter and Password policy set to Yes) but ask Aaron about 'regenerate session id during login' setting
# Resource and Workshop modules "need upgrading" as before.
# {{{Backup version is now 2009111300}}}
# Site registration
What we want to do here is to create a Moodle installation which we can use for the main Moodle int he Spring 2010. Thus we really need the production database (easy) and the moodledata (very large). We'll create a fresh database and then overwrite it with the production dump.
Get the vanilla site up and then add modules one by one.
+++!![1. Get the source Moodle distro]
Create a dir:
{{{
$ mkdir moo-197
$ cd moo-197
$ wget http://download.moodle.org/download.php/direct/stable19/moodle-weekly-19.tgz
}}}
=== 
+++!![2. Unpack the source in the right place]
{{{
$ cd ~/public_html
$ tar -xvf ../../moo-197/moodle-weekly-19.tgz
}}}
This creates a directory called {{{moodle}}} in the user web area. Now let's rename this to something more sensible: {{{$ mv moodle moo-97t}}}
=== 
+++!![3. Create the database]
{{{
$ mysql -u root -p
mysql> CREATE DATABASE moo97t DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
mysql> GRANT ALL PRIVILEGES ON moo97t.* TO *******@localhost IDENTIFIED BY "***************";
mysql> GRANT SELECT,LOCK TABLES on moo97t.* TO moodlebackup@localhost IDENTIFIED BY '************';
mysql> FLUSH PRIVILEGES;
}}}
=== 
+++!![4. Create data dir (temporary)]
We'll create a temporary dir for the data and then add in the production data later. This has to be outside the 'public_html' area.
{{{
/markp]$ mkdir moo97t-data
}}}
=== 
!5. Start up Moodle and configure config.php
Since this is on my sandbox server in personal web dir the URL we'll use here will be ''http://rublev.lly.earlham.edu/~markp/moo-97t''
# passes all php settings
# Addresses. The Web address and Moodle dir are both correct but the data dir needs modifying. Add the dir we just created to the full path to get : {{{/usr/home/markp/moo97t-data}}}
** We get an error msge : "The 'Data Directory' you specified could not be found or created". But it there! Take a quick look at the ownership and we find that owner:group is ''markp:admins'' but permissions are {{{rwx r-x r-x}}} so basically Apache which is in group {{{www}}} cannot write to the data dir. Soln : change group to ''www'' and give the directory group write permission :
### {{{$ sudo chown markp:www moo97t-data/}}} Have to use ''sudo'' since we're changing group ownership to www
### {{{$ chmod 775 moo97t-data/}}} The ''7'' gives ''rwx'' ie read,write,execute privs at that level, so user, group, world has read access only. Now it works
# Database details (from above). Notice that the Host server is set to ''localhost''. This means that the database is on the same machine as the code. In practice we use a separate server for the database and so this field would be set to the location of the remote database server.
** Database : ''moo97t''
** User : ''********''
** Password : ''**********''
# All the environment components check out
# Create ''config.php''. The code dir is ''not'' writeable by Apache and so itt could not create a config.php. We'll do this manually by copying the code and pasting into a file. We'll come back and merge the config-dist.php into the config.php since the former has stuff we might need.
# The system now creates all the database tables. Unattended operation means that this is done invisibly to the user
+++!![6. Admin user details]
username : ***************
password: {{{**************}}}
=== 
!!7. Install Modules and Blocks
[[21 December 2009 Modules and blocks]]
!!8. [[Update Themes]]
* install American English lang pack. Already there. Just do the install. Piece of cake.
!9. [[30 December 2009 Test with Production]] 
@@Great success@@
!!10. Archive code
{{{/public_html/moo-97t]$ tar -zvcf ~/moo-archives/moo197-prodcode.tgz *}}}
!!11. Update Attendance
[[4 January 2010 Update Attendance]]
!!12. Archive
Use correct source dir this time!!!
{{{public_html/moo-p97]$ tar -czvf ~/moo-archives/migrate/moo197-prodcode.tgz *}}}
Still permissions issues with moo-p97. Upload file:
{{{
Warning: chmod() [function.chmod]: Operation not permitted in /usr/home/markp/public_html/moo-p97/lib/uploadlib.php on line 234
}}}
!!Procedure
* Purchase Sun drives and installation pieces
** can we do the hardware installation ourselves?
* Arrange day to take Moodle production down
** Do full backup of both Jails
** Do tar-gzip of code we want to transfer to new hard drives. Do this the day before installation. Copy to Test server or other suitable place.
* On the install day:
## Take server down, remove old hard drives, install new drives
## Install FreeBSD v8 and 2 Jails. (Suss out version and components for php)
## Check that Apache, php, etc works on both Jails
## Copy over Moodle and Elgg code to appropriate Jails
## restart and test

/%
!!!situation at {{ts{8/06/10 12:07}}}
* Have got a quote from Randy Schultz for two 1Tb drives. It comes in at $1,200. Go figure.
* Am hassling TomS to make the purchase
* RandyS suggests going with BSD 8
* I want to do the whole transition in a working day
%/

We need the users 'refneal' and 'refamy' to have access to Site Files so that they can restore courses.
On the [[Moodledocs : Site files page|http://docs.moodle.org/en/Site_files]] I found that to access the Site Files the user needs to have the role of Teacher on the front page. This was easily done via Admin : Fornt page : Front Page roles.
Then I set up an HTML block with a link to the URL for the site files -- piece of cake!
!!Background
Every semester we hide the previous semester category so that students don't see their old courses. Neither do teachers, but they often need to get access to old courses for materials.
!Solution
* Create a role called @@ViewInside_hidden_Categories@@ based on Legacy role type 'Authenticated User' with //See hidden Categories// capability set to Allow.
* Assign teachers to this role in the context of the hidden semester category. They should now be able to view all their courses within that Category.
!!Drawbacks
# ''All'' courses that are taught in that semester by the teacher become visible and not just the one they want.
** Response -- tough. But we can easily //remove// the person's name from the role when they have finished accessing their old stuff.
# Scale. This approach may not scale well. As the number of hidden semesters increases so does the overhead of keeping track of faculty names assigned to the new role in each hidden semester category.
** Response -- we could create a simple 'request access to previous semester's courses' form that would enable faculty to request access to a previous semester //and// also to request removal of access when that have finished doing their stuff. 
** Response -- the ''myCourses'' block displays courses and their containing categories (unlike MyMoodle). Hidden Categories will also be displayed if the new role is set. This allows faculty to see //where// their course is located in the overall structure. [img[graphics/myCourses-hidden-categories.png]]
!!Comments
* In the longer term we need to phase out the use of MyMoodle.
Posting to NITLE Moodle Exchange:
<<<
I am having a torrid time with the server admin folks at Earlham getting any updates applied to our Moodle servers (one test, one production). Basically, the way it should work is that I create and test a new update, patch, etc on my sandbox server, then I make it available to the sys admin to install on the Testing server, then he puts it onto the Production server. But this system is breaking down because he rarely seems to have the time to implement the changes I need.

Hence my questions to Moodle administrators :
* If you are a Moodle admin for your college (ie can log in as 'administrator') are you also responsible for code updates, new installs etc?
* Do you have access to the main production server at your institution to implement the changes you need? (could be SSH, FTP, whatever)
* Do you have 'sudo' or 'root' access to the production server?
* If not, what procedure do you employ to implement new versions, patches etc?
<<<
!!Summary of responses
|!Name|!College|>|>|!Questions|!Comments|
|~|~|!1.Moodle admin does code updates, installs|!2. Access to prod^^n^^ server|!3. Root access|~|
|Don Blevins | Connecticut College | Yes | Yes |//sudo// access | |
|Ken Newquist | Lafeyette |Yes, though we have two other administrators on Moodle don't have any code/maintenance responsibilities | Yes | Yes |At Lafayette, Network Services is responsible for OS and software updates at the server level (e.g. updating Redhat, patching PHP or ~MySQL, etc.) but I handle the web applications running on those servers. |
|Caroline Moore | Smith | Yes | Yes |Smith's setup is exactly like Lafayette's: I am the primary admin, and have sudo access to my production server. (Two other front-end admins do not have access to the server side.)|Our Networks & Systems department keeps my hardware, OS, php, and MySQL up to date, and I manage the applications myself. |
|Melinda Kraft | Albion | Yes | Yes |At Albion I have always had access to our test and production web servers. Like Ken, I am responsible for web server application updates, while our systems folks take care of the server security,OS patches, etc. |I don't think it is unreasonable to expect a higher level of access for yourself as a Moodle admin, at least for the application updates. As long as you have access to backup the current apps and databases before applying an update, it seems to me a sys-admin would be happy to have that off their plate.|
|Dean Thayer | Hope | Yes | Yes | Yes |Here at Hope, it's the System Administrators who are responsible for the applications on all the systems, including Moodle, so it's not really an issue. There's no such thing as "someone else's responsibility" for us, for better or worse. |
|Adam Nave | Macalester | Yes | Yes | Yes |Macalester is similar to Hope. We don't have application specialists. We do have several other Moodle admins, but I'm the only one that does work on the server. |
|Bob Puffer | Luther | Yes | Yes | Yes |At Luther College I've been the Moodle administrator for the Moodle server since the dawn of time. I'm responsible for all code updates and new installs, etc. I have access to the main production server as well as all the test, mirrors and sandboxes including root access. |
|Jason Parkhill | Colby |No, the systems group that does installations of new instances on a VM. We work closely with them on updates and versions and they are very responsive. |We have SSH/SFTP access to the VM. Handy for troubleshooting performance issues (i.e running top, etc.) and occasionally manually uploading something to Moodle data directory. |No and have not needed it yet. |The systems folks install a new Moodle instance for each semester. It is typically the most recent stable build and we try to avoid all but most pressing patches/updates to an active semester's instance. |


My default position on user accounts at [[EMC|https://emc.earlham.edu:3443/]] --is-- was that all nonEC accounts (ie non LDAP) should be manual accounts and uploaded as a batch file of user details. AmyB though would like to have a more dynamic user base for her Richmond Orchestra and this seems a reasonable request. But how to do this without the spam threat of email registration. Here's [[one option||http://moodle.org/mod/forum/discuss.php?d=97938#p452415]] from the User authentication forum on moodle.org:
<<<
Here is another quick and dirty solution:
I renamed the confirm.php in the login directory to confirm_org.php and replaced it with a custom confirm.php to re-send the confirmation link to the admin. The admin gets a modified message with the user e-mail address, so it is easy to acitivate the account via the link and forward the user an email, that the account is activated now.
The result is:
* User self registers as usual
* User receives his/her confirmation e-mail and clicks on the link
* User receives a message, that the confirmation is routed to the admin
* and admin receives an email with the original activation link of the user
* admin uses above link to activate user
* admin sends email to user, that he/she is activated now
Attached is my confirm.php script (you can find the text changes very easily in the code - they are marked as you might change the text here: - I do not use Moodles string library, so no translations etc. for the messages - just change them in the code wink.
Rename the original confirm.php to confirm_org.php (or even use another name and change this in the changed script).
Hope this helps someone until an official solution is available. 
<<<
Here's the [[confirm.php script|sundry/confirm.php]]
Also see [[Authentication: Add option for admin to confirm email based self-registrations|http://tracker.moodle.org/browse/CONTRIB-1444]] on the Tracker (still waiting for code ....)
<<notes>>
Link to [[Earlham Moodle Community|http://www.earlham.edu/markp/moodledocs/index.html#%5b%5bEarlham Moodle Community (EMC)%5d%5d]] on Moodledocs
!Problems with course backup
The default Teacher role on Moodle does not allow for the backup of user data. Argg! So I need to modify this to add user data and grades. All the documentation has misleading screenshots of older systems where this works.

In moo-2011t create dummy Teacher role called 'Backup Teacher' and assign the following extra permissions:
* Course : 
** Backup user data : allow (from Not set)
** Restore user data : allow
** [[Allowed to roll activity configuration dates on restore|http://docs.moodle.org/en/Roll_courses_forward]]
These settings do allow Teachers to do complete backups.

//''Login as other users''//?
This article is helpful [[Achieving Good Legibility and Readability on the Web|http://designfestival.com/achieving-good-legibility-and-readability-on-the-web/]] especially +++[the following:]>
Type is best sized relatively, using ems. An em is the distance that’s horizontally equivalent to the type size in points (e.g. 1em of 12pt type is 12pt; 1em of 16pt type is 16pt). We set font size in CSS using the font-size property:
{{{
p { font-size: 1.2em; }
}}}
Remember that font sizes are inherited within the DOM by children from their parent elements. This can make em sizing calculations for nested elements difficult. A good idea is to size everything in pixels first, and then convert the measurements over to ems. Pixels are easy to work with, but fall short as a fixed unit — particularly when you’re scaling a website (see § Measure below).
To calculate the desired value in ems, find the value of 1 pixel in ems, then multiply by the desired font size (in pixels):
{{{
1 ÷ parent font-​​size × desired pixel value = em value
}}}
For example, if the parent font size (as defined by, say, the body element) is 16 pixels, but we’d like to size a paragraph — which is a child of the body element — at 12 pixels, we calculate: 1 ÷ 16 × 12, which gives us 0.75em.
!!The 62.5% trick
There is a neat trick to simplifying these calculations. Consider the following CSS:
{{{
p { font-size: 80%; }
blockquote { font-size: 80%; }
}}}
That styles this markup:
{{{
<p>This is a short paragraph, followed by a quote:</p>
<blockquote>
    <p>Block quotes are blocks of quoted material, and can hold a
       range of things, including paragraphs, lists, and even
       headings of course.</p>
</blockquote>
}}}
80% of 16px is 12.8px, so p and blockquote elements will be that size, but what happens when we put a p element inside a blockquote element? The parent (blockquote) is 12.8px so the p will be rendered at 80% of that: 10.42px.
Guh! This has the potential to be quite confusing. Richard Rutter developed a neat trick to simplify the sizing calculations of nested elements. Consider:
* Browsers have a common default size of 16px for text.
* Set the body to a font-​​size of 62.5%, resetting everything to 10px.
From this point, the calculations are similar for _​direct descendants_​ of the body, for example, 12px = 1.2em; 8px = 0.8em; and so forth. Deeper nested elements are (still) relative, of course.
=== 
For the theme try these:
* set body text to {{{font-size: 62.5%;}}} as above
* //explicity// set the //nested paragraphs// to the correct em size. eg {{{div .summary, div. summary p, span .label, span .label p : 1.2em;}}}
From Anne Hathaway:
<<<
The question I have is about limiting the folders people can upload to. I went to Electronic Records Management Committee, Update this Resource, and then to locally assigned roles. There I assigned our participants to be teachers for the Electronic Records Management Committee, not for the whole course, just that committee. However, they were not able to upload files to the committee. I made them teachers for the whole course, and then of course they could upload.

My question is what was I doing wrong and can people be limited only to uploading to the committees they are assigned to? If either of you has a few minutes to show me this tomorrow that would be great. I'm hoping to leave a little early tomorrow so in the morning or around 2 would be best.
<<<
Follow [[these instructions|http://docs.moodle.org/en/Override_permissions]] :
!!! Enabling teachers to override permissions
By default, only administrators are able to override permissions. Teachers can be enabled to do so as follows:
# Access Administration > Users > Permissions > Define roles.
# Edit the teacher role and change the capability moodle/role:override (or moodle/role:safeoverride in Moodle 1.9.3 onwards) to allow.
# Click the button "Save changes". ''done''
# Click the tab "Allow role overrides" (in Administration > Users > Permissions > Define roles).
   5. Check the appropriate box(s) in the teacher row to set which role(s) teachers can override. Most likely it will just be the student role (you don't want teachers to be able to override admins), so check the box where the teacher row intersects with the student column. ''applied to students only''
   6. Click the button "Save changes". 
If preferred, a new role for overriding permissions may be created and selected teachers assigned to it. 
/***
|''Name:''|AnnotationsPlugin|
|''Description:''|Inline annotations for tiddler text.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AnnotationsPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''||
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|

!!Usage:
*{{{((text to annotate(annotation goes here)}}}
* To include the text being annotated, in the popup as a title, put {{{^}}} as the first letter of the annotation text.
** {{{((text to annotate(^annotation goes here)}}}

!!Examples:
Mouse over, the text below:
* ((banana(the best fruit in the world)))
* ((banana(^ the best fruit in the world)))

***/
// /%
config.formatters.unshift({name:"annotations",match:"\\(\\(",lookaheadRegExp:/\(\((.*?)\((\^?)((?:.|\n)*?)\)\)\)/g,handler:function(w){
this.lookaheadRegExp.lastIndex=w.matchStart;
var _2=this.lookaheadRegExp.exec(w.source);
if(_2&&_2.index==w.matchStart){
var _3=createTiddlyElement(w.output,"span",null,"annosub",_2[1]);
_3.anno=_2[3];
if(_2[2]){
_3.subject=_2[1];
}
_3.onmouseover=this.onmouseover;
_3.onmouseout=this.onmouseout;
_3.ondblclick=this.onmouseout;
w.nextMatch=_2.index+_2[0].length;
}
},onmouseover:function(e){
popup=createTiddlyElement(document.body,"div",null,"anno");
this.popup=popup;
if(this.subject){
wikify("!"+this.subject+"\n",popup);
}
wikify(this.anno,popup);
addClass(this,"annosubover");
Popup.place(this,popup,{x:25,y:7});
},onmouseout:function(e){
removeNode(this.popup);
this.popup=null;
removeClass(this,"annosubover");
}});
setStylesheet(".anno{position:absolute;border:2px solid #000;background-color:#DFDFFF; color:#000;padding:0.5em;max-width:15em;width:expression(document.body.clientWidth > (255/12) *parseInt(document.body.currentStyle.fontSize)?'15em':'auto' );}\n"+".anno h1, .anno h2{margin-top:0;color:#000;}\n"+".annosub{background:#ccc;}\n"+".annosubover{z-index:25; background-color:#DFDFFF;cursor:help;}\n","AnnotationStyles");


// %/
Edit //blue version// of Anomaly theme so that Topcoll bars match theme. Edit //styles_blue.css// and copy to //styles_select.css//
Suggest:
* background-color : #688AAD (blue)
* color : #F2F2F2F2 (grey) or #FFF (white)
* text-decoration : underline
* hover color -- red??
[[Anomaly blue complimentary colours|graphics/theme-anomaly_color-scheme.png]]<<imagebox>> from [[here|http://www.colorsontheweb.com/colorwizard.asp#wizard]]
+++[colors for blue Anomaly]>
{{{
tr.cps {
        background-color: #688AAD;
        color: #AD8A67; /* 'Topic x' text colour */
}

/* Toggle text */
tr.cps td a {
        text-decoration: underline;
        color: #FFF;
}

/* -- What happens when a toggle is hovered over -- */
tr.cps td a:hover {
/* purple background and bold white lettering
        background-color: #6773AD; 
        color : #FFF;
        font-weight : bold;
*/
}
}}}
=== 

Make green version of Anomaly for those conservatives :-)
{{{
public_html/LAE-199/theme]$ cp -r anomaly anomaly_green
public_html/LAE-199/theme]$ cd anomaly_green/
public_html/LAE-199/theme/anomaly_green]$ cp styles_green.css styles_select.css
}}}
I got this email from Martin D on 19th-Nov-09:

Hi Moodle admins,

You're getting this email because you chose to receive important news by email when you registered your Moodle site with moodle.org.

I'm writing to tell you about an exploit that was recently published on the internet (intentionally bypassing our official security policy of responsible disclosure published at http://moodle.org/security and so increasing the vulnerability of many Moodle sites).  The exploit demonstrates how a Moodle teacher could potentially gain administrator access to their own site.

In Moodle 1.9.6 and earlier, backups saved with the option of "user data" would contain accounts of all the users enrolled in that course, to promote data consistency if the backup was restored on another
Moodle system. 

This included the md5 one-way hash calculated from the user's password (eg  4d909c290d0fb1ca068ffaddf22cbd0). These can't be directly decrypted to reveal the password, so they used to be seen as reasonably safe to distribute.  However, with the advent in recent times of large databases of md5 reverse lookups on the internet, many simpler passwords can now be determined quite quickly by searching for their md5 hash (reverse mapping).

The demonstrated exploit basically involved a trusted teacher account enrolling an administrator into their own course, then making a backup of the course including user data, extracting the md5 hash of the password from the backup file and then reverse mapping the hash to discover the password.

Note that the exploit requires that (a) the user is a trusted teacher on the site, and (b) that the admin is using a fairly weak password. 

Moodle development policy has always generally been "we trust teachers".  However, we know that YOU may not trust them all and will want to lock down your sites as much as possible.

NEW RELEASES ARE COMING SOON

The core dev team is working hard on Moodle 1.9.7 and Moodle 1.8.11 right now.  Among other things, there are fixes to 11 known issues that are related to backups and user data.  We will let you know when
these releases are ready, via this mailing list.  It should be within a week.

WHAT YOU CAN DO RIGHT NOW

Your site may be vulnerable if you have any users with full backup rights on your site that might have a reason to try and crack your admin account, if they saw the published exploit.  Here are some things you can do to improve security on your site right now: 

# Disable backup functionality for teacher roles.  You can re-enable backups later with the new Moodle releases, because the permissions for saving user data will be separate from the permission to create backups.
** HOW:  Admin > Users > Permissions > Define roles:  Edit the teacher roles and change the capability for moodle/site:backup to "PROHIBIT".
# Turn on site-wide password salting (in all versions of Moodle since 1.6), this adds information to the md5 strings to make them practically impossible to reverse (next time they log in or change their password).  Note that this will affect your ability to restore backups containing user data on foreign Moodle sites - the admin of the destination site needs to include your salt in their config.php for user creation to work.
** HOW:  Add a line like this to your config.php (for the best security, there is intentionally no way to set this in the Moodle interface) {{{$CFG->passwordsaltmain = 'some long random string here with lots of characters';}}}
#  Turn on Password Policy for your site, this forces people to use stronger passwords.
** HOW:  Admin > Security > Site policies > passwordpolicy
#  Change passwords for all admins.  Now that you turned Password Policy on you'll be forced to choose a stronger one.   It also makes any old backups useless for the purposes of the exploit.
** HOW:  Edit your user profile directly, for other admins you can edit their profile and check this box:  "Force password change".  They'll be forced to change it when they next log in.

Good luck, thanks for using Moodle and I'll talk to you again soon.

Cheers,
Martin (Moodle Lead Developer)

--
You are receiving this email because you registered a Moodle site with Moodle.org and chose to be added to this low-volume list of security notifications and other important Moodle-related announcements for Moodle administrators.

To unsubscribe you can re-register your site (as above) and make sure you turn the email option OFF in the registration form.  You can also send a blank email to sympa@lists.moodle.org with "unsubscribe securityalerts" as the subject (from the email address that is subscribed).

See http://lists.moodle.org/info/securityalerts for more.
----
See also [[Security Alerts]]
<<notes heading:"Remarks" tag:"NoteTiddlers" suffix:"Notes">>
The issues here is when is 1.9.7 rolling out? How does it affect our installation? Is it likely that the LAE will incorporate this update?
The ((LAE(LIberal Arts Editition))) version of Assignment ZIP works differently (and better) than the old version:
# Rather than zip to a fixed filename (and risk overwriting) LAE ~AssignZIP uses the ''assignment name'' with the date of download as the zip filename. Eg ''~Moodle_PostSynthesispaperhere_12-28-09.zip''
# Then rather than append the assignment name to every file it ''creates a folder'' called by the assignment name which contains the uploaded files, eg ~PostSynthesispaperhere.
# finally, it puts the ''student's full name'' at the beginning of every uploaded file by that student (rather than their username), eg Allyson Ferry_Paper_1.doc , Allyson Ferry_Source_Links_paper_1.doc.
!!!Feature
With students whose surname has an apostrophe in it, for example, Caitlin O'Brien, the system will create a folder with he first part of the name, eg ''Caitlin O'', and then the file will have the rest of the name, eg '''~Brien_Paper_1_10.2.09.docx''
<<<
!!!Beware
In these circumstances the filename ''must have the apostrophe removed'' before it's uploaded back to Moodle. So '''~Brien_Paper_1_10.2.09.docx'' should become ''~Brien_Paper_1_10.2.09.docx'' otherwise the Moodle system will not be able to access the file for reading or even deleting (a characteristic of php)
<<<
[[LAE Assignment Zip]]
{{ts{22/03/11 16:09}}}
Get latest versions of Artem Andreev's Attendance module from [[github|https://github.com/andreev-artem]]
* https://github.com/andreev-artem/moodle_mod_attforblock
* https://github.com/andreev-artem/moodle_blocks_attendance
{{ts{19/04/11 11:04}}} These are the latest to date:
* {{{andreev-artem-moodle_blocks_attendance-4101e34.tar.gz}}}
* {{{andreev-artem-moodle_mod_attforblock-a772f82.tar.gz}}}
Latest as of {{ts{24/06/11 14:38}}} :
* {{{andreev-artem-moodle_blocks_attendance-4101e34.tar.gz}}} -- [[version 2.3.0|https://github.com/andreev-artem/moodle_mod_attforblock/tree/v2.3]]
* {{{andreev-artem-moodle_mod_attforblock-77fed6a.tar.gz}}}
{{{
<h1 align="center">Audience Demographic</h1>
<table border="0" align="center" cellpadding="4" cellspacing="0" rules="all">
  <tr>
    <th colspan="2">Musician</th>
    <th colspan="2">Venue</th>
    <th colspan="2">Venue demographic</th>
    <th width="100" rowspan="2">Interviewer</th>
  </tr>
  <tr>
    <th width="100">Name</th>
    <th  width="200">Audience Interaction</th>
    <th width="100">Name</th>
    <th width="200">Target Audience</th>
    <th width="150">in 2000</th>
    <th width="250">current (2010)</th>
  </tr>
  <tr valign="top">
    <td width="100" class="bold">[[Musician name]]</td>
    <td width="200" class="small_text">[[Audience interaction]]</td>
    <td width="100" class="bold">[[Venue name]]</td>
    <td width="200" class="small_text">[[Target audience]] </td>
    <td width="150" class="small_text">[[Demographic 2000]] </td>
    <td width="250" class="small_text">[[Demographic current]]</td>
    <td width="100">[[Interviewer]]</td>
  </tr>
</table>
}}}
!!Ouput
ordered by Venue (descending)

[img[graphics/database_preset_view-audience.png]]
Sam Marsall from Open University has some interesting items in his [[forumng tagged blog feed|http://learn.open.ac.uk/mod/oublog/view.php?user=11&tag=forumng]], among which is news about a simple Java based recording applet. As far as I can tell this is a stand-alone applet which records to the local drive. A substitute for Audacity:
<<<
I updated the Java audio recording applet I have, which is designed for students to record themselves. It's basically just to save them having to download a standalone application; everything it does is local. Anyway, it now looks nicer (we didn't have graphic design resource, but I tidied it up based on the upcoming new OU styles that were already designed) and a few usability glitches have been ironed out. The applet's open source; you can get the code here, or try it out on this temporary prototype site. Assuming we don't find any horrible problems with it, this will be used to replace the current Audio Recording Tool for Languages courses.
<<<
!!!Links
* [[Audio applets home|http://www.open.ac.uk/lts/projects/audioapplets/]]
* [[ouaudio applets -- code on github|http://github.com/sammarshallou/ouaudioapplets/]]

Snippets from conversation with //Dean Thayer// at Hope College on March 17th.
!!How Hope operate Moodle
They run multiple Virtual Machines (V.M) and create one VM for moodle every academic year. They keep old VMs running indefinitely (as far as I could tell)
Add [[Autumn|http://newschoollearning.com/theme/P18/]] http://newschoollearning.com/downloads/autumn.zip
This could be a new default if the ideas work out!

* [[Autumn theme : errors]]
* [[Autumn theme : ideas]]
In [[2010 Modules and Blocks]] problems displaying YUI_menu (Course Menu) correctly:
|!Parchment|!Autumn|
|[img[graphics/course_menu_parchment-theme.png]]|[img[graphics/course_menu_autumn-theme.png]]|
Firefox's Tools -> Error Console gives these errors:
!!!Error 1
{{{Warning: Selector expected.  Ruleset ignored due to bad selector.
Source File: http://www.newschoollearning.com/moodle/theme/autumn/styles.php?forceconfig=autumn
Line: 413}}}
<<<
body#email,body#email #page@@,@@ {background: none !important}/***** autumn/styles.css end *****/
<<<
{{ts{27/04/10 11:35}}} -- cannot find this line in styles.css to edit!
!!!Error 2
{{{Warning: Error in parsing value for 'font'.  Declaration dropped.
Source File: http://www.newschoollearning.com/moodle/theme/autumn/styles.php?forceconfig=autumn
Line: 335}}}
<<<
legend{
  border: #DDD solid 1px;
  background:url(pix/autumn_gradient.png ) repeat-x top;  
  padding: 1px 10px;
	font: bold Georgia, Verdana, Arial, @@s@@erif;
}
<<<
-- change ''serif'' to ''Serif''
* make edits, check that they work and email Patrick
* use earlham_skyline-1250.jpg as the header (1250 x 125). Edit the styles.css accordingly:
{{{
#header-home .headerimg1 {
  height: 125px;
  margin-bottom: 2px;
  background: url(pix/earlham_skyline-1250.jpg) repeat-x bottom left;
}
}}}
Also add {{{text-decoration : none}}} to link declarations:
{{{
a:link, a:visited {
  color: #b96d00;
  text-decoration : none;
}

a.dimmed:link,
a.dimmed:visited {
  color: #9b9b9b;
  text-decoration : none;
}

a:hover,
a:active {
  color: #b96d00;
  text-decoration : none;
}
}}}
!!Header
Currently, the Earlham Skyline only shows on the home page //underneath// the top header. Using MyMoodle, this would never appear! So try substituting it in to the top header. In {{{styles.css}}}
{{{
#header-home .headerimg2,
#header {
  background: #2d2d2d url(pix/topbg.gif) repeat-x top left;
}

#header-home .headerimg1 {
  height: 125px;
  margin-bottom: 2px;
  background: url(pix/earlham_skyline-1250.jpg) repeat-x bottom left;
}
}}}
Can really get rid of //.headerimg1// and substitute in to headerimg2. But remember that topbg.gif is ''112px'' high and the earlham_skyline is ''125px'' high. This //may// cause grief. Who knows?
* keep track of what's happening on [[github|http://github.com/djplaner/BIM/issues]]
** maybe use a git branch to apply my hacks?
* Comment on [[Adding deleted to BIM|http://davidtjones.wordpress.com/2010/04/30/adding-deleted-to-bim/]] +++[based on this]>
I do think though that keeping things simple would be better. For example:
>BIM always keeps a record of all posts ever found in a student’s blog feed. Even if the student deletes the post or changes the post, BIM keeps a record of the post in its internal database. This is a feature of BIM as one of its aims is to provide a “safe/secure” record of what is posted to the students’ blogs, just in case the blog service provider goes away.
I really don't see the point of this. If the blog service provider "goes away" (and how likely is this?) then the student is screwed anyway whether or not your system saves posts. Why not treat the BIM post records as a simple cache -- with behaviour that is standard for a cache -- so that whenever a student updates a post the BIM record is updated? That way the student controls what is seen and can safely edit / delete and amend her work. If I were a student I would be aghast at the thought that BIM saved everything because it would mean that I couldn't repent of a hastily written piece of work and erase it from the record. I do think that it's important that students feel in control of the material they make public and being able to completely erase an inappropriate blog posting without it having been 'memorised' somewhere is rather important. 
=== 
!Process problems @@SOLVED@@

After an email exchange with David Jones (of [[David Jones blog|http://davidtjones.wordpress.com]] fame) I sussed out what I had been doing wrong. Basically, I had tried putting the ''markers'' into a group instead of the ''students''. I discovered that the markers are those with the bim:coordinator or bim:marker capability and that is assigned by default to the Teacher role. In order to mark students you have to put them into a group (even if there is only one group per class) and then assign that to the 'marker'. I pointed out to David that it would be a nice default to have the whole class of students be considered the default group and assigned by default to the Teacher as the 'Marker'. Once I had got this sorted, then everything about the procedure fell into place.
Tables setup fine. Then in 'Defence against the Dark Arts' we get:
{{{Fatal error: Cannot redeclare class SimplePie_Cache_MySQL in /usr/home/markp/public_html/clamp-LAE/mod/bim/lib/simplepie/simplepie.inc on line 9098}}}
When Editting turned on.
>I suspect this might be because I'm using an RSS feed into this course
----
However, in another course 'Test Forum NG' the activity gets set up correctly.
Strange behaviour in allocating 'markers'. No way to unallocate Marker.
!!Manage Marking
Blog that I know generates a valid RSS feed : https://els.earlham.edu/markpea/weblog/rss/
Get +++[this error:]>
Could not access the URL
Unable to access the URL you provided
>    https://els.earlham.edu/markpea/weblog/rss/
The error created was
{{{    cURL error 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed}}}
Please try to change the student blog again.
=== 
Changing blog to one not on https -- http://markpea.wordpress.com/feed/ -- works
The [Your students] tab : ''Register student feed' does not tell you what student is being registered''

[[change BIM capabilities for teacher|graphics/BIM_capabilities_teacher-role.png]]<<imagebox>>

--Need to start up cron! And add BIM stuff--
BIM runs via Moodle's cron job. But:
+++[Errors on executing Moodle cron]>
{{{
Server Time: Fri, 30 Apr 2010 16:14:33 +0000


Starting activity modules
Processing module function assignment_cron ...done.
Processing module function chat_cron ...done.
Processing module function forum_cron ...Starting digest processing...
Cleaned old digest records
done.
Processing module function forumng_cron ...
Email processing:
Initial query: 0s
Marking processed posts: 0s.
Email processing (0 new posts) complete, total: 0s
Beginning forum deleted/edit message cleanup...
Message search: 0s
No old deleted / edited messages to clean up.
done.
Processing module function bim_cron ...done.
Finished activity modules
Starting blocks
Processing cron function for rss_client....<br />
<b>Fatal error</b>:  Cannot redeclare class SimplePie_Cache_MySQL in 
<b>/usr/home/markp/public_html/clamp-LAE/lib/simplepie_1.2/simplepie.inc</b> on line <b>9069</b><br />
}}}
=== 
Perhaps --BIM's magpie conflicts with the Simplepie used by clamp_LAE.-- @@Update@@ : BIM uses Simplepie -- see : [[BIM problems : more]]
Having [[updated BIM|12 May 2010 BIM update]] still get this error when trying to add a blog entry from Earlham Larning Spaces:
{{{
Unable to access the URL you provided
    https://els.earlham.edu/markpea/weblog
The error created was
    cURL error 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
}}}
Problem registered with github ([[Problem with secure server blogs|http://github.com/djplaner/BIM/issues/issue/15/]]) and [[fix suggested|http://github.com/djplaner/BIM/issues/issue/15/#issue/15/comment/226456]] :
<<<
First, the problem isn't with BIM, but how Simplepie is retrieving the information. It uses cURL, which as the error suggests, is where the failure occurs. From some reason cURL is unable to verify the certificate for SSL.

The solution I've come across is, I believe, to tell Simplepie to tell cURL not to worry about this.

What I've done is add the following line at line 7686 of BIM's version of simplepie.inc
{{{
          curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, 0);
}}}
This comes just after
{{{
          $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL;
            $fp = curl_init();
}}}
which is where Simplepie is initialising curl ready for use.
<<<
Apply this hack to //clamp-LAE/lib/simplepie_1.2// :
<<<
Before:
{{{
7679                                 curl_setopt($fp, CURLOPT_URL, $url);
7680                                 curl_setopt($fp, CURLOPT_HEADER, 1);
7681                                 curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
7682                                 curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
7683                                 curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
7684                                 curl_setopt($fp, CURLOPT_REFERER, $url);
7685                                 curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
7686                                 curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
}}}
After:
{{{
7686                                 curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
7687                                 curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, 0);
}}}
<<<
@@THIS WORKS@@ https://els.earlham.edu blogs are queried fine.
!1. Problem with Simplepie
I registered with [[github|http://github.com/]] and the posted [[Incompatibility with Simplepie|http://github.com/djplaner/BIM/issues/#issue/14]]
Got +++[reply:]>
Mark,
BIM comes with its own copy of Simplepie. Like you I saw the problems around Magpie and BIM really needs to build on a firm foundation of feed manipulation and Simplepie was the best solution.
The complicating factor is that Simplepie doesn't appear to be standard with Moodle, so I had to include it in BIM. Which causes a clash if you have it installed.
The solution would probably be to remove BIM's simplpie. I can't do this (yet) with the main source as too many Moodle installs don't have it.
Some instructions:
* remove BIM's simplepie Delete the directory/folder {{{~/moodle/mod/bim/lib/simplepie}}} This is where BIM's simplepie resides - 
* update the require in {{{~/moodle/mod/bim/lib/bim_rss.php}}} This is the only file that uses simplepie. Line 17 of this file is
>{{{  require_once($CFG->dirroot.'/mod/bim/lib/simplepie/simplepie.inc');}}}
You need to change this to point to your version of Simplepie (or perhaps you don't need to given the clash you're getting).
Hope this helps.
David.
=== 
Yes -- this seems to fix the problems:
!!!Fix
# figure out where with LAE simplepie is located {{{clamp-LAE/lib/simplepie_1.2}}}
# delete the bim simplepie {{{clamp-LAE/mod/bim/lib]$ rm -r simplepie}}}
# repoint the bim_rss.php {{{  require_once($CFG->dirroot.'/lib/simplepie_1.2/simplepie.inc');}}}
** run the Cron from [[Site Administration ► Notifications ► cron maintenance script|http://rublev.lly.earlham.edu/~markp/clamp-LAE/admin/cron.php]] +++[output]>
{{{
Server Time: Mon, 03 May 2010 14:39:53 +0000
Starting activity modules
Processing module function assignment_cron ...done.
Processing module function chat_cron ...done.
Processing module function forum_cron ...Starting digest processing...
Cleaned old digest records
Removing old forum read tracking info...
done.
Processing module function forumng_cron ...
Email processing:
Initial query: 0s
Marking processed posts: 0s.
Email processing (0 new posts) complete, total: 0s
Beginning forum digest processing...
Initial query: 0s
Marking processed posts: 0s.
Digest processing (0 new digest posts) complete, total: 0s
Beginning forum deleted/edit message cleanup...
Message search: 0s
No old deleted / edited messages to clean up.
done.
Processing module function bim_cron ...done.
Finished activity modules
Starting blocks
Processing cron function for rss_client....
0 feeds refreshed (took 0.048756 seconds)
done.
Processing cron function for search....Global searching is not enabled. Nothing performed by search.
done.
Finished blocks
Starting admin reports
Finished admin reports
Updating languages cache
Removing expired enrolments ...none found
Starting main gradebook job ...
done.
Running backups if required...
    Checking backup status...INACTIVE
Backup tasks finished.
Running rssfeeds if required...
    Generating rssfeeds...
        assignment: ...NOT SUPPORTED (file)
        chat: ...NOT SUPPORTED (file)
        choice: ...NOT SUPPORTED (file)
        data: generating <div class="notifytiny" style="text-align:center">DISABLED (module configuration)<ul style="text-align: left"><li>line 20 of mod/data/rsslib.php: call to debugging()</li><li>line 67 of lib/rsslib.php: call to data_rss_feeds()</li><li>line 421 of admin/cron.php: call to cron_rss_feeds()</li></ul></div>
...OK
        forum: generating <div class="notifytiny" style="text-align:center">DISABLED (module configuration)<ul style="text-align: left"><li>line 18 of mod/forum/rsslib.php: call to debugging()</li><li>line 67 of lib/rsslib.php: call to forum_rss_feeds()</li><li>line 421 of admin/cron.php: call to cron_rss_feeds()</li></ul></div>
...OK
        glossary: generating <div class="notifytiny" style="text-align:center">DISABLED (module configuration)<ul style="text-align: left"><li>line 18 of mod/glossary/rsslib.php: call to debugging()</li><li>line 67 of lib/rsslib.php: call to glossary_rss_feeds()</li><li>line 421 of admin/cron.php: call to cron_rss_feeds()</li></ul></div>
...OK
        hotpot: ...NOT SUPPORTED (file)
        journal: ...NOT SUPPORTED (file)
        label: ...NOT SUPPORTED (file)
        lams: ...NOT SUPPORTED (file)
        lesson: ...NOT SUPPORTED (file)
        quiz: ...NOT SUPPORTED (file)
        resource: ...NOT SUPPORTED (file)
        scorm: ...NOT SUPPORTED (file)
        survey: ...NOT SUPPORTED (file)
        wiki: ...NOT SUPPORTED (file)
        workshop: ...NOT SUPPORTED (file)
        forumng: ...NOT SUPPORTED (file)
        enhancedfile: ...NOT SUPPORTED (file)
        ouwiki: ...NOT SUPPORTED (file)
        attforblock: ...NOT SUPPORTED (file)
        feedback: ...NOT SUPPORTED (file)
        bim: ...NOT SUPPORTED (file)
    Ending  rssfeeds......OK
Rssfeeds finished
Running auth crons if required...
Cron script completed correctly
Execution took 4.209789 seconds
}}}
=== ''It works!''
** also fixes the problems with RSS feeds in the DADA course
# tar up the modified bim package {{{clamp-LAE/mod]$ tar -cvzf ~/2010-test-mods/bim_removed-simpliepie.tgz bim}}}
** question : when BIM update how should I apply my changes? Use git?
!!Test with BIM activity
Use existing BIM activity -- attempt to mark a post gives [[this error|graphics/BIM_mark_posts_error.png]]<<imagebox>>

--Big problems with getting [[the whole process to work|BIM problems : process issues]]-- {{ts{12/05/10 13:18}}} Sorted in [[BIM Problems : solved]]
!2. [[BIM problems : https]]
Having fixed the Simplepie issue (in [[BIM problems : more]]) I'm still having problems with the process. Here's what's happening:
>Preamble: this is really difficult to test out because I only have one blog with with working / accessible RSS feed and that's my wordpress blog which I'm using for serious postings (other blogs are in a secure site with https: which currently is have problems). So, I'm loathe to fill it up with 'testing' type blog postings. But I have gone ahead and created a posting called [[stream of consciousness|http://markpea.wordpress.com/2010/04/29/stream-of-consciousness/]] which I'm using to test.
# Having created a new BIM activity and created a question with the title 'Stream of consciousness' I proceed to 'Allocate markers'
# Issues with Allocate markers
** I only ever need the Teacher to be the marker, so I have a group 'BIM markers' with the teacher as member. But former members still show up in the list of potential markers and it's impossible to remove them from this list. [[Screenshot|graphics/BIM_activity_config-allocate-markers.png]]<<imagebox>>
# Meanwhile the //student// (in this case a fictional 'Hermione Granger') goes to the Moodle course and registers the URL for her blog. 
# [Manage Marking] More confusion here -- I ''know'' that one student, Hermione Granger, has registered successfully and 'Studs' = 1. But why is there 1 post under 'missing'? [[Screenshot|graphics/BIM_manage-marking.png]]<<imagebox>>
# [Your Students] -- all I see now is that I have 1 unregistered student which is actually the Teacher / marker of the course! What is going on? [[Screenshot|graphics/BIM-unregistered_students.png]]<<imagebox>>
** The //'Mark Posts'// link shows "Nothing to display"
# Try [Find Student] -- although since I only have a single student I'm not sure why I should have to 'find' her. Problem here is that you have to know which student you're looking for. Now we get some action and the student's BIM details appear. [[Screenshot|graphics/BIM-student_details.png]]<<imagebox>>
# [Your Student] -- still only show information about the Teacher/Marker as being an unregistered student. How can this be? 
** [Your Students > Mark posts] still empty. [[Screenshot|graphics/BIM-mark_posts_empty.png]]<<imagebox>>
** Even running the cron.php manually to refresh things does not change the [Mark posts] screen
----
Try again -- @@drop BIM tables@@ and regenerate with Site Admin > Notifications. Or not ...... Move the bim code out and screw around till it works ........ Now move bim back again. and recreate tables. Success.
''But'', go through the whole process above -- same result -- no posts to mark.
----
So, basically, even dropping the BIM tables and starting again does not help the process to work. I'm totally stuck.

+++[it worked one time]>
Click [Your students] and I get the notice that the [[student feed has been set up|graphics/BIM-capture_blog_rss_feed.png]]<<imagebox>> and that the posting has been automatically allocated to he question set (because the titles matched exactly). Good so far. Now I want to mark it -- but even though it says '(not marked yet)' there's nowhere on this page where I can do the marking.
=== 
David Jones from Central Queensland University has come up with a super new Moodle Activity which is a good solution to the achilles heel of using blogs for class postings, namely:
* Grading
* private comments
Ana Cornide told me that she manually copies each blog entry into Word and comments and grades it there. But this is a very high overhead task and not one that many faculty would attempt.
!![[BIM – Feed Aggregation Management and Marking|http://davidtjones.wordpress.com/research/bam-blog-aggregation-management/]]
In [[Current version of BIM|http://davidtjones.wordpress.com/research/bam-blog-aggregation-management/current-version-of-bim/]] we have an explanation of what BIM does:
<<<
BIM is an activity module for Moodle that helps teachers manage and mark student use of personal feeds (produced by blogs, twitter, whatever)
<<<
+++[More detailed explanation]>
BIM is a Moodle module that supports an activity where:
* Each student registers an individual external web feed.
* The feed might be generated by a blog, twitter or any other tool that produces a web feed. It’s the student’s choice what they use. Each student uses that external feed to respond to a set of questions.      Currently, those questions usually encourage the student in reflecting on their learning, often in the form of a reflective journal. However, there is no need to have a set of questions.
* BIM mantains a copy of the posts that appear in the students’ web feed, and attempts to automatically allocate student posts to the questions.
* Different teachers track, manage and mark posts for different groups of students.
* A coordinating teacher allocates teaching staff to different groups, tracks their marking progress and the progress/activity of all students.
* The overall mark students receive, can be sent to the Moodle gradebook.
===
This page has some useful links to documentation and goes over the process of using it in more detail. In our situation we would probably have no need for the distinction between //coodinator// and //marker//.
* [[BIM user resources|http://cddu.cqu.edu.au/index.php/BIM_User_Resources]] point to screencasts here:
* [[BIM screencasts on vimeo|http://www.vimeo.com/9662476]]
* [[FAQ|http://davidtjones.wordpress.com/research/bam-blog-aggregation-management/faqs-for-bam/]]
* [[To Do list on github|http://github.com/djplaner/BIM/issues]]

+++[Comments on BIM to do list]>
[[BIM to do list|http://davidtjones.wordpress.com/research/bam-blog-aggregation-management/bim-to-do-list/#comment-3010]]
David,

This is fantastic! It means that student blogging can really take off since teachers now have the ability to grade and comment on the postings in a private way. I did have a few questions though about the design.

# It wasn’t clear to me the extent of student interaction with the BIM activity. There’s a screencast about registering your blog, but once the student has done that I wasn’t clear what else she had to do. It seems to me that there should be somewhere where the student assigns a blog entry to the question.
# It’s also not clear how the marks are accumulated in the gradebook. Are they all summed into one grade item per BIM activity?
# Could things be streamlined with the use of tags? For example, tag the blog posting corresponding to the BIM assignment #1 with ‘week1_assignment’? Or something similar. I guess that different blogging systems handle tags differently.

Whatever the case with the above, I think that this is an excellent Activity and will really help blogging to break into the mainstream Moodlers consciousness. The achilles heel of using blogs with a class has always been the issue of marking and private comments and this really seems to be a workable solution. Well done! I shall be testing it soon with Moodle 1.9.7.
=== 
----
!!Install and test
* {{ts{14/04/10 11:54}}} download from the [[github|http://github.com/djplaner/BIM]] with {{{/2010-test-mods]$ git clone git://github.com/djplaner/BIM.git}}}
* {{ts{29/04/10 14:36}}} update code with {{{2010-test-mods/BIM]$ git pull}}} +++[output]>
{{{
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 10 (delta 6), reused 0 (delta 0)
Unpacking objects: 100% (10/10), done.
From git://github.com/djplaner/BIM
   8190238..ab67e14  master     -> origin/master
Updating 8190238..ab67e14
Fast forward
 backuplib.php   |    8 ++++----
 lib/bim_rss.php |    1 +
 2 files changed, 5 insertions(+), 4 deletions(-)
}}}
=== 
* copy into place {{{markp/2010-test-mods]$ cp -r BIM ~/public_html/clamp-LAE/mod/bim}}}
!Configuration
# Setup the Activity, then open it and :
# Manage questions. Add new question -- title should be the posting subject. [[Screenshot|graphics/BIM_activity_config-manage-questions.png]]<<imagebox>>
# Allocate Markers. This is squirrely to say the least. Have to set up a group called 'BIM markers'. Teachers seem to get added to this by default. [[Screenshot|graphics/BIM_activity_config-allocate-markers.png]]<<imagebox>>
# Manage marking. The idea is that students themselves add their own blog URL to the assignment. [[Screenshot|graphics/BIM_activity_config-manage-marking.png]]<<imagebox>>
# Your students : View student details.  [[screenshot|graphics/BIM_activity_config-view-students.png]]<<imagebox>>
** Mark posts. This shows whether blog entries have shown up and you can mark them here. [[screenshot|graphics/BIM_activity_config-mark-posts.png]]<<imagebox>>

[[BIM : to Do]]
Finally we're going to get the production moodle system (//sunstone//) backed up on a regular basis!
Here's how it might happen (from an email I sent to Aaron):
:Here's how you can put the moodle system into maintenance mode:
<<<
You can put the site into maintenance mode by creating the following file:
moodle_data_directory/SITEID/maintenance.html
where SITEID is the id of the site 'course' - usually '1'

The content of maintenance.html is the message displayed to non-admin users when they try to access the site. If you just want the standard message displayed then something like "touch moodle_data_directory/SITEID/maintenance.html" should do the trick.
<<<
:So we could have a cron job that puts the system into maintenance mode ($ mv maintence.html /moodledata/1)  and then does a mysqldump of the database into moodledata/1. Then execute the backup of /data/moodlecode and moodledata. Then mv maintenance.html out of moodledata/1 and maintenance mode is off.
[[SITS integration project|http://moodle.org/mod/forum/discuss.php?d=124707]] at B''ar''ff.
<<<
only a small portion of the code falls naturally into the Moodle code - a very simple block. The rest of it consists of database schemas, stored procedures and a GUI which is merely launched from within Moodle, rather than being part of it, per se. 
<<<
Code is at [[Moodle SITS integration|http://sourceforge.net/projects/moodlesitsinteg/]]
Basically, this morning Dan Graves was working with the Venues db taking print-to-pdf and copying to MS Word. He was also cleaning up the data as he went along. A student decided to change a preset in the middle of this. I think it might have been a preset for the Venues db=, but maybe not -- check! Anyhow, the Venues db first displayed "Economic Downturn" (a preset that should only have applied to the Research db) and then all the data bar student name was lost.
//Fortunately// I had made a full course backup on Friday April 2nd.
[[Problems with restoring backup]]

!!What happened
User as in the Venues database checking out something. While this db was active he applied the 'Economic downturn' preset for the Research database. This wiped out all the fields for the Venues. //Global presets are dangerous!//
{{ts{12/04/10 12:30}}} : A similar thing has happened again but this time the Research database has been flattened.
!LAE 1.1 for Earlham production Moodle
# use copy of production database
# add all modules, blocks, themes from [[Plugins for LAE version]]
# test with restored courses
# tar up and install on zincite (moodle test)

(also see [[13 July 2010 Install CLAMP-LAE 1.9.9 test]])

--!!1. import production database
{{{markp/moo-archives]$ mysql -u lae199_user -p -D LAE199 <moodleDB-peace-7132010.sql}}}
a. Setup {{{config.php}}} - see other TW
b. because I used the production database it's looking for //https//. Fix as in [[here|30 December 2009 Test with Production]]
c. decided to drop all tables and start from scratch cos working with a new database anyway.--

!!1. Start with fresh database
Tables are set up correctly though I'm still baffled by the ''... plugin needs upgrading'' message
Added a salt to the config.php and the admin login was not affected. Strange.
!!2. Add modules
# [[Attendance|Update Attendance]]. Tables set up correctly.
# [[Ouwiki|Update OUwiki]]. Tables set up OK. New setting -- default.
# [[Feedback|Update Feedback]] Tables set oop. New setting -- default.
# [[Questionnaire|New Questionnaire]] Tables set up. +++[code]>
{{{
~/moo-plugins/contrib/plugins/mod]$ cp -r attforblock /usr/home/markp/public_html/LAE-199/mod
[markp@rublev ~/moo-plugins/contrib/plugins/mod]$ cp -r ouwiki  /usr/home/markp/public_html/LAE-199/mod
[markp@rublev ~/moo-plugins/contrib/plugins/mod]$ cp -r feedback /usr/home/markp/public_html/LAE-199/mod
[markp@rublev ~/moo-plugins/contrib/plugins/mod]$ cp -r questionnaire /usr/home/markp/public_html/LAE-199/mod
}}}
=== 
# [[ForumNG|Update Forumng]] Tables OK. +++[Settings]>
* Max attachment size : 128Mb
* Show usernames : check
Everything else at default. Useful option to link to custom guide to ForumNG.
=== 
!!3. Add blocks
# [[Attendance|Update Attendance]] Tables OK
# [[Sharing cart|Update Sharing Cart]] Tables OK. Settings left at default.
# [[YUI menu|Update YUI_Menu]] Tables OK. 
# [[Progress bar|Update Progress]] OK.
# [[myCourses|Update MyCourses]] The current version seems to be working well enough, so don't change a winning horse :-) +++[copy code]>
{{{ ~/moo-plugins]$ cp -r myCourses /usr/home/markp/public_html/LAE-199/blocks}}}
=== +++[settings]>
* Show all courses link : check
* show long names : check (may change this)
* show flat list : checked by default
* Show course search box : check
May change Admin settings too
=== 
!!4. Hacks
* Follow the installation process in [[MyMoodle remake]] to install My Moodle code
Other files to copy:
* upload course
* check stats
!!5. Themes
Update themes!
!!6. Upload Categories and users
* import category list
* upload user list
* restore some 'difficult' courses
!!7. Tar up and copy to test server
Ken Newquist posted [[this comment|http://cme.clamp-it.org/mod/forum/discuss.php?d=573#p1840]] in the HELP!!! Forum of the new CLAMP Moodle Exchange:
+++[Comment]>
CLAMP will be putting out a Moodle 2.0 status report later this month (it's being edited now) but there were a number of blockers that we found when beating up on the new version at Moodle Hack/Doc Fest in January.
Here are the biggies:
* Course data is purged when a student is removed from the course
* Moodle 2.0 upgrades from 1.9 often fail or require manual intervention (often tied into issues with wiki upgrades)
* Moodle 1.9 backups can not be restored to  aMoodle 2.0 installations.
* Administrators can no longer perform mass uploads of files to courses.
In addition, several important modules or blocks are not yet ready for Moodle 2.0 and would prevent the upgrade for schools who rely on them. These modules include:
* Quickmail block
* Feedback module
* Scheduler module
* Shopping Cart module (I think he means 'sharing cart'
* Banner IMS Enrollment plug-in
These issues may be bigger for some schools than others. As a group CLAMP is holding off on making a recommendation until March, when we have a sense for how many of Moodle 2.0's bugs have been fixed. Based on the sentiments at Hack/Doc though, I think most people with existing installs are heavily leaning toward waiting until 2012.
A lot of us went through the Moodle 1.6 to Moodle 1.7 upgrade, in which roles were reworked, and a lot of the old code broke. This is an even bigger transition, so we're proceeding cautiously.
=== 
>A lot of us went through the Moodle 1.6 to Moodle 1.7 upgrade, in which roles were reworked, and a lot of the old code broke. This is an even bigger transition, so we're proceeding cautiously.
;Upshot
://I think most people with existing installs are heavily leaning toward waiting until 2012//
(I skipped the moodle version 1.7 and waited for 1.8 and avoided the problems that others had)
{{ts{28/12/10 16:38}}} Find all occurrences of 'Assign roles' in the moodle code:
{{{ ~/public_html]$ ack -r 'Assign roles' moo-2011t/}}} +++[irrelevant output]>
{{{
moo-2011t/blocks/admin/block_admin.php
70:    /// Assign roles to the course

moo-2011t/lang/en_utf8/help/courseenrollable2.html
2:<p>This setting has no effect on non-interactive enrolment plugins 
(e.g. External database enrolment). Also, users can always be assigned 
the role of student via the Assign roles link in the course 
administration block.</p>
}}}
=== 
<<<
{{{moo-2011t/lang/en_utf8/role.php}}}
@@10@@:$string['assignroles'] = '@@Assign roles'@@;
@@11@@:$string['assignrolesin'] = '@@Assign roles in $a@@';
@@136@@:$string['role:assign'] = '@@Assign roles to users@@';
<<<
So, it looks like I need to change lines 10 & 11 in //lang/en_utf8/role.php//
{{{
$string['assignroles'] = 'Enrollments';
$string['assignrolesin'] = 'Enrollments in $a';
}}}
!!Update {{ts{4/01/11 14:54}}}
Wrap up the changes made to {{{en_utf8/role.php}}} ''together with'' the new lang pack {{{en_us_utf8}}}
{{{
lang/$ tar -cvzf en_lang_update.tgz lang/en_*
}}}
So untar in the code root!
{{ts{31/03/11 10:12}}} Got this email from Ed Farmer (ESR):
<<<
One of the adjuncts experienced an issue with students not being able to see other students profiles.  Eventually she was able put all of the students in a group and then they could see each others profiles.  She will be using groups for a pedagogical reason later in the course and wants to allow all students to see all other students profiles.  I can't see where in Moodle I could even restrict the profile from being available to everyone if I wanted to.  When I went in to a couple of courses, it seems that the default must be to allow students to see other students profiles.  Is there a place to set that profile visible/not visible?
<<<
Here's what I replied:

What you want to do is to ''change the permissions for students in the course''
So:
* In the moodle course as teacher or administrator goto Administration : Assign roles
* hit [Override permissions] tab
* click Student
* do a browser find for 'profile'. You'll end up at View User Profile. This is defaulted to 'Allow'. Here's what it does : http://docs.moodle.org/en/Capabilities/moodle/user:viewdetails
* Click the radio button for the 'Prevent' column (# 3)
* [Save changes]
* Now students will not be able to view each other's profiles //in that course only//
* When she wants to return to the default you/she will have to change the permission back to 'allow'.
Here's a possible new configuration for the Moodle landing page:

[img[graphics/IS-Prototype-Moodle-landing-page-small.png][graphics/IS-Prototype-Moodle-landing-page.png]]<<imagebox>>
In Dan Graves' [[Live Music in Richmond|https://moodle.earlham.edu/course/view.php?id=1052]] Ford/Knight course he has 4 database activities (Venues/Organizations, Musicians, Performance Calendar, Research). I set up the data fields according to his specifications, but he wanted to change the {{{[[Music style]]}}} field from a simple //Menu// type to one where you can choose one or more +++[menu options]>
blues
classical
country
dance
electronic
folk
hip hop
jazz
musical theater
patriotic
pop
religious
rock
swing
other
=== .
;Problem:
: replacing the field {{{[[Music style]]}}} with a field //of the same name// but different type will basically delete all the data associated with that field (although you are not warned of this when you do the deletion)
;Solution:
: insert a //new field name// {{{[[Music style checkbox]]}}} of type checkbox replace {{{[[Music style]]}}} with {{{[[Music style checkbox]]}}} in ''all'' the templates. Also, before doing this take screenshots and pdf prints so that students have a record of what was there prior to the change.
Now the field entry looks like this:
[img[graphics/music-style-checkbox_appearance.png]]
{{ts{10/05/11 10:46}}}
# Copied re-12 to chemix-12 {{{/public_html]$ cp -rp ref-12 chemix-12}}}
# Install the Jmol resource according to instructions in [[Jmol]]
# First update the {{{ mod/resource/type/jmol/}}} with updated components taking care to preserve original (as zip) just in case. +++[Update]>
Files to update:
{{{moo-plugins/resource_jmol4moodle18_v_02/mod/resource/type/jmol]$ diff -qr . ~/moo-plugins/jmol-11.8.15 | grep differ}}}
{{{
Files ./COPYRIGHT.txt and /home/markp/moo-plugins/jmol-11.8.15/COPYRIGHT.txt differ
Files ./Jmol.js and /home/markp/moo-plugins/jmol-11.8.15/Jmol.js differ
Files ./JmolApplet0.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0.jar differ
Files ./JmolApplet0_Popup.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_Popup.jar differ
Files ./JmolApplet0_Quantum.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_Quantum.jar differ
Files ./JmolApplet0_ReadersCifPdb.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ReadersCifPdb.jar differ
Files ./JmolApplet0_ReadersMolXyz.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ReadersMolXyz.jar differ
Files ./JmolApplet0_ReadersMore.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ReadersMore.jar differ
Files ./JmolApplet0_ReadersXml.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ReadersXml.jar differ
Files ./JmolApplet0_ShapeBio.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ShapeBio.jar differ
Files ./JmolApplet0_ShapeSpecial.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_ShapeSpecial.jar differ
Files ./JmolApplet0_Smiles.jar and /home/markp/moo-plugins/jmol-11.8.15/JmolApplet0_Smiles.jar differ
}}}
Copy all these except COPYRIGHT.txt
{{ts{10/05/11 10:58}}} All copied into ''moo-plugins/resource_jmol4moodle18_v_02/mod/resource/type/jmol''
=== 
# tar/gzip and untar +++[code]>
{{{
/moo-plugins/resource_jmol4moodle18_v_02]$ tar -cvzf ../jmol-resource-2012.tgz *
/moo-plugins]$ cp jmol-resource-2012.tgz ~/public_html/chemix-12/
/public_html/chemix-12]$ tar -xvf jmol-resource-2012.tgz
}}}
=== 
** Now do the suggested edits to {{{lang/en_utf8/resource.php}}} and {{{mod/resource/lib.php}}} in [[Jmol]] installation instructions
# create database and data dir
** +++[data dir]>
{{{
/moodata]$ mkdir chemix12-data
/moodata]$ sudo chown -R markp:www chemix12-data/
/moodata]$ sudo chmod 775 chemix12-data/
}}}
=== 
** database -- see other place
# edit config.php -- change db name and user
# test URL {{{http://rublev.lly.earlham.edu/~markp/chemix-12}}} and create admin user account
@@Problem situation@@ -- not all the database tables are being created. +++[Details]>
The table creation output stalls after Quiz (success) and some subsequent tables get created but not all (eg resource, Scheduler, sharing cart, scorm, wiki, workshop). 
I think it's getting hung up on resource creation.
So, remove all the jmol stuff, create the site and then add in the jmol stuff.
@@copy back@@ the edits from {{{public_html/chemix-12}}} to {{{/moo-plugins/resource_jmol4moodle18_v_02}}}
{{{
chemix-12/mod/resource]$ cp lib.* ~/moo-plugins/resource_jmol4moodle18_v_02/mod/resource
chemix-12/lang/en_utf8]$ cp resource.php ~/moo-plugins/resource_jmol4moodle18_v_02/lang/en_utf8
}}}
Now @@remake@@ the tar file : 
{{{
chemix-12]$ rm jmol-resource-2012.tgz
~/moo-plugins]$ rm jmol-resource-2012.tgz
/resource_jmol4moodle18_v_02]$ tar -cvzf ../jmol-resource-2012.tgz *
}}}
And remove the code from public_html/chemix-12
{{{
chemix-12/mod/resource]$ mv lib.php.bak lib.php
chemix-12/mod/resource]$ rm -r type/jmol/
}}}
(I think we can leave the lang and the pix alone.)
Now dropping all tables and starting again created all the tables and worked fine. 
So, backup the code and db and add in Jmol.
=== 
{{ts{10/05/11 14:58}}} Decided to use the //non-updated// jmol code to start with. +++[So:]>
* rename the directory : {{{~/moo-plugins]$ mv resource_jmol4moodle18_v_02 jmol-resource-code-2012}}}
* and expand the archive {{{~/moo-plugins]$ unzip resource_jmol4moodle18_v_02.zip}}}
* since the {{{pix}}} and {{{lang}}} dirs are already there all I need to do is to copy the mod/resource dir: {{{resource_jmol4moodle18_v_02]$ cp -r mod ~/public_html/chemix-12}}}
=== 
The added code does not seem to have had untoward effects.
----
Install some [[new themes|http://moodle.org/mod/data/view.php?d=26&mode=list&perpage=10&search=Moodle+1.9.x&sort=0&order=DESC&advanced=0&filter=1&advanced=1&f_121=&f_122=&f_123=&f_124=Moodle+1.9.x&f_125=&f_126=&f_127=&f_128=&u_fn=&u_ln=Caiado]] from Ricardo Caiado in Brazil. Need also to +++[install login-logout block.]>
{{{
chemix-12/blocks]$ mv ~/moo-themes/login_logout .
chemix-12/blocks]$ sudo chown -R markp:www login_logout/
}}}
=== 
{{{
/chemix-12/theme]$ cp -r ~/moo-themes/SOCVM .
;Notes
: Very nice theme, but will need some mods to remove the links at top and bottom.

* add course and user. LDAP works! URL : http://rublev.lly.earlham.edu/~markp/chemix-12/
* updated jmol to moodle 1.9 version -- seems to work
* email Kalani Seu + Lori Watson
----
!!Install Jmol filter
{{{chemix-12/filter]$ cp -r ~/moo-plugins/geoffrowland-moodle-filter_jmol-b876624/filter/jmol .}}}
Install lang files:
{{{chemix-12]$ cp -r ~/moo-plugins/geoffrowland-moodle-filter_jmol-b876624/filter/jmol/lang .}}}

!!Files hacked
* {{{chemix-12/lang/en_utf8/resource.php}}}
* {{{chemix-12/mod/resource/lib.php}}}
We are planning to run the Banner-Luminis course creation/enrollment system this afternoon at 4:30pm to update courses for the next semester (labelled with @@201220@@) and I want to take this opportunity to remind you of some useful information.
# To make sure that there are no problems with data corruption we are taking the whole Moodle system offline at 4:30 to execute the Banner-Luminis data import. The system should be unavailable for no longer than 30 minutes. Please let me know if your access to moodle at this time is essential.
# ''//Students will be enrolled into your next semester classes//''. You can see who is enrolled by opening Course Menu : Participants -> Students.
** //But I don't want students to access my course before I'm ready//. Here's how to +++[hide a course from student access]>
##Open the course and go to Administration : Settings
## Scroll down to Availability and set 'This course not available to students'
## That will hide the course from the student participants
*** The course will now appear greyed out in your MyMoodle list
## Make sure to reset this before the new semester starts!
=== 
# The new classes will appear at the top of your MyMoodle list of classes. Courses that have been 'hidden' (see above) will appear greyed out so you know that students cannot access them.
----
!!!Reminders
* For @@regular courses@@ for credit //we cannot create these// on demand. The Banner-Luminis system creates the courses and enrolls students. If we tried to create a regular course it would screw up the system and students would not get enrolled. 
** But I don't see my course! That means that it's not in Banner -- you need to get in touch with the Registrar's Office and ask them to add it.
** My course has the wrong name / has changed it's title / has some wrong students enrolled. All these issues can only be fixed by the Registrar's Office (Julie Stout -- {{{stoutju@earlham.edu}}}). Please contact her directly.
* We only restore courses from 2010 or before -- that is courses from academic year 2009-10 and prior. For last year's courses (labelled 2011) or to reuse the current semester's course +++[here's how to IMPORT]>
## Open the new course which will be empty
## Click Administration : Import
*** You'll see a list of courses that you taught -- choose the one that you want to import into the current course
## Now click [Use this course] and it'll get imported.
## You may want to set Administration : Settings -- Availability  to 'make this course not available to students' while you work on it.
=== 
* ''Multiple sections''. //I'm teaching two sections and both of them are listed but I only want to use a single moodle course//. This is where we can help you. We'll create a @@meta course@@ which inherits the enrollments from the individual sections. Students will go to the meta course and you place all your course material there.
!!Help
> I need somebody. Help! Not just anybody. Help! Ooooo ....
The Moodle team is here to help you manage and design your moodle course. Here's who to contact:

|Mark Pearson| Moodle Czar |markp | 2102|
|Amy Bryant| Reference Librarian |bryanam | 1302|
|Wes Miller| ITAM leader |wesm | 1278|

Mark Pearson for the Moodle Team.
[[20 April 2010 -- MUS484 db situation]] describes the problem with two courses each having a different corrupted database and how I fixed the situation.
Currently the working course is //MUS484-BB:201020 — Live Music in Richmond (dup)//
Two changes needed:
# Students had [[permissions to change presets|graphics/student_role_overrides.png]]<<imagebox>> -- I have reset these to off.
# Dan needs the ability to make a backup with user data (wouldn't it be nice to have a 'backup preset' preconfigured with what you want?). Fix:
** In Administration : Assign Roles : Override permissions (teachers) set : 
*** Course : Backup User data (//moodle/backup:userinfo//) -> Allow [[screenshot|graphics/teacher_backup_enable.png]]<<imagebox>>
*** Course : Restore user data (//moodle/restore:userinfo//) -> Allow
Now Dan can make changes with impunity.
Need to send him instructions about backing up the course
{{ts{17/02/11 16:27}}}
It appears that Jana Schroder's screen reader is not picking up the 'highlight topic' and 'hide' button for the course outline sections. Strange.
+++[image and html code]>
[<img[graphics/course-section-controls.png]]
{{{
<td class="right side">
<a href="view.php?id=99&amp;topic=1" title="Show only topic 1">
    <img src="https://moodle.earlham.edu/pix/smartpix.php/custom_corners/i/one.gif" alt="Show only topic 1" /></a><br />
<a href="view.php?id=99&amp;marker=1&amp;sesskey=K7jyzBRyfo#section-1" title="Highlight this topic as the current topic">
    <img src="https://moodle.earlham.edu/pix/smartpix.php/custom_corners/i/marker.gif" alt="Highlight this topic as the current topic" /></a><br />
<a href="view.php?id=99&amp;hide=1&amp;sesskey=K7jyzBRyfo#section-1" title="Hide this topic from students">
    <img src="https://moodle.earlham.edu/pix/smartpix.php/custom_corners/i/hide.gif" alt="Hide this topic from students" /></a><br />
<a href="view.php?id=99&amp;random=4321&amp;section=1&amp;move=1&amp;sesskey=K7jyzBRyfo#section-2" title="Move down">
    <img src="https://moodle.earlham.edu/pix/smartpix.php/custom_corners/t/down.gif" alt="Move down" /></a><br />
</td></tr>
}}}
=== 
{{ts{17/02/11 17:20}}} Latest comments:
<<<
The ‘Move this section” text actually appears right above each topic but is not something I can link to.
Your thought about Ajax is likely accurate as I understand that this is a problem for JAWS including on, for example, the Zimbra site.  Unfortunately, I know nothing of thetechnical details about why this is so or what, if anything, can be done about it.
<<<
+++[Email exchange with Jana]
{{{
    That’s not a question I know the answer to.  Is it possible for you to tell if there is a difference between the one that shows and works like a link for me and the ones that do not? 

That is the (good) question. Here's some of the html by way of illustration (I've simplified it somewhat to make it easier to assimilate):

<td class="right side">

<a href="view.php" title="Show only topic 1">
    <img src="one.gif" alt="Show only topic 1" /></a><br />
<a href="view.php" title="Highlight this topic as the current topic">
    <img src="marker.gif" alt="Highlight this topic as the current topic" /></a><br />
<a href="view.php" title="Hide this topic from students">
    <img src="hide.gif" alt="Hide this topic from students" /></a><br />
<a href="view.php" title="Move down">
    <img src="" alt="Move down" /></a><br />
</td></tr>

So, what we have in order is :

   1. the first <a href> is the link that executes the 'show only' function. It has a 'title' that appears on the screen. The code surrounds an image with the 'alt' text 'show only topic 1'. This is what your screen reader reads (I think). When you press [Enter] here you are effectively clicking on the graphic image
   2. The next one down has 'Highlight this Topic as the current topic' both on the title for the link, and the image graphic 'alt' text. This is one that apparently you cannot click on. Why this is so is a mystery to me right now.
   3. Ditto for the next line which should read 'hide this topic from students'. This seems to be one you can click on either
   4. The 'Move down' does not appear here at all for me.

I'm now having some thoughts as to whether this behaviour is a consequence of enabling Ajax on the site. Let me get back to you with a test for that.

    If not, where do we go from here and, in the meantime, could your hide topic 4 the ew Bonner Seminar section, for me?


I have hidden the section.

I'm rather busy right now but I do want to follow this issue up.

Cheers

Mark

     

    Thanks,

    Jana

     

     

    From: Mark Pearson [mailto:markp@earlham.edu]
    Sent: Thursday, February 17, 2011 3:30 PM
    To: Jana Schroeder
    Subject: Re: Moodle Questions

     

    Jana,

    OK. Then something strange is happening. The problem is that I cannot tell from the appearance of the page whether it will register with your screen reader. Could you tell me exactly what the screen reader reads on the screen in terms of HTML entities? For example, does it read the 'alt' text for a button or link, and/or the 'title' ? The page source should tell me whether the offending links have 'alt' or 'title' properties.

    Cheers

    Mark

        Hi, Mark,

         

        Sorry I’m not being clear.  In edit mode, the words for everything show up, but only the “show only section X” text shows up as an actual link I can activate and do anything with.  The “move section X,” “highlight this topic as the current topic,” and “show/yhide topic X” text is just text—nothing to click on and cause to change anything.  I was hoping if I couldn’t hide the section I no longer want students to see, I would at least move it down below the currently more important topics, but I can do neither.  As I said, I am pretty certain I have done these things in the past on Moodle.

         

        Thanks,

        Jana

         

         

        From: Mark Pearson [mailto:markp@earlham.edu]
        Sent: Thursday, February 17, 2011 2:07 PM
        To: Jana Schroeder
        Subject: Re: Moodle Questions

         

        Jana,

        I have just realised that the reason for the lack of other options showing up on the course section was this: editing was not switched on. So, I think you'll find that if you click [Turn editing on] (2nd row down from the top, far right corner) then go down the page to the section you want to hide, you'll find at the right side of that section three links 'Show only topic', 'Highlight this topic as the current topic', and 'Hide'.
        So I have left the theme as it currently stands.

        Does this make sense?

        Mark

            Thanks.  Can you drop me a line when you’ve changed it?

             

            Ana

             

             

            From: Mark Pearson [mailto:markp@earlham.edu]
            Sent: Thursday, February 17, 2011 12:06 PM
            To: Jana Schroeder
            Subject: Re: Moodle Questions

             

            Woops. My bad. I just took a look at the course. The theme only displays the Show section. Let me find a better theme.

            Chrs

            Mark

                Dear Mark,

                 

                Thanks for the response.  The delete and hide links are now available for individual resources and assitgnments so I was able to change that.

                 

                However, there is still  aproblem with the topic list.  I found the topic list.  Under each topic, I can read the words, “Show only topic X,” “Highlight this Topic,” and “hide section X.”  However, the only one that is a link that can be activated is the “Show onlysection X” one.  The others are not links that can be activated.  Any thoughts?

                 

                Hanks,

                Jana

                 

                 

                From: Mark Pearson [mailto:markp@earlham.edu]
                Sent: Wednesday, February 16, 2011 12:11 PM
                To: Jana Schroeder
                Subject: Re: Moodle Questions

                 

                Jana,

                Many apologies for not replying to your previous message

                    Hi, Mark,

                     

                    I sent the message below a while back but don’t think I received a response.  I’d like to try to work on these issues during early semester brea if possible.

                     

                    Thanks,

                    Jana

                     

                    Dear Mark,

                     

                    I am trying to update some things in my Bonner Moodle course and running into some difficulties.

                     

                    First, I want to delete a couple of previous resources.  I have editing turned on, and I see below each resource a link to update and then other things that say: move, move right, delete, hide, copy to sharing cart.  However, none of the things except update are a link I can activate using my  screen reader.  The others are not described as links by the screen reader nor doews anything happen when I try clicking on them as I do in the screen reader.  I believe that all of these used to be active and accessible links for me.  I thought that perhaps going into update would allow me to do the other things such as deleting but I do not see that as an option there either.

                So, am I hearing you correctly that the 'delete' button does not activate with the screen reader?
                I have changed the theme to 'custom corners' which is a lot simpler and seems to have a different set of icons for the course editing functions. Would you try your screen reader with this theme and do the [Turn editing on] and attempt to Delete a resource? The buttons appear in the order Move, Move right, Update, Delete, Hide, Copy to sharing cart, and every one should be active.

                 

                The other thing I want to do is hide an entire topic that has a number of resources and assignments in it.  Is there a way to hide the entire topic?  Where do I go to do this?

                In the central Column of the Course Outline there are the list of numbered sections. Having [Turn editing on] you should find on the right side of each section three links underneath each other -- 'Show only topic n', 'Highlight this topic as the current topic' and 'Hide' which is the one you want. Click this function will hide the whole topic section and it's contents.
                Does this make sense?

                Hope this helps

                Mark
}}}
=== 
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_mptw_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Modules : Blocks : Course Menu

|!Plugin|!Enabled|!Visible|!Order|
|calendar| x | | 0|
|outline| x | x | 1|
|gradebook| x | x | 2|
|participants| x | x | 3|
|mods| x | x | 4|
|messages| x | x | 5|
There are a number of settings to be configured:
!General System Admin settings:

!!My Moodle display

!!Scales

!!Mods to default teacher role
* allow backup of users -- essential for backing up grades! (all students are on LDAP so no password save problems)
* other changes to default
!! New roles to add
* Librarian
* Course Assistant

!Default Course Appearance
One of the issues to sort out is the default appearance of newly created courses; which blocks, arrangement -- three columns or two, topics or weekly outline.
Out of the box we have a [[three column layout|graphics/course_appearance-default.png]]<<imagebox>> :

|People|''Course Outline''|Latest News|
|Activities|~|Upcoming Events|
|Search Forums|~|Recent Activity|
|Administration|~| |

Suggest replacing this with a [[two column layout|graphics/course_appearance-config.png]]<<imagebox>> with a wider central Course outline:

|Progress Bar|!''Weekly outline''|
|Course Menu|~|
|Quickmail|~|
|[Sharing Cart]|~|
|Administration|~|
|My Courses|~|
|Latest News|~|
{{{$CFG->defaultblocks_override = 'yui_menu,sharing_cart,quickmail,admin,myCourses';}}}

{{{$CFG->defaultblocks_override ='progress,yui_menu,quickmail,sharing_cart,admin,myCourses,news_items';}}}
simon.baird/%%/@gmail.com
Occasionally there are problems with editing the 'summary' to sections of the Course Outline. These are almost always a consequence of Microsoft Word style junk having been pasted in with the old editor (the new editor, TinyMCE) has a 'paste from Word' icon <show> which filters out all the junk). These problems usually are manifested by an inability to make further changes to the Summary 'stick'.
!!The Fix
There is a fix to the problem which will retain the text and strip out all the Word style junk. Unfortunately most of the current formatting gets lost in the process. In the following fixing process you'll use mostly ''keyboard commands'' because Firefox browser does not play well with the cut/paste icons. 
# Having already switched to <edit mode>, open the section Summary that you want to fix.
# Now click //inside// the editor box and press Ctrl-A (Command-A on the Mac) to select all the text. [>img[graphics/paste_from_word-edit-function.png]]
# Hit Ctrl-X (Command-X) to delete the text 
# Now press the ''Paste from Word'' icon. An empty box pops up.
# Hit Ctrl-V (Command-V Mac) to paste the text into this box.
# Click [Insert]. The text will be pasted back into the editing box without the Microsoft crud (click the [HTML] icon if you don't believe me!)
# Now you can apply your desired formatting and [Save changes] will work properly

!!Revised course categories

[img[graphics/course-categories-new.png]]

!! Data to be produced by the script.

|fullname|shortname|category|sortorder|idnumber|format|startdate|numsections|visible|maxbytes|teacher1_role|teacher1_account|

!!Notes
|!Id|!function|!size in database (chars)|
|''fullname''|full name of course (this appears as the filename in the course backup | 254|
|''shortname''|this is the unique course 'handle' | 100|
|''idnumber''|{{{CRN:termcode}}} | 100|
* {{{CRN:termcode}}} -- Course Register Number (generated by banner/registrar) : termcode (year+semester code). Example, in idnumber {{{10210:201110}}} CRN = ''10210'' and termcode = ''201110'' where 2011 is the graduation year and 10 is the fall semester (ie the semester occurring in fall 2010). 
* teacher1_account -- email address of the moodle account for the person taking the teacher role in the created course (//TBA@earlham.edu// is the dummy account name for courses which have teachers still to be announced). The course upload process will fail if the {{{teacher1_account}}} does not exist in the moodle database. Therefore it would be prudent to create a separate list of teacher names which could be used to check their presence in the moodle system.
!!!Fixed parameters:
* Category -- this will be the current semester year combination (eg ''FALL 2011'')
* Format -- default course outline format for all newly created courses (eg ''weeks'')
* startdate -- date of the Sunday before the start of the new semester.
* numsections -- number of sections in the course outline. For weeks, it's usually ''16''
* visible -- ''1'' means the course created is accessible to students (visible -- default). ''0'' means that the course is not accessible to students. This can be used for dummy courses where necessary.
* maxbytes -- maximum upload size in __bytes__ (!). Since the IS moodle systems are constrained to 128Mb upload size this will always be ''134217728''
* teacher1_role -- this will always be ''editingteacher''
One of the hassles we'll have is user complaints about the number of courses listed in ~MyMoodle since by default all last year's courses will be there too.
However, I have found that if the Category containing the courses is hidden, all the courses within it are hidden too, even if they are in sub-categories. Therefore, if a category called 2010-11 containing all last year's courses is hidden then all last year's courses will be hidden too.
//However//, new courses created in a non-hidden category are visible ''and'' when you do an Import the old courses with the user as Teacher will still be visible in the pulldown menu. 
//BUT// there seems to be no way of accessing the 'hidden' course to take a look. Hmmm. 
So it's a case of //either// hide all last year's courses //or// leave them all visible.
See [[Organise 2012 courses]] for solution.
Uploaded Lyn Miller's REL342 Historical Christianity from 0708 Moodle. Tried to do a Restore into the exisitng course. Old course weekly outline, fresh course topics outline. Result : most of the resources got stuck into Topic 0.
It looks like you need to match the Outlines ''exactly'' (# weeks / topics) if you want to restore / import into a current course. Hmmm.
!!Workaround
Restore into ''new'' course. But this does not help with user importing.
!!Update
I tried restoring a Scott Hess course (American Lit -- weekly 16 weeks) ''adding'' it to the existing course. I changed the current course to match and then the process was successful and no screw ups.
!Course upload for Spring 2010
I have edited the perl script for extracting course details from Banner. Major changes:
* //340// courses are now included
* CS courses are now included
* AWPE courses still not included
* Cross listed courses are not included yet -- need to sort out how to handle these.
* termcode = ''201020'' for spring of 2009-2010 academic year
* all the categories have been updated to match current implementation
* radically simplified the output. See Data file format
New program file [[courseDeptExtract_nonTBA_2010.pl|graphics/courseDeptExtract_nonTBA_2010.pl]]
!!!Data file format
|!fullname|!shortname|!category|!sortorder|!idnumber|!format|!startdate|!numsections|!visible|!teacher1_role|!teacher1_account|
|~AAAS114:201020 - Intro. Afr and Afr Amer Studies|~AAAS114:201020|/African American Studies Prog (AAAS)/| 1 |10210:201020|topics|8/23/2009| 8 | 1|editingteacher|faculty@earlham.edu|

I've left 'visible' in so that courses or dummy courses can be hidden by default

My initial edits to the pl code were rather naive and having worked on this with Ben we finally got the format sussed!
|!Course|!Backup done?|!Restore to mtest?|!Comments|!Done|
|0FFC315-2:201110 -- SICE (Japan)| | |emailed Jane T|not needed|
|AAAS114:201110 - Intro. African American Studies| | T |James Logan, Josh Friedberg| D |
|ART115:201110 -- Art Wow!| Y | |Julie May -- suggest changing theme| D |
|ART410:201110 -- Australian Aboriginal Art.| Y | |Julie May| D |
|BIOL242:201110 -- Topics in Neuroscience| | T |Bob Rosenberg. Blank recreate| D |
|BIOL341:201110 -- Cell Physiology| Y | |Bob Rosenberg ''278Mb''|restore gives blank page. File too big|
|BIOL347:201110 -- Anatomy & Physiology II| Y | |Bob Rosenberg| D |
|BIOL480:2011 -- Biology Senior Seminar| Y | |backup ''with'' users | D |
|BONNER:2011 - Bonner Scholars| Y | |restore groups. Jana schroeder| D |
|CLAS360:201110 - CP:Words and Works of Anc. Rome| Y | |Susan Wise| D |
|COMM-NSF:2011 Natural Science Facilities| Y | |restore with users|restore without users. Fix|
|ECON101:201110 - Introduction to Macroeconomics| | T |Jon Diskin blank recreate (add Majid Zakout)| D |
|ECON201:201110 - Survey of Economic Thought| Y | |Jon Diskin| D |
|ECON345:201110 - Urban Political Economy| | T |blank recreate. JD| D |
|ENG150-1:201110 - The Invention of America| Y | |Scott Hess. Lots of Word crap| D |
|ENG355:201110 - Romanticism| Y | |Scott Hess.Word issues. ''120Mb''| D |
|ENG488:201110 - Senior Capstone Experience| Y | |Hesssc. ''147Mb''| To upload |
|INTD200:201110 -- Contemporary Global Issues| Y | |Amy Shrock | D |
|INTD201:201110 -- Intermediate Academic Writing| Y | |backup with Amy Shrock.| D |
|INTD202:201110 -- Advanced Academic Writing| Y | |Christie Joy| not there |
|INTD203:201110 -- Perspectives on American Life| Y | |Amy Shrock| D |
|MUS443:201110 -- Music of Vienna| Y | |backup on Rublev as well.| D |
|Oak Ridge Science Semester 2010| Y | |Lori Watson.This goes onto //MoodleOpen//| N |
|PHIL250:201110 -- Rationalism and Empiricism| | T |Marya -- on mtest| OK |
|PHIL363:201110 - Bioethics| | T |Marya -- on mtest| OK |
|POLS105:201110 - Intro to Comparative Politics| Y | |Jennifer Seeley. No Feedback. | D |
|POLS339:201110 -- Approaching Political Puzzles| Y | |Seeley. Word problems.| D |
|POLS342:201110 -- National Public Policy| Y | |Use 2010 backup. Dougb, Callie Thompson,Lyn Thomas.| D |
|POLS351:201110 - Democracy and Democratization| Y | |Jennifer Seeley| D |
|PSYC115:201110 -- Intro to Psychology| Y | |Rachel Reavis| D |
|PSYC351:201110 -- Social Relationships| Y | |backup with teacher: Rachel Reavis| D |
|REL150-SECTION:201110 - Sex and Gender in Christian Ethics| | T |Catherine Griffith| OK|
|REL165:201110 - New Testament| | T |Already there Catherine Griffith| OK|
|WMNS375:201110 -- Feminist Theories| | T |already on mtest. Marya| OK|
|TOM:2011 -- Teachers on Moodle| | T |already on mtest| OK|
The Moodle world has been rocked by [[A Critical Moodle LMS Security Vulnerability — All Versions|http://educhalk.org/blog/a-critical-moodle-lms-security-vulnerability-all-versions/]] which was exposed on figaro's [[educhalk|http://educhalk.org/blog/]] technology tutorial blog. Besides the fierce arguments there (and nicely defused by Joe Murphy I may say) we have comments from Clamp [[here|http://redmine.clamp-it.org/boards/4/topics/show/273]] and at http://redmine.clamp-it.org/wiki/development/Moodle_197_Security_Announcement

It should be noted that since Earlham's moodle uses LDAP authentication with passwords not cached in the database under these circumstances no password information is saved.

+++[interim workarounds]>
!WHAT YOU CAN DO RIGHT NOW

Your site may be vulnerable if you have any users with full backup rights on your site that might have a reason to try and crack your
admin account, if they saw the published exploit. Here are some things you can do to improve security on your site right now:

# Disable backup functionality for teacher roles. You can re-enable backups later with the new Moodle releases, because the permissions for saving user data will be separate from the permission to create backups.
** HOW: Admin > Users > Permissions > Define roles: Edit the teacher roles and change the capability for moodle/site:backup to "PROHIBIT".
# Turn on site-wide password salting (in all versions of Moodle since 1.6), this adds information to the md5 strings to make them practically impossible to reverse (next time they log in or change their password). Note that this will affect your ability to restore backups containing user data on foreign Moodle sites - the admin of the destination site needs to include your salt in their config.php for user creation to work.
** HOW: Add a line like this to your config.php (for the best security, there is intentionally no way to set this in the Moodle interface) {{{$CFG->passwordsaltmain = 'some long random string here with lots of characters';}}}
# Turn on Password Policy for your site, this forces people to use stronger passwords.
** HOW: Admin > Security > Site policies > passwordpolicy
# Change passwords for all admins. Now that you turned Password Policy on you'll be forced to choose a stronger one. :) It also makes any old backups useless for the purposes of the exploit. 
** HOW: Edit your user profile directly, for other admins you can edit their profile and check this box: "Force password change". They'llbe forced to change it when they next log in.
=== 
Since 99% of all accounts on EIS moodle are LDAP and since we have this set to not cache then no password info is ever dumped. Also, the default backup procedure is ''not'' to include user information since all ew're interested in is the contents of the course. Thus:
# Disable backup functionality for teacher roles. //We decided not to do this//
# Site-wide password salting. //Aaron is going to implement the CFG statement in config.php//
# Yes
# change admin password. ?Can I change admin username as well? I don't think so.
<<<
;Check XML File during cron: 
:With this option enabled, each time cron is called, the module will check the XML File to see if its modification date has changed since the last time it was processed. If it has, then it will processed.
;Check XML Folder during cron: 
:With this option enabled, each time cron is called, the module with check the XML Folder for a file called 'start'. If this file exists, it will be removed and replaced by a file called 'processing' and processing of the directory contents will start. Upon completion of extract processing, the 'processing' file will be removed, and a file called 'done' will be created.
;Unhide Courses: 
:With this option selected, each night around midnight, the module will automatically unhide and Banner/LMB courses that start within the number of days specified in 'Unhide this many days before course start'. For example, if this option is selected, 'Unhide this many days before course start' is set to 7, and there is a course that starts on 2009-06-14, then it will automatically be made visible on the morning of 2009-06-07. The start date of the course is determined by the timeframe->begin date supplied with the course by Banner/LMB
;Unhide this many days before course start: 
:This is the number of days before the start of a course to unhide it. Set to 0 for the course to unhide on the day it starts.
<<<
The 'cron' referred to here is the //moodle cron// I think. What this means is that simply by checking option ''Check XML File during cron:'' you can run the LMB import automatically every time the file is updated. Massively cool. So no special fooling about required.
Plus, //if// courses are hidden then you can unhide them automatically n days before the semester starts
Talking to Greg Mahler about how he colorizes things in the course outline made me think that this could be done easier with some custom styles.
Here are some resources to help:
* [[Moodle forum Themes |http://moodle.org/mod/forum/view.php?id=46]]
* [[Themes FAQ (doc)|http://docs.moodle.org/en/Themes_FAQ]]
* [[CSS FAQ|http://docs.moodle.org/en/CSS_FAQ]]
* [[Understanding Moodle Themes|http://learn.open.ac.uk/mod/oublog/view.php?user=155976]] blog post by Christopher Douce Open University and [[tagged themes|http://learn.open.ac.uk/mod/oublog/view.php?user=155976&tag=themes]]

{{ts{23/02/11 15:47}}}
Here's the current data layout:

|!fullname|!shortname|!category|!sortorder|!idnumber|!format|!startdate|!numsections|
|0FFC301-0:201210-Border Studies Program|0FFC301-0:201210| FALL 2011 | 0 |10441:201210|weeks|8/28/2011| 16 |

|!visible|!maxbytes|!teacher1_role|!teacher1_account|
| 1 |134217728|editingteacher| TBA |

!!Change
# Shortname. 
** Remove the section number if = 0, so single courses with 1 section do not have "-0"
** Change the date from the {{{termcode}}} format to one which matches the category. So why not use {{{FALL2011}}}, {{{SPRING2012}}} , {{{MAY2010}}}, etc.
** shortname now becomes {{{<department><banner id>[-<section number>]:<category name>}}} for example -- ''0FFC301:FALL2011''
# Fullname is still <shortname><banner description>
# let's try dropping the {{{sortorder}}} as superfluous.
In [[Upload single and advanced shows date for each file|http://moodle.org/mod/forum/discuss.php?d=142067]] :
<<<
Hello everyone, we had been thinking about the possibility to know the sent
date of every files uploaded trough the assignment module. Using "Upload single file" this could be a very important control information for students. Also using "Advanced uploading" teacher could have the posibility to know when each file has been sent and not only the last update.

All this thing as a way to reduce the posibility to make a mistake when uploading new files (students) and reviewing or grading drafts and final sents (teacher).

There is a possible solution to this feature that we are implementing in our moodle sites and could be nice to see it in future implementations of moodle. I describe the code and lines that has to be replaced.
{{{
$filetimemodified = userdate(filemtime($CFG->dataroot."/$filearea/$file"), get_string("strftimedatetime"));

$output .= '<br /><a href="'.$ffurl.'" ><img class="icon" src="'.$CFG->pixpath.'/f/'.$icon.'" alt="'.$icon.'" />'.$file.'</a>&nbsp;'.$filetimemodified;
}}}

;Moodle 1.9.7
:mod/assigment/type/upload/assignment.class.php: replace lines 310, 369, 425
:mod/assignmet/lib.php replace line 1692

Attached to this post is a screen that shows how the [["Advanced upload" grade view|http://moodle.org/file.php/5/moddata/forum/117/620469/assignment.png]]<<imagebox>> looks after this change.
<<<

!!Default Config settings
{{ts{5/07/11 12:49}}}
in {{{ref-12/config.php}}}
# Add course blocks : {{{$CFG->defaultblocks_override ='yui_menu,quickmail,sharing_cart,admin,myCourses,news_items:';}}} 
** change from last year -- remove Progress Bar, "progress"
** this was already done so I just removed "progress"
# make sure restore user checks are 'relaxed' +++[details:]>
// Modify the restore process in order to force the "user checks" to assume
// that the backup originated from a different site, so detection of matching
// users is performed with different (more "relaxed") rules. Note that this is
// only useful if the backup file has been created using Moodle < 1.9.4 and the
// site has been rebuilt from scratch using backup files (not the best way btw).
// If you obtain user conflicts on restore, rather than enabling this setting
// permanently, try restoring the backup on a different site, back it up again
// and then restore on the target server.
{{{    $CFG->forcedifferentsitecheckingusersonrestore = true;}}}
=== 
# repeat for chemix-12
Use blue version of Anomaly as default:
* Now copy {{{LAE-199/theme/anomaly]$ cp styles_blue.css styles_select.css}}}
* --add colour styles to make [[course format Topcoll|Topcoll -- new course format]] [[look good|Anomaly + topcoll]]-- see [[Restyle Topcoll color style]] for better idea
* copy EIS favicon into place {{{public_html/moo-p97/theme/anomaly]$ cp favicon.ico ~/public_html/LAE-199/theme/anomaly}}}
? create styles for use with courses? Demo on Dan's course.
Blue background in Anomaly is {{{ #688AAD }}}

Workaround for [[Font scaling in New School Themes]] problem especially with Labels & TopColl course format:
* make all body text explicitly 12 pt font size (font size=small)
[[Updates]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
<div class='header' macro='gradient vert #390108 #900'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<!--
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
-->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
</div>
<!--
<div id='mainMenu'>
<div refresh='content' tiddler='MainMenu'></div>
</div>
-->
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
 <div id='sidebarTabs' refresh='macro' force='true' macro='slider chkSideBarTabs SideBarTabs "index »" "display lists of tiddlers"'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
/*{{{*/
http://tiddlystyles.com/#theme:DevFire
Author: Clint Checketts
/*}}}*/
/*{{{*/
/***
|StyleSheet|DevFireStyleSheet|
|PageTemplate|DevFirePageTemplate|
***/
body {
background: #000;
}

#contentWrapper{
background: #000;
}
#displayArea {margin:1em 17em 0em 4em;}
/*}}}*/
/***
!Link styles /% ============================================================= %/
***/
/*{{{*/
a,
a.button,
#mainMenu a.button,
#sidebarOptions .sliderPanel a{
 color: #ffbf00;
 border: 0;
 background: transparent;
}

a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover
#sidebarOptions .sliderPanel a:active{
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#displayArea .button.highlight{
 color: #ffbf00;
 background: #4c4c4c;
}
/*}}}*/
/***
!Header styles /% ============================================================= %/
***/
/*{{{*/
.header{
 border-bottom: 2px solid #ffbf00;
 color: #fff;
}

.headerForeground a {
 color: #fff;
}

.header a:hover {
 border-bottom: 1px dashed #fff;
}
/*}}}*/
/***
!Main menu styles /% ============================================================= %/
***/
/*{{{*/
#mainMenu {color: #fff;}
#mainMenu h1{
 font-size: 1.1em;
}
#mainMenu li,#mainMenu ul{
 list-style: none;
 margin: 0;
 padding: 0;
}
/*}}}*/
/***
!Sidebar styles /% ============================================================= %/
***/
/*{{{*/
#sidebar {
 right: 0;
 color: #fff;
 border: 2px solid #ffbf00;
 border-width: 0 0 2px 2px;
}
#sidebarOptions {
 background-color: #4c4c4c;
 padding: 0;
}

#sidebarOptions a{
 margin: 0;
 color: #ffbf00;
 border: 0;
}
#sidebarOptions a:hover {
 color: #4c4c4c;
 background-color: #ffbf00;

}

#sidebarOptions a:active {
 color: #ffbf00;
 background-color: transparent;
}

#sidebarOptions .sliderPanel {
 background-color: #333;
 margin: 0;
}

#sidebarTabs {background-color: #4c4c4c;}
#sidebarTabs .tabSelected {
 padding: 3px 3px;
 cursor: default;
 color: #ffbf00;
 background-color: #666;
}
#sidebarTabs .tabUnselected {
 color: #ffbf00;
 background-color: #5f5f5f;
 padding: 0 4px;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
 background-color: #666;
}

.listTitle{color: #FFF;}
#sidebarTabs .tabContents a{
 color: #ffbf00;
}

#sidebarTabs .tabContents a:hover{
 color: #ff7f00;
 background: transparent;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents{
 color: #ffbf00;
 background: #4c4c4c;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #ffbf00;
 background: #5f5f5f;
}

.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}
.tab.tabUnselected {background-color: #666;}
.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}
.tabContents {
 background-color: #4c4c4c;
 border: 0;
}
.tabContents .tabContents{background: #666;}
.tabContents .tabSelected{background: #666;}
.tabContents .tabUnselected{background: #5f5f5f;}
.tabContents .tab:hover{background: #666;}
/*}}}*/
/***
!Message area styles /% ============================================================= %/
***/
/*{{{*/
#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}
#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}
#messageArea a:hover {color: #ff7f00;}
#messageArea a:active {color: #ff7f00;}
#messageArea .messageToolbar a{
 border: 1px solid #ffbf00;
 background: #4c4c4c;
}
/*}}}*/
/***
!Popup styles /% ============================================================= %/
***/
/*{{{*/
.popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}
.popup li.disabled{color: #fff;}
.popup a {color: #ffbf00; }
.popup a:hover { background: transparent; color: #ff7f00; border: 0;}
.popup hr {color: #ffbf00; background: #ffbf00;}
/*}}}*/
/***
!Tiddler Display styles /% ============================================================= %/
***/
/*{{{*/
.title{color: #fff;}
h1, h2, h3, h4, h5 {
 color: #fff;
 background-color: transparent;
 border-bottom: 1px solid #333;
}

.subtitle{
 color: #666;
}

.viewer {color: #fff; }

.viewer table{background: #666; color: #fff;}

.viewer th {background-color: #996; color: #fff;}

.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}

.viewer hr {color: #666;}

.tiddler .button {color: #4c4c4c;}
.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}
.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}

.toolbar {
 color: #4c4c4c;
}

.toolbar a.button,
.toolbar a.button:hover,
.toolbar a.button:active,
.editorFooter a{
 border: 0;
}

.footer {
 color: #ddd;
}

.selected .footer {
 color: #888;
}

.highlight, .marked {
 color: #000;
 background-color: #ffe72f;
}
.editorFooter {
 color: #aaa;
}

.tab{
-moz-border-radius-topleft: 3px;
-moz-border-radius-topright: 3px;
}

.tagging,
.tagged{
 background: #4c4c4c;
 border: 1px solid #4c4c4c; 
}

.selected .tagging,
.selected .tagged{
 background-color: #333;
 border: 1px solid #ffbf00;
}

.tagging .listTitle,
.tagged .listTitle{
 color: #fff;
}

.tagging .button,
.tagged .button{
 color: #ffbf00;
 border: 0;
 padding: 0;
}

.tagging .button:hover,
.tagged .button:hover{
background: transparent;
}

.selected .isTag .tagging.simple,
.selected .tagged.simple,
.isTag .tagging.simple,
.tagged.simple {
 float: none;
 display: inline;
 border: 0;
 background: transparent;
 color: #fff;
 margin: 0;
}

.cascade {
 background: #4c4c4c;
 color: #ddd;
 border: 1px solid #ffbf00;
}
/*}}}*/
{{ts{29/09/10 11:17}}}
Dan Graves and Marc Benamou wanted direct guest access to the Live Music in Richmond site which I just restore to EMC. Here's the URL:

https://emc.earlham.edu:3443/course/view.php?id=10&username=guest

Note the {{{&username=guest}}} which gets you in.
/***
|Name|DisableWikiLinksPlugin|
|Source|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
!!!!!Usage
<<<
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.  You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.  

Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<<
!!!!!Configuration
<<<
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
<<<
!!!!!Revisions
<<<
2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).  
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox 1.5.0.1 crash bug when referencing globals
2005.12.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};

if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].coreHandler=config.formatters[i].handler;
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
		// check for excluded Tiddler
		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// check for specific excluded wiki words
		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);
		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not enabled, just do standard WikiWord link formatting
		if (!config.options.chkDisableWikiLinks)
			return this.coreHandler(w);
		// just return text without linking
		w.outputText(w.output,w.matchStart+skip,w.nextMatch)
	}
}

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
{
	// if all automatic links are not disabled, just return results from core function
	if (!config.options.chkDisableWikiLinks)
		return this.coreAutoLinkWikiWords.apply(this,arguments);
	return false;
}

Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	this.disableWikiLinks_changed.apply(this,arguments);
	// remove excluded wiki words from links array
	var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
	if (t.length) for (var i=0; i<t.length; i++)
		if (this.links.contains(t[i]))
			this.links.splice(this.links.indexOf(t[i]),1);
};
//}}}
* Using MyCourses
** switching it on
** opening and closing categories
* Progress Bar
** why it's useful
** limitations (space)
** selecting key resources to read
** tracking progress via Access logs
* Assignments Redux
# new Course Request interface. Use a Feedback form inside Moodle. +++[example]
<<tiddler [[Documentation needed##McMurray]]>>
=== 
# Browser popups
# Moodle tutorials
# session limits
# how to enroll in a course

/%
!McMurray
Here's what McMurray (ATW) is doing:
Name :
Email:

What type of course?  Existing Course  New Course (If NEW Course: select course format:  Top Menu   Left Menu   Weekly   Topic )

In order to move your existing course content, we need the following information:

If existing course, semester you taught: Year you taught course:

.Name of Course:

What is the course number? (Ex COMM131001) Section Number

    Does this course have multiple sections? 	Yes No
    Do you want to combine sections into 1 course? 	Yes No


    Select Course Category: Select when you will teach this course.

     

    Other information you need to give about your course:(Example, do you want separate course sections or combine course sections into one course?) 
%/
This software is opensource and will always be free. However donations will encourage the continued enhancement and maintenance of MPTW (and also MonkeyGTD). Please use the link below if you would like to donate. Thank you!
<html><form target="_blank" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="simon.baird@gmail.com">
<input type="hidden" name="item_name" value="Support and appreciation for MonkeyPirateTiddlyWiki. Thanks!">
<input type="hidden" name="item_number" value="">
<input type="hidden" name="no_shipping" value="0">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="tax" value="0">
<input type="hidden" name="bn" value="PP-DonationsBF">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">
</form></html>
Right click on the following download link and select "Save link as..." or "Save target as...". Save the downloaded file on your desktop (or anywhere you like) then double click it to start using it.

{{downloadLink{
[[Download|http://mptw.tiddlyspot.com/empty.html]]
}}}

!!Updating from a 2.3 or higher MPTW
(Note, you can find your MPTW version number using {{{<<mptwVersion>>}}}. Current latest version is <<mptwVersion>>).
* Click backstage, import
* Select MptwUpgradeURL from predefined feeds and click open
* Tick all by clicking the checkbox in the column heading
* Untick "Keep these tiddlers linked..."
* Click import
* Save and reload

!!Updating from an older MPTW
* Since there's lots of changes you need to download a fresh MPTW using the above link then import your content. Try not to import any of the MPTW plugins from your old file. There is a thread [[here|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/93b4c6edd3b6cd16]] that includes more details. (If you're not using Tiddlyspot then just skip the first part about downloading your site).
!!Ahmad Alqassas
exploration of {{{moodleDB-peace-jan-11.sql}}}
!!!1. The latest Banner/LMB import
Table: mdl_lmb_people "People as reported by LMB/Banner"
{{{
id 	sourcedid 	sourcedidsource 	fullname 	familyname 	givenname 	email 	        username
2732 	863521 	Earlham College INB Banner 	Ahmad Alqassas 	Alqassas 	Ahmad 	alqasah@earlham.edu 	alqasah
}}}
Notice the username associated with the sourceid
!!!User table
Table : mdl_user "One record for each person"
{{{
Id      auth  username    password   id   		firstname 	  Lastname      	email
3127 	ldap 	 aalqassa 	  		 863521 	Ahmad 	  Alqassas 		alqasah@earlham.edu
3128 	ldap 	 alqasah 	 not cached 		Ahmad 	  Alqassas 		alqasah@earlham.edu
}}}
There are two records for this person and the id referred to in {{{mdl_lmb_people}}} is now associated with username {{{aalqassa}}} 
!!!Course enrolments
Table: mdl_lmb_enrolments "Enrolments from LMB/Banner"
|!id|!coursesourcedid|!	personsourcedid|!term|!role|
|8285 	|11698.201210 	        |863521 |201210 	| 2 |
|9002 	|21732.201220 	|863521 	|201220 |	2 |
|9004 	|21735.201220 	|863521 	|201220 |	2 |
|9005 	|21736.201220 	|863521 	|201220 |	2 |

Personid 863521 (username aalqassa) is enrolled as teacher in three courses this semester (201220) and one course last semester (201210).

!How to fix
Ahmad currently logs in as {{{alqasah}}}. Short of database hacking I don't see how we can switch the id in {{{mdl_user}}} from alqassa to alqasah. And if we did this I'm not sure whether this would fix the problem -- but probably yes.
!!FIX
Brute force.
# Remove username from courses
** [[CLL340|https://moodle.earlham.edu/course/view.php?id=2071]]
** [[ARBC202|https://moodle.earlham.edu/course/view.php?id=2073]]
** [[ARBC302|https://moodle.earlham.edu/course/view.php?id=2074]]
** [[ARBC301|https://moodle.earlham.edu/course/view.php?id=1197]]
# Now delete the erroneous user account
** search for username=aalqassa and delete
# Add the {{{alqasah}}} username account back as teachers to the above courses
{{ts{2/04/12 09:52}}}
There are ''two'' accounts for Mary St Romain:
|!Name|!Email|!Location|!Last access|
|Mary St. Romain|	eest.ro10@earlham.edu	|		|24 days 16 hours|
|Mary St. Romain|	eestrom10@earlham.edu	|Austin	United States|1 hour 55 mins|
I suspect that //eest.ro10// was a temporary username.
!!Problems arising
|!//eestrom10// courses|!//eest.ro10// courses|
|ARBC102-0:201220 — Basic Arabic II|ARBC102-0:201220 — Basic Arabic II|
|HIST.ENST364:201220 -- CP:Westward Movement|HIST.ENST364:201220 -- CP:Westward Movement|
|ENST.MGMT.POLS347:201220 -- Comp Environmental Policy| ENST.MGMT.POLS347:201220 -- Comp Environmental Policy|
|ENST.PSYC371:201220 -- Psychology of Sustainability|ENST.PSYC371:201220 -- Psychology of Sustainability|
|ENST280-0:201220 — Envi. Colloquium Seminar I|ENST280-0:201220 — Envi. Colloquium Seminar I|
||BIOL111:201210 — Ecological Biology|
||CLAS150:201110 - Trojan War and History|
||EDUC210:201110 - Outdoor Education|
||MUS101:201110 -- Applied Voice|
||PHYS115:201110 - Descriptive Astronomy|
||POLS107:201120 - Introduction to International Relations|
||BIOL111-5:201210 — Ecological Biology|
||PSYC001:201210 -- Psychology Research|

* The fact that there are two users with the name 'Mary St. Romain' enrolled in POLS347:201220 -- Comp Environmental Policy has caused problems because grades have been given to the 'wrong' user account.
* I don't understand why all of her fall courses are only associated with //eest.ro10// account
* The student can only login to 'eestrom10' and so she cannot access any of her Fall courses.

Also see [[Duplicate user]]
{{{
<h1>Economic Downturn</h1>
<table border="0" cellspacing="0" cellpadding="4" rules="all">
  <tr>
    <th width="200">Musician</th>
    <th width="200">Venue</th>
    <th width="400">Effects of economic downturn</th>
    <th width="150">Interviewer</th>
  </tr>
  <tr>
    <td width="200">[[Musician name]]</td>
    <td width="200">[[Venue name]]</td>
    <td width="400" class="small_text">[[Economic downturn]]</td>
    <td width="150">[[Interviewer]]</td>
  </tr>
</table>
}}}
!!Output
Ordered by Musician (descending)

[img[graphics/database_preset_view-economic.png]]
!!Viewing Biology courses on Moodle
For Senior Comprehensive Exams it's useful to be able to access the contents of courses that you have taken over the years and since many, if not most, of these are in Moodle it would be nice to get at them. Having contacted the Moodle Czar (Markp) or a member of the Moodle Sobor (Wes Miller, Amy Bryant) you will be set up with viewing capabilities for courses that are currently hidden from your view.
* For graduation years 2011 & 2012 (located on https://moodle.earlham.edu), simply open the myCourses block and navigate to the Biology department. You'll see all the courses you enrolled in.
* [>img[http://legacy.earlham.edu/~markp/millmiss/graphics/myCourses08-10.png]]For years 2009 & 2010 you'll need to login to https://moodle08-10.earlham.edu. Note that you can only do this //using a computer on campus with a wired network connection// (there is no access to the site via ECS Wireless or from off campus).
** Opening your myCourses block you'll see courses you took in 2009-2010 at the top of the list and //all Biology courses from 2008-09// listed in the 2009/Biology category. Pick the appropriate courses from this list.

Basically this makes file handling and resource creating a lot simpler:
# Upload a bunch of files in a single shot.
# Creates a resource for each file uploaded.
[>img[graphics/add-files_config.png]]
# Select files to upload: 
# Click [Save and return]
# [[Files are uploaded|graphics/add-files_upload-progress.png]]<<imagebox>>
# [[Click OK to finish|graphics/add-files_upload-done.png]]<<imagebox>>
<html>
<br clear="all">
</html>

+++[Suggested Enhancements:]
# Can there be an option to NOT display the files when uploaded(so they don't appear on the course but just sit on the server)?
# Not to display the file extension i.e. 'Uploadedfile.doc'?
=== 
* download from [[modules page|http://moodle.org/mod/data/view.php?d=13&rid=3546&filter=1]]. There does not seem to be a CVS version.
* Get prerelease version from [[here|http://moodle.org/mod/forum/discuss.php?d=143877&parent=639907]] version 2010031700 (22-March-2010) [already downloaded to Rublev]
* [[Discussion|http://moodle.org/mod/forum/discuss.php?d=145451 ]]. This has been in development for about a year and looks quite mature
!!Install and test
* Test on [[Clamp LAE test moodle|http://rublev.lly.earlham.edu/~markp/clamp-LAE/]]. Use the 'prerelease alpha' version.
* +++[Installation]>
!!!Moodle Requirements
Moodle 1.9.7+ (tested with 1.9.7, might work with 1.9+)
!!!Installation Instructions
To install, drop the entire contents of the "package" folder into your "moodle" root folder.
* Note - do not copy package to moodle/package, copy the contents of package to moodle, so that you get
moodle/lib/gtlib_yui and moodle/mod/enhancedfile
Then click "notifications" under your site administration block.
{{{
/markp/2010-test-mods/moodle_enhanced_file_mod/package/lib]$ cp -r gtlib_yui /usr/home/markp/public_html/clamp-LAE/lib
/markp/2010-test-mods/moodle_enhanced_file_mod/package/mod]$ cp -r enhancedfile /usr/home/markp/public_html/clamp-LAE/mod
}}}
* Enhancedfile tables set up correctly
=== 
[[Enhanced File Module : problems]]
* new version by 'citricity' [[download link|http://www.citricity.com/moodlegpl/enhanced_file_mod/moodle_enhanced_file_mod.zip]]
* new version {{{$module->version  = 2011051900;}}} with +++[lots of new changes]>
 * Change log
 * 2011051900
 * - Fixed bug with multifile.js encodeURI not coping with ampersands, now use encodeURIComponent
 *
 * 2011020800
 * - Fixed bug with associated library gtlib - now requires gtlib 2011020800+
 *
 * 2011011200
 * - Ability to turn off HTML5 uploading for Flash
 * - Max execution time of 1 hour for uploading files
 *
 * 2010122100
 * - Enhancement from Amanda Doughty - respect visibility setting
 *
 * 2010111600
 * - Supports HTML5 file uploading (look ma, no Flash!)
 * - Supports HTML5 thumbnailing of image files (see image BEFORE its uploaded)
 * - Ability to change the name of the file resource before its uploaded
 * - Ability to upload collection of files as a directory resource
 * - Fixed manage file browser issue with background colour
 * - Fixed issue with non latin (e.g. Japanese) characters in file names
 * - Fixed issue with quotes in file names
=== 
* --copy over [[modified prompts|Enhanced File upload : change prompts]] from old install--. There are other diffs, so redo edits in {{{code-moo12/mods/moodle_enhanced_file_mod/package/mod/enhancedfile/lang/en_utf8/enhancedfile.php}}}. Done {{ts{24/06/11 12:50}}}
* install by copying files from package/mod //and// {{{package/lib/gtlib_yui}}} -- @@new@@ +++[done]>
{{{
/public_html/ref-12/mod]$ cp -r /usr/home/markp/code-moo12/mods/moodle_enhanced_file_mod/package/mod/enhancedfile .
/public_html/ref-12/lib]$ cp -r /usr/home/markp/code-moo12/mods/moodle_enhanced_file_mod/package/lib/gtlib_yui .
}}}
=== 
Many folks have reported these same issues:
# Upload progress bar remains grey -- nothing gets uploaded
# Hit [Save] and get an [[error window|graphics/enhanced_file_error.png]]<<imagebox>>
Use Tools -> Error console in Firefox browser. 
* +++[Errors]>
!! Error 1
Error: not well-formed
Source File: {{{http://rublev.lly.earlham.edu/~markp/clamp-LAE/mod/enhancedfile/ajax/makeflashuploadkeys.php}}}
Line: 1, Column: 1
Source Code: {{{ {"security_pass":false,"security_checks":[{"mode":1001,"success":true,"messages":null,"checktype":"valid_login","checkval":""},{"mode":1001,"success":false,"messages":{"critical_error":"[[enhancedfile:multiupload]]"},"checktype":"has_capability","checkval":"mod\/enhancedfile:multiupload"}],"data":null} }}}

{{{ {"security_pass":false,"security_checks":[{"mode":1001,"success":false,"messages":{"critical_error":"You are not logged in."},"checktype":"valid_login","checkval":""}],"data":null} }}}
----
!!Error 2
Error: junk after document element
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/mod/enhancedfile/ajax/checkresources.php
Line: 2, Column: 1
Source Code:
{{{<b>Notice</b>:  Undefined offset:  1 in <b>/usr/home/markp/public_html/clamp-LAE/mod/enhancedfile/ajax/checkresources.php</b> on line <b>62</b><br />}}}
{{{ {"responseok":true} }}}
=== 
* +++[Warnings]>
!! 1
Warning: Expected ':' but found 'undefined'.  Declaration dropped.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/course/modedit.php?add=enhancedfile&type=&course=2&section=2&return=0
Line: 0
----
Warning: Error in parsing value for 'filter'.  Declaration dropped.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/course/modedit.php?add=enhancedfile&type=&course=2&section=2&return=0
Line: 0
!! 2
Warning: Error in parsing value for 'white-space'.  Declaration dropped.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/lib/gtlib_yui/widgets/dialog/themes/standard/dialog.css
Line: 281
----
Warning: Error in parsing value for 'filter'.  Declaration dropped.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/lib/gtlib_yui/widgets/dialog/themes/standard/dialog.css
Line: 191
!! 3
Warning: Expected declaration but found '*'.  Skipped to next declaration.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/lib/yui/container/assets/skins/sam/container-skin.css
Line: 241 
and same warning on lines 131, 119, 118, 117, 116, 62, 46, 45, 31, 18, 11
!! 4
Warning: Expected declaration but found '*'.  Skipped to next declaration.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/lib/yui/container/assets/skins/sam/container.css
Line: 7 -- same warning repeated 13 times
!! 5
Warning: Expected declaration but found '*'.  Skipped to next declaration.
Source File: http://rublev.lly.earlham.edu/~markp/clamp-LAE/lib/yui/assets/skins/sam/datatable.css
Line: 7 -- repeated 4 times
=== 
!!Environment:
http://rublev.lly.earlham.edu/~markp/clamp-LAE
; Server:
: php 5.2.8
: ~MySQL 5.0.75
;Browser:
: Firefox 3.5.3
: Shockwave Flash 10.0.45.2
; Moodle :
: 1.9.7+ with {{{lib/yui}}} installed for other functions
!! Environment 2
http://rublev.lly.earlham.edu/~markp/98-moot
Setup exactly the same except:
; Moodle :
: vanilla 1.9.8 with no other YUI functionality
!!!Result
The Resource 'Add Files' works as advertised with no warnings or errors in the Firefox error console

!Conclusion
Enhanced File Module not currently compatible with other YUI type functionality.
Posted contents of [[Enhanced File Module : problems]] to discussion [[Re: Enhanced File Resource - New Version|http://moodle.org/mod/forum/discuss.php?d=145451&parent=650139]] in Contributed Modules and Plugins forum on moodle.org. I got +++[this email]>
Hi Mark

What do you mean by "1.9.7+ with lib/yui installed for other functions"?

Do you mean that the YUI distro in your Moodle has been adapted for a specific requirement?
We have run the module with 1.9.7 and it has worked fine- we have never changed the yui folder.

Thanks for the firebug report.
For Error #2 I need to see what is actually being posted through to "checkresources.php" for the post param 'filelist'.

Thanks for helping me make this module better

Guy
===  from the author, Guy Thomas.
* ''However'', when I tested the module again I found no problems. +++[My response to Guy]>
Now comes the really embarrassing part. I had added a module called MediaBird study notes but this was not working. So I removed it. Now of course the Enhanced File Resource is working properly. What I will do however is to reinstall the other module and see if I can generate the errors again. A replicated error is half way to being fixed :-) I probably won't be able to get to this today so it'll be Monday sometime.

> Thanks for helping me make this module better

This single module would bring down a multitude of hallelujahs on me if it were to be operational next year! 
=== 
* and his +++[enlightening reply]>
The enhanced file resource module simply loads up the distributed YUI files that exist in the Moodle folder (with the exception of one file which doesn't work with the Moodle distribution - the
Also, when the module page is loaded no other modules should be injecting javascript or YUI stuff into the page as modules only load javascript when they are in add/edit mode.

If you are using a non standard version of Moodle with hacks - i.e. the clamp-it distribution, then there may be some conflicting javascript loading.
Also, I don't know if the tiny mce javascript will be loaded each time you add/edit a module resource which means there could be a conflict there.
===  about the use of YUI.
!!To Do
* install the other YUI based stuff -- ie MyMoodle and CourseMenu. Check each time that they work with Enhanced File Module.
I was not happy with the [[default prompts used|graphics/enhanced-file-upload-textstrings.png]]<<imagebox>>
So in {{{mod/enhancedfile/lang/en_utf8/enhancedfile.php}}} I changed the following strings from :
{{{
$string['modulenameplural']='Enhanced File';
$string['modulename']='File / Files';
$string['modulenameadd']='Add File or Files';
}}}
To:
{{{
$string['modulenameplural']='Enhanced Upload';
$string['modulename']='File upload (enhanced)';
$string['modulenameadd']='File upload (enhanced)';
}}}
Which now is much better I think, [[screenshot|graphics/enhanced-file-upload-textnew.png]]<<imagebox>>
And the pulldown is now much better as well: 
[img[graphics/enhanced-file-upload-pulldown.png]]

[[Enhanced User administration (block)|http://moodle.org/mod/data/view.php?d=13&rid=893&filter=1]] -- [[download for 1.9|http://www.spaziofad.it/file.php/1/useradminblockdev/useradmin19.zip]] may be useful for EMC.. Download and test.

[img[http://moodle.org/pluginfile.php/108/mod_data/content/8983/screenshot18.jpg]]

Useful features for creating new users:
<<<
!!!USER UPLOAD FROM FILE
May create or update users uploading from a CSV file, with some additional features compared to standard "Upload users".
* When creating a new user checks for duplicate username and e-mail
* Checks if e-mail address is valid (just syntactically)
* Existing users may be updated, using username as "key" to find users
* Username "renaming" may be enabled
* Assign roles and groups in Courses context (only) when uploading new users or updating
* Password may be explicitly specified (no password policy check, yet)
* Alternatively, password may be randomly generated for each user. In this case ''automatically send an e-mail with credentials to each newly created user.''
<<<

{{ts{10/11/10 15:37}}} Test in moo-2011t
!!Install
# Get latest code {{{2010-test-mods $ wget http://www.ossett.wakefield.sch.uk/ossweb/index.php/file/get/moodlegpl/head/moodle_enhanced_file_mod.zip }}}
# Tidy up old versions and delete where necessary
# New version is dated {{{    $module->version  = 2010070800;  // The current module version (Date: YYYYMMDDXX)
    $module->requires = 2007020200;  // Requires this Moodle version ?????
}}}
# Backup database just in case {{{moo-0archives$  mysqldump -u moodlebackup -p -C -Q -e moo2011t >moo2011t-database-nov11.sql}}}
** and code {{{$ tar czf moo2011t-code-nov11.tgz ~/public_html/moo-2011t}}}
# Copy to correct place 
{{{
2010-test-mods/moodle_enhanced_file_mod/package]$ cp -r lib ~/public_html/moo-2011t
2010-test-mods/moodle_enhanced_file_mod/package]$ cp -r mod ~/public_html/moo-2011t
}}}
* Click Site Admin : Notifications and tables created successfully
!! Testing
This seems to work OK [[screenshot|graphics/enhanced-file-module_upload.png]]<<imagebox>>

!Enroll users into existing course
Data file format is simple:
|!username|!course1|!group1|
|jtadams10|POLS107:201120|POLS107|
And the groups are {{{POLS107, INST107 and PAGS107}}}
Settings:
* upload type : Update exisiting users only
* authentication method : ldap server
[[Results screen|graphics/upload-users-short.png]]<<imagebox>>
Now handle users not already present (user account does not exist):
|!username|!password|!firstname|!lastname|!email|!auth|!course1|!group1|
Success!

Want to see whether we can automate enrollment into cross listed courses.
# Set up dummy course with shortname // //
# Create visible groups //SOAN// and //ENPR//
# Upload student data in format:
{{{
username	firstname	lastname	email			auth	course1			type1	group1
stest		Spiggy		Topes		stest@earlham.edu	ldap	SOAN.ENPR111:201110	1	ENPR
thomaan		Anne		Thomason	thomaan@earlham.edu	ldap	SOAN.ENPR111:201110	1	SOAN
}}}
+++[Results]>
!!Upload users results
|!Status|!CSV line|!ID|!Username|!First name|!Surname|!Email address|!Authentication|!Enrolments|
|User updated|	2	| 94 |stest|Spiggy|Topes|stest@earlham.edu|LDAP|Enrolled in "SOAN.ENPR111:201110" as "student" Added to group "ENPR"|
|User updated|	3	| 80 |thomaan|Anne|Thomason|thomaan@earlham.edu|LDAP|Enrolled in "SOAN.ENPR111:201110" as "student" Added to group "SOAN"|
{{{
Users created: 0
Users updated: 2
Users having a weak password: 0
Errors: 0
}}}
===

Repeated this with Spiggy Topes -- can add at least 3 courses. +++[details]>
{{{
username	firstname	lastname	email			auth	course1		type1	course2		type2	course3		type3
stest		Spiggy		Topes		stest@earlham.edu	ldap	MGMT100:201110	1	MGMT321:201110	1	MGMT488:201110	1
}}}
Output:
Enrolled in "MGMT100:201110" as "student"
Enrolled in "MGMT321:201110" as "student"
Enrolled in "MGMT488:201110" as "student"
@@Brilliant@@
=== 
;Upload details:
:Upload type : [Add new and update existing users]
:New user password : [Create password if needed] {allows 'password' column to be omitted}
:Existing user details : [override with file and defaults] {I don't really know what this does ......}
: roles -- leave defaults
The Univ Sussex at Brighton's E-LEarning Team Blog has [[Making Moodle a scaleable enterprise solution|http://blogs.sussex.ac.uk/elearningteam/2011/03/07/making-moodle-a-scaleable-enterprise-solution/]]
Interesting. They are using [[minted|http://moodle.org/mod/forum/discuss.php?d=70578]] IMS Enterprise enrolment plugin.
+++[Do backups!]>
;Code:
:{{{
markp/public_html]$ tar -zvcf ~/moo-archives/summer-11/bc-chemix-12_code.tgz chemix-12/
}}} 
;Rejig the code dir:
:{{{
$ mv chemix-12/ bc-chemix-12 ;
$ cp -r ref-12/ chemix-12
}}}
:{{{public_html/chemix-12]$ cp ../bc-chemix-12/config.php config.php
}}}
;Data : 
:{{{
~/moodata]$ sudo tar --exclude-from=../moo-archives/moodledata_exclude -cvf ~/moo-archives/summer-11/chemix-12_data.tgz chemix12-data/
}}}
;Database : 
:{{{
moo-archives/summer-11]$ mysqldump -u moodlebackup -p -C -Q -e chemix12 >chemix12-db-aug3.sql
}}}
=== 
;Decided:
:Instead of attempting to get the live update system to work (which would stress out the moodle production server) Betsy is going to modify the current cron job on //nagaya// to spit out an updated {{{icgorldi}}} file every night. This would get scped over to moodle production and then a cron job there would run {{{enrol/lmb/importnow.php}}} to do the import. 
!!Need to:
# Figure out what happens with two successive runs of lmb import -- have not done this yet. What //should// happen is that just new courses get created and enrollments updated.
# What happens if courses / categories are deleted. Are they reinstated with the next run?
# Make sure that no content gets overwritten or destroyed.
# What happens if user accounts are manually enrolled / unenrolled. Test this.
# Set up a test import system on Moodletest with xml data from production Banner. If this works OK, then the production moodle will be fine.
+++[Betsy's comments]>
Your list looks accurate to me.  And you are right, its a pull not a push.  So the way its set up now, is that the luminis server has a cronjob that runs that connects over to the jobsub server and scps the icgorldi file to its home directory of the user that does the import. 
=== 
Now test -- [[LMB Testing -- Aug 03]]
Email from :	 	"Daniel Vargas Cambronero" <dvarga11@earlham.edu>  {{ts{13/01/12 16:04}}}
<<<
Thanks, Mark!

The courses are as follows:

-I registered for FRENCH 222 (Reading and Writing with Aletha Stahl) on Wednesday, January 11. Moodle is displaying FREN 102.
-I registered for INTP 150-9 (Food Scares & Sustainable Agriculture with Elizabeth Heath) on Thursday, January 12. Moodle is currently displaying INTP 150-1. It's the same class, but at a different schedule and it's necessary that I be able to post to the right forum (150-9). 

Thanks so much, 
<<<
Note:
# [[FREN102-1:201220|https://moodle.earlham.edu/course/view.php?id=1564]] -- end of list. Probably added last night.
** unenrol from FREN102, enrol into FREN222
@@NOTE@@
It turns out that Aaron had not switched on the updates!


{{{
29% complete
Person:863521:no lmb changes to make:username collision while trying to update:error
76% complete
enrolment:course id 10050.201210:person id 82311:lmb updated:user not found:lmb updated:error
enrolment:course id 10052.201210:person id 3045:lmb updated:user not found:lmb updated:error
enrolment:course id 10056.201210:person id 82311:lmb updated:user not found:lmb updated:error
77% complete
enrolment:course id 11906.201210:person id 846898:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11907.201210:person id 57260:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11908.201210:person id 13490:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11909.201210:person id 2505:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11910.201210:person id 11784:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11911.201210:person id 11784:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11912.201210:person id 9724:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11913.201210:person id 11788:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11914.201210:person id 11891:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11915.201210:person id 2520:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 11916.201210:person id 79905:lmb inserted:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 5987:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 11057.201210:person id 3045:lmb updated:user not found:lmb updated:error
enrolment:course id 11059.201210:person id 82311:lmb updated:user not found:lmb updated:error
enrolment:course id 11493.201210:person id 3045:lmb updated:user not found:lmb updated:error
78% complete
enrolment:course id 10770.201210:person id 769815:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 91963:lmb updated:course/role context not found:lmb updated:error
79% complete
enrolment:course id 10770.201210:person id 12532:lmb updated:course/role context not found:lmb updated:error
80% complete
81% complete
enrolment:course id 11650.201210:person id 679370:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 11650.201210:person id 20334:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 816272:lmb updated:course/role context not found:lmb updated:error
82% complete
enrolment:course id 10770.201210:person id 683796:lmb updated:course/role context not found:lmb updated:error
83% complete
84% complete
enrolment:course id 11909.201210:person id 814277:lmb inserted:course/role context not found:lmb updated:error
85% complete
86% complete
enrolment:course id 10770.201210:person id 762871:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 727298:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 680471:lmb updated:course/role context not found:lmb updated:error
87% complete
enrolment:course id 10770.201210:person id 11935:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 679370:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 769781:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 12667:lmb updated:course/role context not found:lmb updated:error
88% complete
89% complete
90% complete
enrolment:course id 10770.201210:person id 678140:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 11650.201210:person id 769781:lmb updated:course/role context not found:lmb updated:error
91% complete
92% complete
enrolment:course id 10770.201210:person id 81515:lmb updated:course/role context not found:lmb updated:error
93% complete
enrolment:course id 10770.201210:person id 12428:lmb updated:course/role context not found:lmb updated:error
94% complete
95% complete
enrolment:course id 10770.201210:person id 797894:lmb updated:course/role context not found:lmb updated:error
96% complete
enrolment:course id 10770.201210:person id 81476:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 12985:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 79376:lmb updated:course/role context not found:lmb updated:error
97% complete
enrolment:course id 10770.201210:person id 75227:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 11650.201210:person id 12667:lmb updated:course/role context not found:lmb updated:error
enrolment:course id 10770.201210:person id 682956:lmb updated:course/role context not found:lmb updated:error
98% complete
enrolment:course id 10770.201210:person id 703276:lmb updated:course/role context not found:lmb updated:error
}}}
!!!Final output:
{{{
100% complete
Process has completed. Time taken: 156 seconds.
Processing drops for term 201210
Dropping 5291 out of 5928 (90%) enrolments.
Exceeds the drop percent limit, skipping term.
}}}
Not sure what //Exceeds the drop percent limit, skipping term// means.
{{ts{26/01/12 17:06}}} running import of {{{icgorldi_606592.xml.201226}}}. Not @@no errors@@ when running this on moodletest!
!!MAT Spring 2011-12
+++[errors]
{{{
The import log will appear below.
Found file /home/sysuser/icgorldi_606592.xml.201226

Person:9689:no lmb changes to make:username collision while trying to update:error

Person:63584:no lmb changes to make:username collision while trying to update:error

Person:869140:no lmb changes to make:username collision while trying to update:error

enrolment:course id DEPZLL:person id 94420:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPZADM:person id 10133:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPAAAS:person id 894261:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPZMNT:person id 894274:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPENSC:person id 895534:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPAWPE:person id 895537:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPBTY:person id 930593:lmb updated:course/role context not found:lmb updated:error
100% complete
Process has completed. Time taken: 24 seconds.
}}}
=== 
!!Spring MED, 2011-12
+++[errors]
{{{
The import log will appear below.
Found file /home/sysuser/icgorldi_606592.xml.201227

Person:9689:no lmb changes to make:username collision while trying to update:error

Person:63584:no lmb changes to make:username collision while trying to update:error

Person:869140:no lmb changes to make:username collision while trying to update:error

enrolment:course id DEPZLL:person id 94420:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPZADM:person id 10133:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPAAAS:person id 894261:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPZMNT:person id 894274:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPENSC:person id 895534:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPAWPE:person id 895537:lmb updated:course/role context not found:lmb updated:error
enrolment:course id DEPBTY:person id 930593:lmb updated:course/role context not found:lmb updated:error
100% complete
Process has completed. Time taken: 27 seconds.
}}}
=== 
+++[slider button]
Conceals content until ready to display
Click on button to display
===
<<notes heading:"Example plugin" tag:"plugineg" suffix:"Notes">>
The 'slider button' uses the [[Nested Sliders Plugin|NestedSlidersPluginInfo]]
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
	window.onClickTag_mptw_orig.apply(this,arguments);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	// Thanks Saq, you're a genius :)
	var popup = Popup.stack[Popup.stack.length-1].popup;
	createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
	wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
	return false;
}

//}}}

A couple of items worth thinking about:
!! [[Ajax Marking block|http://moodle.org/mod/data/view.php?d=13&rid=1459]]
[<img[http://moodle.org/file.php/1/moddata/data/13/48/1459/ajax_marking.png]]
!!! What is it?
A block that displays all your current marking from across the site on the front page (or any other) and allows you to complete it via pop-ups without having to hunt around the site to find it.
!!!How does it work?
Clicking on the course nodes will expand them dynamically (using AJAX) to show a breakdown of how many unmarked pieces of work there are for each activity. clicking the activities will show a list of students, colour coded according to how long since the work was completed, and clicking on a students name will open a pop-up window with their work in. Once you have marked their work, the pop-up will close, the student will be removed from the block, and the count of unmarked work will be updated on each node along with the total.
!!!Choosing the work you want to see
Clicking on the configure button will allow you to choose which assessments to show/hide as well as whether to subdivide them according to course groups (and which of the available groups to use). This configuration is different for each user, so if you share a single course with several other teachers, each with different groups in it, you can easily hide the groups or assessments that aren't yours. You can also quickly see how much marking there is for your group and who's done the work you set.
!!!Activity types supported:
* Assignment
* Quiz (essay questions)
* Workshop
* Forums (only rated ones, asuming that the teacher want to personally rate each post)
* Journals
This block works well under 1.9 and will probably be fine for 1.8 too (file bugs if not). 
Get CVS version from {{{http://cvs.moodle.org/contrib/plugins/blocks/ajax_marking/}}}
!![[FLV player|http://moodle.org/mod/data/view.php?d=13&rid=2222&filter=1]]

[img[http://moodle.org/file.php/1/moddata/data/13/48/2222/screenshot_flv_player.jpg]]

The FLV Player provides an easy, reliable way for developers and non-developers alike (i.e. teachers, trainers and course content developers) to deploy a variety of different video formats as learning interactions in Moodle.
Download from [[here|http://code.google.com/p/moodle-flv-player/downloads/list]]


Have had a number of messages along the lines of:
<<<
I don't want to import old classes into my current classes, but I access my old moodle sites all the time.

Essentially, I would like the most recent version of every course I taught on my main Moodle site so I can refer to them. 
<<<
Review the idea of a Faculty Moodle Repository
;Moodle Category : 
: Faculty Repository
; sub-category : 
: <Faculty Name>
: Faculty person has Teacher --and Course Creator-- role for the whole category. Rather, use //Override permissions// and grant Allow for:
** Manage categories
** See hidden categories
** Create courses
** Delete courses
** Allowed to roll activity configuration dates on restore
** Restore user data (may be useful to retrieve assignments)
** Login as other users -- allow to login as a student //only in the context of this category//
: Hide the category so that no one else can see it! 
Since <Faculty person> has view permission for her own category she can get to it via the My Courses! 
The Import function sees all courses that have the Faculty as Teacher whether or not they are hidden! So can import from Repository category to main area course.
Here's what the [[user Profile looks like|graphics/Faculty-Repository-Profile_view.png]]<<imagebox>>

And here's what [[the myCourses block reveals: |graphics/Faculty-Repository-mycourses_view.png]]<<imagebox>>

And if I login as a different teacher and go to Faculty Repositories I see ''No courses in this category''
The only way of getting to my Repository is via ~myCourses ''and'' the repository owner can create courses here! And restore to new courses (which are not visible to anyone else).

See http://espeak.earlham.edu/ircblog/2011/08/25/faculty-repository-proposal/ for full details.



I was having a problem with Julie May's ART412 Arts of Africa course. Basically it had a huge amounts of files there and the course backup got as far as zipping and then stalled. I tried several time with not including any files but to no avail.
Then on a hunch I moved the course into a different Category (2011) and changed the short name to {{{ART412-0:201010}}}. Then I tried again and the backup process worked! The zip file is 640Mb odd though!.

Course backup for {{{ART412-0:201010 The Arts of Africa}}} in https://moodle08-10.earlham.edu:2443

I need this for an Annie Bandy French quiz so that students can upload their audio files in response to a quiz question.
Problems is that according to the README the default location of uploaded files is {{{$CFG->dirroot/questionattempt/attempt#/question#
}}} and since the dirrot is in the web area this is clearly not acceptable.

Need to change this. But where?
{{{
[markp@rublev /usr/home/markp/moo-plugins/fileresponse]$ grep dirroot *.php
locallib.php:    require_once($CFG->dirroot.'/lib/uploadlib.php');
questiontype.php: * $CFG->dirroot/questionattempt/attempt#/question#
questiontype.php:        include("$CFG->dirroot/question/type/fileresponse/display.html");
}}}
So, change //dirroot// to //dataroot//. This should be set to owner www and permissions 775 so directories and subdirectories should be created OK.
Copy into place with:
{{{
~/public_html/moo-195/question/type]$ cp -R ~/moo-plugins/fileresponse .
}}}
Open the moodle/admin page in the browser to create the database tables (the readme file does not say to do this)
+++[Problems]
When I used the File Response in a Quiz I got the following errors:
{{{
Warning: include(/usr/home/moodle/data/moodledata192+/question/type/fileresponse/display.html)
[function.include]: failed to open stream: 
No such file or directory in /usr/home/markp/public_html/moo-195/question/type/fileresponse/questiontype.php on line 242

Warning: include() [function.include]: 
Failed opening '/usr/home/moodle/data/moodledata192+/question/type/fileresponse/display.html' for inclusion (include_path='/usr/home/markp/public_html/moo-195/lib/pear:.:/usr/local/share/pear')
 in /usr/home/markp/public_html/moo-195/question/type/fileresponse/questiontype.php on line 242
}}}
From this I can see that on line 242 I should have {{{dirroot}} rather than {{{dataroot}}}
So:
{{{
 242         include("$CFG->dirroot/question/type/fileresponse/display.html");
}}}
This I fixed and copied the modified file into place
=== 
Had long conversation with Bob Puffer today {{ts{28/12/10 16:35}}} about LAE gradebook etc. Turns out there's an updated version that should address the [[gradebook problems|Gradebook bugs]] I found. He emailed me links to the new versions and I shall install and test them on {{{moo-20010t}}}
!!Install into moo-2010t and test
# Delete the existing LAE reports in {{{grade/report}}} {{{grade/report]$ rm -r LAEgrader/}}} and similar for LAEuser
# Copy over new versions (with lower case directory names) {{{$ cp -R laegrader ~/public_html/moo-2011t/grade/report}}} and ditto for {{{laeuser}}}
# Install by clicking 'Notifications' (user tables set up correctly)
# @@test@@ with course that had wonky category totals.
{{ts{4/01/11 16:59}}} 
This does indeed fix [[the LAE gradebook bug|Gradebook bugs]] -- displays real(%) correctly.

----
At the same time I noticed that the [[gradebook training course|http://katie.luther.edu/moodle/course/view.php?id=4877]] on Luther's Katie had the label //Administration:Assign roles// changed to //Administration:Enrollments//. Much better! So [[fix this|Change 'Assign roles']] as well.
Got this email today from Evan Irving-Pease:
<<<
Hi Mark,
Sorry for the delay in getting back to you, it’s my second last day at work today and I’ve been a bit frantic getting all of my projects completed or handed over in time.
I’m not sure how familiar you are with the rather tortuous layout of the Moodle gradebook in the database, but the table you need to look at is `grade_items`. Every individual thing in Moodle that can get a grade (e.g. all courses, assignments, quizzes, etc.) gets a corresponding entry in this table.
To see a list of all the things that currently have a scale attached to them use this query (you may need to change the mdl_ prefix on the table names to suit your database setup).
{{{
SELECT c.id,
      c.shortname,
      gi.itemtype,
      gi.itemmodule,
      gi.iteminstance,
      s.id,
      s.name
FROM mdl_grade_items AS gi,
      mdl_scale AS s,
      mdl_course AS c
WHERE gi.scaleid = s.id
AND gi.courseid = c.id
}}}

When you know the id of the scale that you want to get rid of you can run this query, where the value of <NEW_SCALE_ID> should be either NULL or the id of the correct scale to use, and the value of <BAD_SCALE_ID> should be the id of the scale you want to get rid of.
{{{
UPDATE mdl_grade_items
 SET scaleid = <NEW_SCALE_ID>
 WHERE scaleid = <BAD_SCALE_ID>
}}}
After running this query you should be able to delete the scale using the standard Moodle interface.
<<<
<<notes>>
I actually took a simpler route. Rather than faff around with the production database removing the references to the duff scales I merely relabelled them ''Do not use'' which should make it pretty obvious ...
Resolve not to create any more site wide custom scales.
There are some problems with font scaling in thingys moodle themes.
!!Theme Custom Corners
|!Container|!Immediate ancestor|!Font family|!Font size|
| ''div.summary'' |td .content|verdana, arial, helvetica, sans serif| 12px|
| ''div.summary p'' |td .content|verdana, arial, helvetica, sans serif| 12px|
| li #module-31985 .activity ''label'' |td .content|verdana, arial, helvetica, sans serif| 12px|
| ''span .label'' |li #module-31985 .activity label, td .content|verdana, arial, helvetica, sans serif| 12px|
| ''span .label p'' |li #module-31985 .activity label, td .content|verdana, arial, helvetica, sans serif| 12px|

So, regardless of whether the text is in the Summary or a Label or enclosed in a <p> it stays the same integer size.
[[screenshot|graphics/custom_corners-fonts-sizes.png]]<<imagebox>>

!!Anomaly theme

|!#|!Container|!Immediate ancestor|!Font family|!Font size|!Screenshot|
| 1| ''div.summary'' |td .content|Georgia, Times,"Times New Roman", serif| 13.0333px |[[screen|graphics/anomaly_fontsize-prob-1.png]]<<imagebox>>|
| 2| ''div.summary p'' |td .content|Georgia, Times,"Times New Roman", serif| @@12.3833px@@ |[[screen|graphics/anomaly_fontsize-prob-2.png]]<<imagebox>>|
| 3| li #module-31985 .activity ''label'' |td .content|Georgia, Times,"Times New Roman", serif| @@11.7667px@@ |[[screen|graphics/anomaly_fontsize-prob-3.png]]<<imagebox>>|
| 4| ''span .label'' |li #module-31985 .activity label, td .content|Georgia, Times,"Times New Roman", serif| 11.7667px|[[screen|graphics/anomaly_fontsize-prob-4.png]]<<imagebox>>|
| 5| ''span .label p'' |li #module-31985 .activity label, td .content|Georgia, Times,"Times New Roman", serif| @@11.1833px@@ |[[screen|graphics/anomaly_fontsize-prob-5.png]]<<imagebox>>|

Note the reduction in pixel size with adding <p> elements!
Emailed Patrick Malley July 30, and got this response:
<<<
Hi Mark,
Now that Anomaly has been included in the Moodle 2.0 core, I will no longer be offering support outside the Moodle Tracker. If this is an issue with the 2.0 core theme, please file a ticket and I'll take care of it. If you're having a problem with the 1.9 theme we offer as a free download, you'll have to go to the Themes forum at http://moodle.org for support.
<<<
I will have to check but I'm fairly sure the same issue occurs with the Parchment theme we paid for support .......
!Open University's Forum NG
From the [[tracker : contributed modules|http://tracker.moodle.org/browse/CONTRIB/component/10572]] +++[OU ForumNG]>
;Lead:  
:Sam Marshall
;Description: 
: http://moodle.org/mod/data/view.php?d=13&rid=2927&filter=1 ~ForumNG is an alternative forum for Moodle 1.9, developed by the Open University. It sits alongside the existing Moodle forum and is completely independent; you can set up new forums using either system. The forum has some additional features (and just a few that are still missing, such as most of the forum types). Here are some of the new features: 
* Advanced DHTML/AJAX (dynamic web page) support in the discussion page, which allows you to reply to, edit, rate, and delete posts without leaving the page. 
* Unique (single) discussion view which combines the benefits of 'nested' and date-related views; it is a nested view, so you can see the discussion structure, but except for unread posts (and their immediate parents), posts are 'collapsed' to a short summary, so you don't have to scroll through mounds of junk to get to the unread posts. Expanding a post is one click away. 
* Administrative improvements such as the ability to merge discussions. 
* The rating system has friendly star graphics and can be used for grading or without a grade.
=== 
and from bug tracker [[Evaluate OU's ForumNG module for inclusion in Moodle core|http://tracker.moodle.org/browse/MDL-21538]]
Download from [[Activity Module: ForumNG|http://moodle.org/mod/data/view.php?d=13&rid=2927]] or CVS -- ''yes'' -- see below
* [[discussion|http://moodle.org/mod/forum/discuss.php?d=137549]]
* [[Sam Marshall blog|http://learn.open.ac.uk/mod/oublog/view.php?user=11&tag=forumng]]
!!Testing
{{ts{14/04/10 11:21}}} downloaded latest version from CVS to {{{[markp@rublev /usr/home/markp/2010-test-mods]}}}:
;Login to CVS
:{{{cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle login}}}
; checkout (co) the appropriate module:
:{{{ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co contrib/plugins/mod/forumng}}}
: But there's nothing there!. There readme file says to use MOODLE_19_STABLE instead. Here's how:
: {{{2010-test-mods]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P -r MOODLE_19_STABLE contrib/plugins/mod/forumng}}}
; put it into the right place:
: {{{public_html/98-moot/mod]$ cp -R ~/2010-test-mods/contrib/plugins/mod/forumng .}}}
[[ForumNG : Comments]]
!!New features
# Forum type
** Standard forum for general use -- yes, we know this one
** +++[Study advice (only see own discussions)]>
* Students can only see discussions they started themselves. Within those discussions, they can read and reply freely.
This type of forum can be set up for students to request study advice from an advisor. (Those giving the advice must have the {{{mod/forumng:viewallposts}}} capability so that they can view other people's discussions.)
=== -- this could be ''very'' useful for providing feedback for initial drafts for example.
** other types such as 'Q & A forum', 'single simple discussion', and 'each person posts one discussion' not present.
# Subscriptions. This has caused confusion in the past. The imperative question //Force everyone to be subscribed?// is replaced with the statement ''Subscription'' and the set of responses now makes more sense ('everyone can choose, 'force ...', 'not permmitted ...' etc).
# @@new@@ Email for reporting offensive post -- can enter the teacher's email address here (checks?)
# Ratings has been +++[reworked]> 
Now, instead of :

[img[graphics/forum_grading.png]]

we have:

[img[graphics/forumng_ratings.png]]

which is an order of magnitude more comprehensible. What does 'aggregate type' mean anyway?
=== 
** Required ratings is the number of ratings that a post needs to attract before the rating itself becomes visible.
# @@new@@ Limit posts. Now we have a nice system to separate the timing of ratings and posting. Thus you can start rating posts ''after'' posting has finished. Nice
# Also, a nice inviting button to [Start new discussion] instead of the more formal [Add new discussion topic]
!!!New posting features
* //Advanced options// allows up to three attachments and 'Mail now' check box
* //Display period// 
<<<
You can choose to hide a particular discussion topic from students until, or after, a certain date.
While a discussion is hidden:
* Students do not see the discussion at all.
* Moderators see the discussion on the discussion list, but it is displayed in grey and with a 'clock' icon.
* For moderators, the discussion remains fully editable.
<<<
* +++[Sticky discussion:]>
If you choose Discussion stays on top of list then, perhaps unsurprisingly, the discussion stays on top of the discussion list.
* Sticky discussions have an up-arrow icon. A divider bar separates sticky and normal discussions.
* You can have more than one sticky discussion in a forum. If there are multiple discussions, they are sorted in the normal order (newest first). There is no way to control the order.
* If a user changes the sort order, sticky discussions remain on top. The sticky discussions themselves will be sorted by the selected order, but all of them will appear above all normal discussions.
=== 
* [[screenshot of posting options|graphics/discussion_post_options.png]]<<imagebox>>
!!Styling issues
* There seem to be styling issues with the [[display of posts|graphics/forumng_styling_issues.png]]<<imagebox>>
* This is the user display with a bog standard Moodle theme [[user display|graphics/forumng_styling_issues-user.png]]<<imagebox>>
> what does 'Talk here' mean?
* [[Discussion display|graphics/forumng_layout_front.png]]<<imagebox>>
* the styling issues are related to the theme in use. The standard 'formalwhite' theme does not support some of the css it seems (neither does my custom 'Parchment').
** but 'standardblue' and other 'standard' themes work fine. [[screenshot|graphics/forumng_styling-correct.png]]<<imagebox>>
* 'Anomaly' works as well - I just picked two that did not!
{{{
<h1 align="center">Future</h1>
<table border="0" align="center" cellpadding="4" cellspacing="0" rules="all">
  <tr>
    <th width="100" rowspan="2">Musician</th>
    <th width="100" rowspan="2">Venue</th>
    <th width="300" rowspan="2">Outlook for future of live music in Richmond in next 5 years</th>
    <th colspan="2">Ideal Richmond Music Scene</th>
    <th width="100" rowspan="2">Interviewer</th>
  </tr>
  <tr>
    <th width="250">description</th>
    <th width="250">suggestions</th>
  </tr>
  <tr valign="top">
    <td width="100" class="bold">[[Musician name]]</td>
    <td width="100" class="bold">[[Venue name]]</td>
    <td width="300" class="small_text">[[Future outlook]]</td>
    <td width="250" class="small_text">[[Ideal music scene]]</td>
    <td width="250" class="small_text">[[Ideal music suggestions]]</td>
    <td width="100">[[Interviewer]]</td>
  </tr>
</table>
}}}
!!Output
Ordered by Venue (descending)

[img[graphics/database_preset_view-future.png]]
/***
|''Name:''|GenerateRssByTagPlugin|
|''Description:''|Only tiddlers with a specific tag are inluded in the RSSFeed. If no tiddlers are selected then works as before. (see ticket #270: http://trac.tiddlywiki.org/tiddlywiki/ticket/270). <br>RssTag: <<option txtRssTag>>|
|''Version:''|1.0.0|
|''Date:''|Mar 5, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#GenerateRssByTagPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Changeset 1583)|
|''Browser:''|http://www.tiddlywiki.com/#browsers|
***/
//{{{
version.extensions.GenerateRssByTagPlugin = {
	major: 1, minor: 0, revision: 0, 
	date: new Date("Mar 5, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Changeset 1583)',
	browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'	
};

if (!window.bidix) window.bidix = {}; // bidix namespace

bidix.generateRssByTag = function()
{
	var s = [];
	var d = new Date();
	var u = store.getTiddlerText("SiteUrl");
	// Assemble the header
	s.push("<" + "?xml version=\"1.0\"" + " encoding='UTF-8' " + "?" + ">");
	s.push("<rss version=\"2.0\">");
	s.push("<channel>");
	s.push("<title" + ">" + wikifyPlain("SiteTitle").htmlEncode() + "</title" + ">");
	if(u)
		s.push("<link>" + u.htmlEncode() + "</link>");
	s.push("<description>" + wikifyPlain("SiteSubtitle").htmlEncode() + "</description>");
	s.push("<language>en-us</language>");
	s.push("<copyright>Copyright " + d.getFullYear() + " " + config.options.txtUserName.htmlEncode() + "</copyright>");
	s.push("<pubDate>" + d.toGMTString() + "</pubDate>");
	s.push("<lastBuildDate>" + d.toGMTString() + "</lastBuildDate>");
	s.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");
	s.push("<generator>TiddlyWiki " + version.major + "." + version.minor + "." + version.revision + "</generator>");
	// The body
	var tiddlers;
	if (config.options.txtRssTag && store.getTaggedTiddlers(config.options.txtRssTag).length > 0)
		tiddlers = store.getTaggedTiddlers(config.options.txtRssTag,"modified");
	else
	    tiddlers = store.getTiddlers("modified","excludeLists");
	var n = config.numRssItems > tiddlers.length ? 0 : tiddlers.length-config.numRssItems;
	for (var t=tiddlers.length-1; t>=n; t--)
		s.push(tiddlers[t].saveToRss(u));
	// And footer
	s.push("</channel>");
	s.push("</rss>");
	// Save it all
	return s.join("\n");
}

//
// Initializations
//
bidix.generateRss = generateRss; // backup core version
generateRss = bidix.generateRssByTag; // install new one
config.options.txtRssTag = "mnews";	// default RssTag. <<option txtRssTag>> could be added in AdvancedOptions
//}}}
As [[Bob Puffer says|http://redmine.clamp-it.org/repositories/revision/development/356]]:
<<<
If you hide the course total, students can't see the gradebook at all.
If you hide the category total, all grades under that category are also hidden.
This fixes that.
<<<
* +++[code] in //grade/tree/edit/action.php//
{{{
56      // HACK to eliminate cascading of hiding of items if a category or course total is hidden
57	//            $object->set_hidden(1, true);
58            $object->set_hidden(1);

70      // HACK to eliminate cascading of hiding of items if a category or course total is hidden
71	//            $object->set_hidden(1, true);
72            $object->set_hidden(1);
}}}
=== 
* +++[Apply patch]>
{{{
LAE-199/grade/edit/tree]$ patch < changeset_r356_hiddengrades.diff
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: action.php
|===================================================================
|--- action.php (revision 355)
|+++ action.php (revision 356)
--------------------------
Patching file action.php using Plan A...
Hunk #1 succeeded at 53.
Hunk #2 succeeded at 67.
done
}}}
=== 
<<notes>>
emailed Aaron the patched moodle/grade/edit/tree/action.php. He installed it 08/09/2010
!!Problems with grade display in Category total
The default display type (percentage (letter)) is often unsuited to the overall grading scheme. For example, many times we simply have the Categories add up to 100. In this case what the student really needs to see is the Category total as a 'Real' number (eg 28/30) so that they can just add up all the categories and confirm the final total. The display of the Category total is set in the Categories and item tab by clicking the appropriate category edit button and changing //Grade display type//. This is what it should look like : [[Screenshot of Grader display|graphics/grader-report-display-type.png]]<<imagebox>>
However, the otherwise wonderful //LAE Grader report// displays the Real value but the incorrect % -- [[screenshot LAE Grader report|graphics/LAE-grader-report-display-type.png]]<<imagebox>>
In other columns in the LAE Grader display (where the display configuration was the same Real(%)) we see:

[img[graphics/LAE-grader-report-display-2.png]] and [img[graphics/LAE-grader-report-display-3.png]]

showing an incorrect //letter// grade in parentheses.

Also see [[Issue with Gradebook]]

@@Fixed in [[Fixing LAE Gradebook]]@@
!![Save and show next] does not save
Wes's inline assignment -- assign grade, put comment in box, [Save and show next]. Grades and comments not saved. Only grade that is saved is a zero (0).
Come back in as Admin or wesm and do 'Update'. Now grading/comment seems to be saved.
Problem with restoring graphics has been fixed!
On a course restore:
{{{
<h2>Transfiguration with Trionna McGonnagal</h2><img width=\"352\" vspace=\"0\" hspace=\"4\" height=\"256\" border=\"4\" align=\"left\" title=\"Media girl\" alt=\"Media girl\" src=\"$@FILEPHP@$$@SLASH@$preview.jpg\" />some text here<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
changed to
<h2>Transfiguration with Trionna McGonnagal</h2><img width=\"352\" vspace=\"0\" hspace=\"4\" height=\"256\" border=\"4\" align=\"left\" title=\"Media girl\" alt=\"Media girl\" src=\"http://rublev.lly.earlham.edu/~markp/clamp-LAE/file.php/5/preview.jpg\" />some text here<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
}}}
Point is that {{{src=\"$@FILEPHP@$$@SLASH@$preview.jpg\"}}} is translated to {{{src=\"http://rublev.lly.earlham.edu/~markp/clamp-LAE/file.php/5/preview.jpg\"}}} @@cool@@ Works with 1.9.8 too.
From email from ATW:
>And another great one would be the ability to batch restore courses and change the course title, shortname, and keep the teacher.
How would this work? Keep it simple by:
# placing all course backups to be restored into a known location. Front Page : Files : backupdata is the obvious one
# simple 'steering file' with list of course backup files to be restored and other parameters
# fail safe operation :
** perhaps an automatic/monitored switch. Automatic goes through and skips files it cannot process leaving intelligent reasons. 'Monitored' will ask for user input on each restoration or failure.
** think ahead about possible areas of failure and what should be done about them.

!!1. Mechanism
The function of the {{{restore_courses}}} script is to restore a batch of Moodle course backups with minimal user intervention. Information to drive this process will come from a steering file. Options to control the process are read from the command line?
Two phase process:
!!! phase 1
# Open steering file. Parse entries. For each entry, check :
** Course backups file present
** restore Category present
** teacher account present in system (if specified in steering file)
** course title ''not'' in system (otherwise the course is already present)
** course shortname ''not'' in system (otherwise course already present)
# If any of these conditions fail, write a message to output and move to next record
# After last record processed, if there is any failure, give option to proceed ignoring failed records or exit to correct problems. Then start again.
The advantage of a two phase process is that the operator can discover inevitable errors very quickly and either correct the problems or edit the steering file to remove the problematic courses.
!!!phase 2
Proceeding from phase 1, the script will keep the state of the system and ignore entries that generated errors. For each steering file entry:
# restore the course backup file into new course in existing category
# assign teacher to course
** either from the course backup data
** or specified in the steering file entry
# direct output either to screen or file (depending on control options)

!!2. Steering file format 
Comma delimited
{{{<coursebackup filename>,<new course title>,<Course start date>,<new course shortname>,<category>,<teacher account-- if not present in backup>}}}

!!3. Areas of failure
|!Issue|!Phase #|!Error message|!Indication|!Action|
|Coursebackup file not found| 1|to screen|assume mistake in filename|go on to check other items in the //same record//?|
|Course title present in system| 1|to screen|This means that the course is already there.|Skip to next record|
|Course shortname present in system| 1|to screen|This means that the course is already there.|Skip to next record|
|Restore category not found| 1|to screen|We want to make sure that the restored courses end up in the correct place.|Skip to next record|
|Teacher account not present in system| 1|to screen|Teacher accounts need to be present in order to be assigned to the new course.|Skip to next record|
|Course restore failure| 2|screen/file|There may be problems in the course backup which cause the restore to fail.|Trap the error(s), fail gracefully and proceed to next record|
|Course restore //stall//| 2|screen/file|The course restore may not trigger an error but may not complete properly either|Detect successful restore completion. Move to next record|
|No teacher detected in course backup or in steering file| 2|screen/file|The user may think that there's a teacher account specified in the backup and so did not specify in steering file.|Create the course with no teacher role and display prominent message. Admin goes back to add role manually|

!!4. Problems causing failure of course restore
* Large course backup files (eg ones with music mp3s) may cause the restore to silently fail. See [[example|Problems with restoring backup]] for solution.
* In the past, moodle has not handled well the scenario of restoring a course backup which includes modules no longer present ([[for example|http://www.earlham.edu/markp/miss/#%5b%5bRestore%20sometimes%20works%5d%5d]] and http://www.earlham.edu/markp/miss/#restore). Generally, restoring from courses backups made on Moodle systems prior to 1.8 should be done individually.


Ben and student are going to the DePau Hack/Doc fest. What should they be working on? Here are a few ideas:
*  Automatic unenrollment of students (but not Teachers) from courses at the end of a semester. This begs a lot of questions (how do you encapsulate the concept of a 'semester' into a Moodle site), but it's something that I've needed for ages.
* An easy way to order Categories on the Moodle front page by alphabetic order (or whatever order you want). Currently, the admin has to painfully move the newly created Category up the list one space at a time.

!!More ideas (from ATW)
>    And another great one would be the ability to batch restore courses and change the course title, shortname, and keep the teacher. That would have saved us hours, because we generally have started with a clean instance each semester since we did not have anyone who could fix the database if it got corrupted.

YES! Brilliant idea. OR how about this?

# Upload (or unix cp) all course backups to restore into the Front Page : Files : backupdata area (located in /moodledata/1/backupdata)
# run a script which operates on a file in the following format: {{{
      <coursebackup filename>,<new course title>,<new course shortname>,<new teacher -- if not present in backup>}}}
# The script then attempts to restore the course backups one by one
[[More details|CLAMP proposal: Batch restore courses]]

>Smart linking in Forum posts -- definitely! That drives me bonkers on moodle.org because everyone assumes that http://... is linked automatically.
Bob Puffer seems to have got this sussed with : [[Allow a teacher to specify the exact number that is associated with a letter grade when that letter grade is aggegated with numeric grades.|http://tracker.moodle.org/browse/MDL-17484]]
* download patch and apply to moo-97t and test with alphabetic scale.
** then apply to moo-p97 and ask Aaron to get it on.
Amy asks:
<<<
With courses being hidden from the My Moodle and All Courses pages, will those courses also be hidden if a person clicks on their profile, in the list of all courses a person is registered for?  If they display there too, this might be another good work around for faculty who want to dip into a previous Moodle course to see something. 
<<<
The answer to this is 'not currently'. But drawing on [[Organise 2012 courses]] I create a role called 'User-view-cats' (based on Authenticated User -- not Teacher role) with Capability : See hidden categories set to Allow.
Judy Hetrick's Profile before:
| Country:|United States |
| City/town:|Richmond |
| Order of courses in ~MyMoodle:|556,557,660,1266 |
| Courses:|JNLM115-1:201210 — Applied Journalism: The Word, JNLM115-2:201210 — Applied Journalism: The Word, JNLM116-0:201210 — Applied Journalism-Radio News, ENG.JNLM301:201210 -- Journalism I |
Apply this with Site Admin : Users : Permissions : Assign system roles -> User (view categories)
Judy Hetrick's Profile now:
| Order of courses in ~MyMoodle:|320,147,212,437,436,217,88,290,556,557,660,1266 |
| Courses:|JNLM115-1:201210 — Applied Journalism: The Word, JNLM115-2:201210 — Applied Journalism: The Word, JNLM116-0:201210 — Applied Journalism-Radio News, ENG.JNLM301:201210 -- Journalism I, COMM-Nom:2011 -- Nominating Committee 2011-12, COMDOCS:2011 -- Community Documents, COMM-CPC-CVP:2011 -- Curricular Visioning Process, JNLM303:201120 -- Journalism II, JNLM115/JNLM116:201120 -- Applied Jourmalism, JNLM301:201110 - Journalism I, MISC-TOM:2011 - Teachers on Moodle, COMM-GFC:2011 - Graduate Fellowship Committee |
@@but@@ all the new courses appear at the ''bottom'' of the ~MyMoodle list
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}


{{{
<h1 align="center">History</h1>
<table border="0" align="center" cellpadding="4" cellspacing="0" rules="all">
  <tr>
    <th width="150" rowspan="2">Musician</th>
    <th width="150" rowspan="2">Venue</th>
    <th colspan="2">Number years</th>
    <th width="350" rowspan="2">trends in Richmond’s music scene over past 5 years</th>
    <th width="150" rowspan="2">Interviewer</th>
  </tr>
  <tr>
    <th width="100">Performing</th>
    <th width="100">in Richmond</th>
  </tr>
  <tr valign="top">
    <td width="150" class="bold">[[Musician name]]</td>
    <td width="150" class="bold">[[Venue name]]</td>
    <td width="100" align="center">[[Number years performing]]</td>
    <td width="100" align="center">[[Years in Richmond]]</td>
    <td width="350" class="small_text">[[Music Trends]]</td>
    <td width="150">[[Interviewer]]</td>
  </tr>
</table>
}}}
!!Output
ordered by Musician (descending)

[img[graphics/database_preset_view-history.png]]
From email conversation with Dean T on April 8th:
<<<
We use Ubuntu 8.04, but are moving to Ubuntu 10.04.  We use the [[ZendServer Community Edition|http://www.zend.com/en/products/server-ce/]] to install our Apache, PHP, and database drivers all in one shot.
<<<
+++[Manual install of database drivers]>
Prior to using ZendServer, we installed our Apache, PHP, and database drivers like so:

sudo aptitude -y install apache2
sudo aptitude -y install php5
sudo aptitude -y install php5-gd
sudo aptitude -y install php5-mysql
sudo aptitude -y install php5-curl
sudo aptitude -y install php5-xmlrpc

Install Oracle Instant Client
    Download instantclient-basic-linux32-11.1.0.7.zip from Oracle
    Download instantclient-sdk-linux32-11.1.0.7.zip from Oracle
    Download instantclient-sqlplus-linux32-11.1.0.7.zip from Oracle
    sudo bash
    mkdir /opt/oracle
    cd /opt/oracle
    unzip instantclient-basic-linux32-version.zip
    unzip instantclient-sdk-linux32-version.zip
    unzip instantclient-sqlplus-linux32-version.zip
    ln -s instantclient_version instantclient
    echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracleinstantclient
    cd instantclient
    ln -s libclntsh.so.version libclntsh.so
    ln -s libocci.so.version libocci.so
    echo TNS_ADMIN=/opt/oracle/network/admin  >> /etc/profile.d/oracleinstantclient.sh
    echo ORACLE_HOME=/opt/oracle/instantclient >> /etc/profile.d/oracleinstantclient.sh
    echo LD_LIBRARY_PATH=\$ORACLE_HOME >> /etc/profile.d/oracleinstantclient.sh
    echo export TNS_ADMIN ORACLE_HOME LD_LIBRARY_PATH >> /etc/profile.d/oracleinstantclient.sh
    mkdir -p /opt/oracle/network/admin
    vi /opt/oracle/network/admin/tnsnames.ora
        # Oracle Local Name Resolution File
        ORACLE_SID =
        (DESCRIPTION =
            (ADDRESS_LIST =
                (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
            )
            (CONNECT_DATA =
                (SERVICE_NAME = ORACLE_SID)
            )
        )
    chmod +x /opt/oracle/network/admin/tnsnames.ora
    ldconfig
    exit
. /etc/profile.d/oracleinstantclient.sh
sudo aptitude install -y libaio-dev
sudo aptitude install -y php5-dev
sudo aptitude install -y build-essential
sudo aptitude install -y php-pear
sudo pecl install oci8
    all
    instantclient,/opt/oracle/instantclient
    <enter>
sudo vi /etc/php5/conf.d/oci8.ini
    # Oracle Instant Client
    extension=oci8.so
sudo aptitude -y install php-db
sudo aptitude -y install php5-ldap
sudo cp -p /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.default
sudo vi /etc/php5/apache2/php.ini
change max_execution_time to 7200
change max_input_time to 240
change memory_limit to 256M
change upload_max_filesize to 150M
change post_max_size to 150M
=== 
It seems that the Hope system retrieves //every user// from the database on every run. Not very efficient.
!Office Add-in for Moodle
From [[our friends at Microsoft|http://www.educationlabs.com/projects/OfficeAddinForMoodle/Pages/default.aspx]]
<<<
The Office Add-in for Moodle (OAM) is an add-in for Microsoft Office (versions 2003 and 2007) that allows teachers to open and save Word, Excel, and PowerPoint documents to a Moodle website. Today, teachers who use Office and Moodle have to switch back and forth between their web browser and Office applications.  With the OAM, teachers can create, open, edit, and save Moodle documents from within the Office applications.  You no longer need to use your web browser when working with Office documents stored in Moodle.
<<<
@@Amazing@@ There is a catch of course -- basically, this is for Resources and not assignments.
Mac users will be //really pissed//
Install and test this one out
[[Release notes|http://www.educationlabs.com/projects/OfficeAddinForMoodle/Pages/ReleaseNotes_en-us.htm#Known_Issues]]
Start work on the code to be used for academic year 2011-12.
Refer to [[10 Sept 2009 Banner-Moodle Integration Project]] -- this currently (as of {{ts{17/02/11 16:57}}}) has zero activity :-)
!Pieces
!!1. Moodle 1.9.9+ Liberal Arts Edition v1.1.4
Available from CLAMP [[here|http://www.clamp-it.org/code/moodle-1-9-9lae-v1-1-4/]]
!!2. Course create script
Ben is tidying this up. Uniquely identify the course with {{{termcode-CRN}}} combination. This will allow the enrollment script to find the appropriate course.
!!3. Enrollment script
Try to get a start with a script from Jeff Pestun (Hope). We'd like to be able to enroll people in the //teacher// role where it's currently labeled 'TBA'. As well as students.
!!4. Revamp the Category listing
!Procedure
# Create canonical codebase with all the added features we want. 
# Installations:
## with the current database (and data perhaps) to check things work out -- {{{12-mirror}}}
## with new courses & enrollment script -- issues with access to Banner -- how can we test this? {{{mscript-12}}}
## code version that gets moved into production. {{{prod-12}}}

Nice jquery based Slideshow //block//
http://moodle.org/mod/data/view.php?d=13&rid=4165
<<<
The Slideshow block enables the user (Teacher or Administrator) to display a folder containing and kind of image type as an advanced slideshow with image transitions. (with no need for a flash plugin!)

It supports:

    * Setting the images folder (of course!).
    * Setting width and height of the block.
    * Setting the type of transition. ( a few are hard coded into the code. and more are very easy to add)
    * Setting the delay, between transitions.
    * Image type filtering. (disabled by default)
    * System-wide/specific pages - block availability. (disabled by default)
<<<
Not quite what I have in mind for Brent Smith though.
# Create 1.9.11 LAE 1.2 reference install with default plugins. Call it @@ref-12@@. Use for enrollment testing too. Make code backups.
# --Create test install to try out the chemix stuff.-- (see below) Copy ref-12 code to @@test-12@@
# --Create install to test with database -- @@db-12@@--
{{ts{20/04/11 11:49}}}
{{{test-12}}} (to be moved to ref-12) is a copy of {{{code-moo12/1.9.11-LAE1.2-beta1}}}. When LAE1.2 goes production I'll do a diff and apply the differences to {{{ref-12}}}
{{ts{20/04/11 15:09}}}
http://rublev.lly.earlham.edu/~markp/ref-12 started up.
* +++[Install modules:]>
# questionnaire -- success
# scheduler -- success
# ouwiki -- success
# oublog -- success
# forumng -- success
# enhanced file upload -- success
# attendance (attforblock) -- success
=== 
* +++[Install blocks]>
* attendance -- success
* progress --Block progress: self test failed-- did a reinstall from moodle.org download and success.
* sharing cart (v20100930) -- success
* myCourses07 -- success
* yui_menu -- success
=== 
{{ts{21/04/11 12:16}}} 
!!Configuration / hacks
* MyMoodle (copy from working site)
* Themes -- fix Anomaly
* copy TinyMCE settings!
----
!!{{ts{10/05/11 10:16}}} Install chemix stuff
* Am using {{{test-12}}} to test the enrollment stuff. 
; @@Note@@ 
: that {{{test-12}}} is a copy of @@mirror-10@@ code and ''not'' ref-12 code. Use only for enrollment testing.
* copy ref-12 to chemix-12 and test chem plugins
{{ts{24/06/11 10:17}}} [[Moodle 1.9.12+Liberal Arts Edition v1.2.1|http://www.clamp-it.org/code/moodle-1-9-12liberal-arts-edition-v1-2/]] ready to go, so download this to {{{code-moo12}}}
!!Pran
# Archive current ref-12 install (see [[Implementation Plan]]) and +++[dump database.]>
{{{mysqldump -u moodlebackup -p -C -Q -e ref12 >ref-12-LAE1.2.beta1-db.sql}}}
=== Drop database tables too. This is easier to do with phpmyadmin since you have to drop each table individually.
# Rename ref-12 ({{{mv ref-12 bc-ref-12}}}) and install LAE1.2.1 as new ref-12 ({{{cp -r ../code-moo12/1.9.12-LAE1.2.1 ref-12}}}) with empty database
# Add plugins
** +++[Here's what to do]>
{{{
public_html]$ diff -qr ref-12 bc-ref-12/ | grep 'Only in'
Only in bc-ref-12/blocks: attendance
Only in bc-ref-12/blocks: myCourses
Only in bc-ref-12/blocks: progress
Only in bc-ref-12/blocks: sharing_cart
Only in bc-ref-12/blocks: yui_menu
Only in bc-ref-12/: config.php
Only in bc-ref-12/grade/report/laegrader/db: fxHeader_0.3.js
Only in bc-ref-12/lang: cy_utf8
Only in bc-ref-12/lang: en_us_utf8
Only in bc-ref-12/lang: ga_utf8
Only in bc-ref-12/mod: attforblock
Only in bc-ref-12/mod: enhancedfile
Only in bc-ref-12/mod: forumng
Only in bc-ref-12/mod: oublog
Only in bc-ref-12/mod: ouwiki
Only in bc-ref-12/mod: questionnaire
Only in ref-12/mod/resource/type: fileupload
Only in bc-ref-12/mod: scheduler
}}}
So, copy relevant mods and blocks from bc-ref-12 to @@ref-12@@.
: delete {{{/mod/resource/type/fileupload}}} and check config.php for ~TinyMCE config lines (yes) -- done {{ts{24/06/11 10:57}}}
=== 
** look at using Clamp version of Scheduler and Census report
** make sure to tweak for ~TinyMCE and remove Simple File Upload -- done {{ts{24/06/11 10:57}}}
!!First Run
* Did a first run of {{{http://rublev.lly.earlham.edu/~markp/ref-12}}} with the empty database and having made tweaks above. @@great success@@. Interestingly, rather than just set up the Front Page as in previous installations you now have the opportunity to configure ''all'' new settings before proceeding. Neat. [[Here are the settings|http://www.earlham.edu/markp/millmiss/stuff/site-settings-ref12.htm]]
* on a hunch looked at Enhanced File Module and [[updated and installed new version|Enhanced File Module -- new version (summer 2011)]]
* install [[latest version of attendance|Attendance updated]] (having first done a database dump) +++[code]>
{{{
public_html/ref-12/mod]$ cp -r ~/code-moo12/mods/andreev-artem-moodle_mod_attforblock-77fed6a attforblock
public_html/ref-12/blocks]$ cp -r ~/code-moo12/blocks/andreev-artem-moodle_blocks_attendance-4101e34 attendance
}}}
=== The new (v2.2.1) attendance seems to be [[working well|http://legacy.earlham.edu/markp/moodledocs/#%5b%5bAttendance%20--%20new%20features%5d%5d]]
* add ~MyMoodle -- [[MyMoodle remake]]
!!Configuration
* new courses -- config.php
* smart pix
* themes
* Upload course — in moo-plugins/uploadcourse.php
!! Testing
# Enrollment!
# new attendance -- see above
# Jmol
[[27 June 2011 To Do]]
You can convert a standard forum into ForumNG (but only in the most open format):
* when adding the activity scroll right to the bottom of the page and click @@convert your forum@@
Then click on the forum to convert.
This has not worked successfully with POL371 course it has to be said.
# +++[get the cvs code]>
{{{/markp/moo-plugins]$ cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle login}}}
; For the Mr Cute block:
: {{{[markp@rublev /usr/home/markp/moo-plugins]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co contrib/plugins/blocks/mrcutejr/}}}
{{{
cvs checkout: Updating contrib/plugins/blocks/mrcutejr
U contrib/plugins/blocks/mrcutejr/block_mrcutejr.php
U contrib/plugins/blocks/mrcutejr/config_global.html
cvs checkout: Updating contrib/plugins/blocks/mrcutejr/db
U contrib/plugins/blocks/mrcutejr/db/install.xml
cvs checkout: Updating contrib/plugins/blocks/mrcutejr/lang
cvs checkout: Updating contrib/plugins/blocks/mrcutejr/lang/en_utf8
U contrib/plugins/blocks/mrcutejr/lang/en_utf8/block_mrcutejr.php
}}}
;For the module:
:{{{markp/moo-plugins]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co contrib/plugins/mod/resource/type/mrcutejr/}}}
{{{
cvs checkout: Updating contrib/plugins/mod/resource/type/mrcutejr
U contrib/plugins/mod/resource/type/mrcutejr/Crypt_Xtea.php
U contrib/plugins/mod/resource/type/mrcutejr/ajaxsearch.js
U contrib/plugins/mod/resource/type/mrcutejr/config.php
U contrib/plugins/mod/resource/type/mrcutejr/edit.php
U contrib/plugins/mod/resource/type/mrcutejr/get.php
U contrib/plugins/mod/resource/type/mrcutejr/get_icon.php
U contrib/plugins/mod/resource/type/mrcutejr/icon.gif
U contrib/plugins/mod/resource/type/mrcutejr/import.php
U contrib/plugins/mod/resource/type/mrcutejr/mod_resource_dynamic_custom_icons.patch
U contrib/plugins/mod/resource/type/mrcutejr/mrcutejr.css
U contrib/plugins/mod/resource/type/mrcutejr/mrcutejr.js
U contrib/plugins/mod/resource/type/mrcutejr/mrcutejr_auth.php
U contrib/plugins/mod/resource/type/mrcutejr/new.php
U contrib/plugins/mod/resource/type/mrcutejr/preview.php
U contrib/plugins/mod/resource/type/mrcutejr/resource.class.php
U contrib/plugins/mod/resource/type/mrcutejr/search.php
cvs checkout: Updating contrib/plugins/mod/resource/type/mrcutejr/forms
U contrib/plugins/mod/resource/type/mrcutejr/forms/form_edit_mrcutejr.php
U contrib/plugins/mod/resource/type/mrcutejr/forms/form_import_csv_mrcutejr.php
U contrib/plugins/mod/resource/type/mrcutejr/forms/form_new_mrcutejr.php
U contrib/plugins/mod/resource/type/mrcutejr/forms/form_search_mrcutejr.php
cvs checkout: Updating contrib/plugins/mod/resource/type/mrcutejr/lang
cvs checkout: Updating contrib/plugins/mod/resource/type/mrcutejr/lang/en_utf8
U contrib/plugins/mod/resource/type/mrcutejr/lang/en_utf8/resource_mrcutejr.php
}}}
=== 
2. copy it into place:
{{{
markp/moo-plugins/contrib/plugins/mod/resource/type]$ cp -pr mrcutejr ~/public_html/moo-2011t/mod/resource/type
markp/public_html/moo-2011t/mod/resource/type]$ sudo chown -R markp:www mrcutejr/
markp/moo-plugins/contrib/plugins/blocks]$ cp -pr mrcutejr ~/public_html/moo-2011t/blocks
markp/public_html/moo-2011t/blocks]$ sudo chown -R markp:www mrcutejr
}}}
!!!3. Optional Installation Tasks
From [[the docs|http://docs.moodle.org/en/MrCuteJr_Shared_Resource_Repository]]
*  Optional (recommended ): To display different icons for different types of MrCUTE Jr. repository URL resources, you'll need to apply the mod_resource_dynamic_custom_icons.patch to your Moodle (patch is for Moodle 1.9.8+). 
Apply patch:
;Copy : 
:{{{~/moo-plugins]$ cp contrib/plugins/mod/resource/type/mrcutejr/mod_resource_dynamic_custom_icons.patch ../public_html/moo-2011t}}}
;Apply :
: {{{/moo-2011t]$ patch -p0 <mod_resource_dynamic_custom_icons.patch}}} +++[output]
{{{
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|# This patch file was generated by NetBeans IDE
|# This patch can be applied using context Tools: Apply Diff Patch action on respective folder.
|# It uses platform neutral UTF-8 encoding.
|# Above lines and this line are ignored by the patching process.
|Index: course/lib.php
|--- course/lib.php Base (1.538.2.80)
|+++ course/lib.php Locally Modified (Based On 1.538.2.80)
--------------------------
Patching file course/lib.php using Plan A...
Hunk #1 succeeded at 1399.
Hmm...  The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|Index: mod/resource/lib.php
|--- mod/resource/lib.php Base (1.70.2.15)
|+++ mod/resource/lib.php Locally Modified (Based On 1.70.2.15)
--------------------------
Patching file mod/resource/lib.php using Plan A...
Hunk #1 failed at 361.
Hunk #2 succeeded at 371.
1 out of 2 hunks failed--saving rejects to mod/resource/lib.php.rej
done
}}}
I figured out why it failed at line 361 in {{{mod/resource/lib.php}}}
The patch was looking for 
>{{{ if ($resource->type == 'file') { }}} 
but what was there is 
>{{{if (($resource->type == 'file') || ($resource->type == 'fileupload')) { }}} 
so couldn't make the match. So, just insert 
>{{{       $resourcepath = $CFG->dirroot.'/mod/resource/type/'.$resource->type.'/';}}} 
on the previous line.

=== 
* Optional (recommended ): Enable AJAX search in the module setting area (see how-to below) @@done@@
* Optional: Update the stylesheet at mod/resource/type/mrcutejr/mrcutejr.css to your liking. 
* Optional: Define a custom path to your repository in "Site Administration->Modules->Blocks->MrCUTE Jr. Repository".
* Optional (recommended ): Go to your moodledata/mrcutejr directory and create several sub-directories for organizing your files (e.g. "mrcutejr/images", "mrcutejr/presentations", "mrcutejr/videos", etc.) - these are used in the file-upload dialog as optional for file upload path locations.
!!Other changes
One thing that's strange is the permissions assigned to the Mrcutejr directory:
{{{drwxrwxrw-   2 www  www   512B Sep  8 20:51 mrcutejr}}}
Note the lack of world executable. This means that user markp cannot access the directory as such (since I'm not in the 'www' group). I ma going to reset permission with {{{~/moo-2011t-data]$ sudo chmod 777 mrcutejr/}}} which changes world access to {{{rwx}}} so that I can write into it.
Make directories I create writable by MrCute : {{{mrcutejr]$ sudo chmod -R 775 markp}}}
Can ftp directly into the directory. Then upload description as //csv// file:
|!realreference|!title|!description|!keywords|
|/markp/graphics/_DSC8616.JPG|butterfly	| butterfly	|jpg|
|/markp/graphics/flying_nematode.png|flying nematode	|flying nematode	|png|
|/markp/graphics/mark avatar2.jpg|mugshot	|piccy|	jpg|
|/markp/graphics/mark_silouette2.jpg|sliouette|	me|	jpg|

<<notes>>
package up a diff for the two revised patches for moodle 1.9.9

* SO far there does not seem to be a way to delete any file
* This is a @@global@@ repository. Everything uploaded is visible to every teacher on the system.
In an email this morning Randy Shultz told me that the drives had been ordered. And this:
<<<
You can move this forward by making sure everything is off the current production system.  IOW, when they show up, there is a bunch of things that are going to need to be done to the current system before we can put the new drives in - data exports, getting the backup systems up, etc.  You can do all that while the drives are being shipped, so that when they get here the system is already shut down waiting for the new drives.  Yes?
<<<
# Do a system-wide course backup to a location off-disk.
** mount a network access point via NFS?
# Move Production Moodle to Test server
** tar-gzip code. Also archive old code directories and store somewhere sensible.
** Dump Mysql database to be on safe side
** tar-gzip moodledata. Q: will it fit on current drive? Probably not. Make space or mount a network drive
** scp over tgz files to Test server and expand.
# Repeat for Elgg Jail
** sizes smaller so this should be less hassle.
# Freeze access to production server
** put moodle.e.e into maintenance mode.
** edit els and moodle aliases to point to dummy 'not available today' web page.
# expand code and data dirs on Test. Check that they work (eg salts may break)
# Edit 'moodle.earlham' and 'els' aliases to point to Test server
----
Revised procedure {{ts{22/06/10 11:55}}}
# Find a decent sized (250Gb or larger) external USB drive
** Hang off the production server and do a system-wide course backup to it. @@Fri June 25th@@
# @@Thurs July 1@@ Move Production Moodle to Test server. Freeze access to Moodle. Announce ahead of time.
** tar/gzip code & data to USB drive.
** dump Mysql db to USB drive
** relocate USB drive to Test server
** create space on Test server and untar to local drive
** point aliases to new location
!!Installing Moodle using Git
At the command prompt run the following and follow prompts 
{{{
cd /var/www 
sudo git clone http://github.com/moodle/moodle.git 
cd moodle 
}}}
For Moodle 2.1
{{{
sudo git branch –track local_21_STABLE origin/MOODLE_21_STABLE 
sudo git checkout local_21_stable 
sudo git branch –d master
}}}
!!Updating Moodle using Git
At the command prompt run the following and follow prompts 
{{{
cd /var/www/moodle 
sudo git pull
}}}
/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.10 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#InstantTimestampPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.
***/
//{{{

config.InstantTimestamp = {

	// adjust to suit
	timeFormat: 'DD/0MM/YY 0hh:0mm',
	dateFormat: 'DD/0MM/YY',

	translations: [
		[/^!ts?$/img,  "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/^!ds?$/img,  "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],

		// thanks Adapted Cat
		[/\{ts?\}(?!\}\})/ig,"'{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/\{ds?\}(?!\}\})/ig,"'{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"]
		
	],

	excludeTags: [
		"noAutoCorrect",
		"noTimestamp",
		"html",
		"CSS",
		"css",
		"systemConfig",
		"systemConfigDisabled",
		"zsystemConfig",
		"Plugins",
		"Plugin",
		"plugins",
		"plugin",
		"javascript",
		"code",
		"systemTheme",
		"systemPalette"
	],

	excludeTiddlers: [
		"StyleSheet",
		"StyleSheetLayout",
		"StyleSheetColors",
		"StyleSheetPrint"
		// more?
	]

}; 

TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {

	tags = tags ? tags : []; // just in case tags is null
	tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
	var conf = config.InstantTimestamp;

	if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

		var now = new Date();
		var trans = conf.translations;
		for (var i=0;i<trans.length;i++) {
			newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
		}
	}

	// TODO: use apply() instead of naming all args?
	return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
}

// you can override these in StyleSheet 
setStylesheet(".ts,.ds { font-style:italic; }","instantTimestampStyles");

//}}}

Jennifer Seely had problems with the gradebook on POLS105:
<<<
And I now see the eye that is closed on Quiz 1 in Categories and Items (hadn't noticed it before), but I am not able to open the eye.  I can click on it, and Moodle does some thinking about it, but then the eye remains closed.  I tried turning editing on before navigating to the C&I page (as the editing button doesn't seem to be on that page), but no luck.
<<<
After backing up the course and transferring it to the sanbox moodle I finally sussed it:
<<<
We were looking in the wrong place to reveal the Quiz. When I checked the Review options for the Quiz (click on it, then Update) I noticed that in the 'After the quiz has closed' column that you had not checked 'Scores'. What this means is that the quiz score would not be revealed however you set it in the Gradebook! I guess Moodle was checking the Quiz Activity setting before deciding that it could not reveal the grades. I have gone ahead and checked the boxes for 'After the quiz has closed'.
<<<
----
!!!Postscript {{ts{21/09/10 10:50}}}
<<<
Just one last (tiny) thing, though: one student, ***** *****, still has his grade hidden.  Maybe that one, at least, is not my fault?  Does he have some setting of his own he can change?
<<<
This one was my fault. In LAE Grader report hit [Turn editing on] then see that the student's individual grade is still hidden. [[Screenshot|graphics/gradebook-hiding-individualgrade.png]]<<imagebox>>

What to do to implement Jmol on Moodle:
* Latest version of Jmol library in {{{moo-plugins/jmol-11.8.15}}}
* Jmol resource code in {{{moo-plugins/resource_jmol4moodle18_v_02}}}
Find the Jmol filter code
** download from [[Moodle filters CVS|http://cvs.moodle.org/contrib/plugins/filter/jmol/]] with {{{markp/2010-test-mods]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co contrib/plugins/filter/jmol}}}
** but it's way out of date : Age : 3 years and jmol version 10.2.0

!!To Install
+++!!![Jmol resource installation instructions]
TO INSTALL:

1. Copy the folder that comes with this download, from its location mod/resource/type/jmol, to the exact same location in your Moodle web server.
@@do a tar/gzip instead & untar@@
2. Copy the language files from lang/en_utf8 (and various subfolders) to the exact parallel locations in your Moodle web server.
@@ditto above@@
<<<
You should also add a new 'text string' to the existing Moodle language file, lang/en_utf8/resource.php. This is the line to add:
{{{
$string['resourcetypejmol'] = 'Display a 3D molecule viewer';
}}}
<<<
3. OPTIONAL - Setting the Jmol icon - this is a little tricksy but looks good: 
# Firstly, copy the icon from pix/f/jmol.gif to the equivalent position on the Moodle server. 
# Secondly, modify mod/resource/lib.php and modify the function resource_get_coursemodule_info($coursemodule) so that it sets the icon correctly for "jmol" resource type. The following shows lines 376-387 AFTER modification - note the extra "else if" clause we've added at the end:
{{{
       if ($resource->type == 'file') {
           $icon = mimeinfo("icon", $resource->reference);
           if ($icon != 'unknown.gif') {
               $info->icon ="f/$icon";
           } else {
               $info->icon ="f/web.gif";
           }
       } else if ($resource->type == 'directory') {
           $info->icon ="f/folder.gif";
       } else if ($resource->type == 'jmol') {
           $info->icon ="f/jmol.gif";
       }
}}}
The line numbers may not correspond exactly in your copy of the lib file.
=== 
# update {{{resource_jmol4moodle18_v_02/mod/resource/type/jmol/}}} with latest 11.8.15 code from {{{moo-plugins/jmol-11.8.15}}}. Notice that there's lots of extra stuff in the latter which is not needed.
# tar up the works and untar in place
# Edit {{{lang/en_utf8/resource.php}}} as shown in the distributed installation instructions above
----
!!{{ts{10/05/11 17:15}}} jmol resource for moodle 1.9
Went to Geoffrey Rowland's [[Yoevil JMol site|http://moodle.yeovil.ac.uk/course/view.php?id=1927&username=guest]] again and found a version for 1.9 called {{{resource_jmol4moodle19.zip}}} @@argggg@@
So download this ''and'' the [[jmol filter|http://moodle.yeovil.ac.uk/course/view.php?id=63]] from [[github|https://github.com/geoffrowland/moodle-filter_jmol]]
Comparison of the two folders show that there were no diffs with the {{{lang}}} and {{{pix}}} dirs:
{{{
~/moo-plugins]$ diff -qr resource_jmol4moodle19/lang/ resource_jmol4moodle18_v_02/lang/
~/moo-plugins]$ diff -qr resource_jmol4moodle19/pix/ resource_jmol4moodle18_v_02/pix/
}}}
So those can stay. All the diffs (and there are many) are in the {{{mod}}} directory.
Update:
* remove current jmol {{{chemix-12/mod/resource/type]$ rm -r jmol/}}}
* drop the table from the database -- there does not seem to be one (strange!)
* copy in new version {{{chemix-12/mod/resource/type]$ cp -r ~/moo-plugins/resource_jmol4moodle19/mod/resource/type/jmol .}}}
Love this joke from Sam Marshall:
<<<
Anyway, many thanks going out to Jeanette Stephenson');UPDATE mdl_grade SET totalscore=100 WHERE userid=157790021; 
<<<

hahahahaha
Download from [[LAE on Clamp-IT|http://www.clamp-it.org/code/moodle-liberal-arts-edition-v10/]]
No installation destructions. I got the tar and will copy that over.
!Installation
# Download and unpack the [[Assignment zip tar file|http://www.clamp-it.org/wp-content/uploads/2009/08/AssignmentZip.tar]] somewhere safe (I'm assuming ssh access to the server). {{{$ tar -xvf AssignmentZip.tar}}} 
# Copy into relevant places (after renaming the original mod/assignment/lib.php to be on the safe side:
{{{
AssignmentZip]$ ls
LAE     lib     mod
AssignmentZip]$ cp -R LAE ~/public_html/moo-195
AssignmentZip]$ cp -r lib/* ~/public_html/moo-195/lib
AssignmentZip]$ mv ~/public_html/moo-195/mod/assignment/lib.php ~/public_html/moo-195/mod/assignment/lib.php.org
AssignmentZip]$ cp -r mod/* ~/public_html/moo-195/mod
}}}
!User Interface confusion with LAE Grader Report
I applied Bob Puffer's [[gradebook fixes|Fixing LAE Gradebook]] but a couple of things have changed with the user interface. Here's what it used to look like:

[img[graphics/lae-grader-report-old.png]]

Notice the dotted line around the comment area.
In order to [[correct problems |Gradebook bugs]] I applied the Bob Puffer fix as mentioned above. But his now shows a redesigned user interface which faculty (and myself) have found confusing. Initially, I got really confused with the statement 'Fill empty grades in this column with zeros' (more on that later) and so I thought that the left column would have a zero and the right column the actual grade (as in [[this screenshot|graphics/gradebook-2cols-edit.png]]<<imagebox>>. Upon further experimentation I found that the left column was indeed for grades and the right column for comments. The {{{0.0-20.0}}} just indicates the range of points.

[img[graphics/lae-grader-report-new.png]]

!!Fill empty grades in this column with zeros
I'm really don't understand what this means and why it's there. Certainly there's a big problem because the text extends the width of the columns unreasonably. Neither of the buttons at the top of the column execute this imperative -- they do not actually 'fill empty grades with zeros'. But why associate //empty// grades with //zeros//? Surely an empty grade means that it hasn't been graded yet. If nothing is handed in then presumably that would merit a zero. So, not only is there no action button to do the imperative 'Fill empty grades in this column with zeros', but I don't understand why one would want to do this anyway.
!!Conclusion
Changing the border around the comment box from solid to dashed would make it a lot more obvious that this was for comments (presumably this is in a stylesheet somewhere?). Getting rid of the 'fill empty grades' text would obviate confusion and narrow the column widths to encompass the grade and comments boxes only.
!More problems
With user preferences set in {My Preferences} tab [[screenshot|graphics/lae-grader-report-displayproblems-preferences.png]]<<imagebox>>. Quickfeedback set to 'No'.
We see [[four columns for the single Quiz|graphics/lae-grader-report-displayproblems.png]]<<imagebox>>
[[LAE Grader wierdnesses : fix]]
!!Fix for [[LAE Grader wierdnesses]]
{{ts{8/02/11 10:47}}} message from Bob Puffer:
>I'm concerned you didn't get zerofill.png with the download since its been a part of the package for a while now.  Would you mind terribly downloading again?  I've refreshed with what's on the LAE which is what we're running in production since beginning of Feb.
The course that's displaying these problems is Kathy Taylor's "SPAN202-2:201120 -- Intermediate Spanish II (Taylor) copy 1". This is currently on the {{{mirror10}}} sandbox site and does show the same problems as the production site. So, let's update the code in {{{moo-2011t}}} with the new grader report. To summarize, we'll  have:
|!Sandbox moodle site|!Gradebook version|
|{{{LAE-199}}}|pre-december with [[this problem|Fixing LAE Gradebook]]|
|{{{mirror10}}}|inital Puffer LAE fix (currently on production)|
|{{{moo-2011t}}}|updated fix to solve [[issues|LAE Grader wierdnesses]]|
I downloaded the new versions of laegrader and laeuser and confirmed (with diff) that they have been changed.
Copy the new versions into moo-2011t, restore the SPAN202 and compare results.
Grader report is fixed:

[img[graphics/lae-grader-report-fixed.png]]

Add dashed border around quickfeedback box -- [[Styling quickfeedback field]]

Still to do {{ts{8/02/11 16:02}}}:
# --Test out with grades--
# --package up as a single tgz for Aaron--
# --Copy to Paz and figure out when to install into production.--

Under Site Administration :
!!!Appearance
Themes:
* Settings
** Allow course themes : check
** Allow users to hide blocks : check (default)
** SHow blocks on module pages : default set to no (may want to change this)
* Theme selector
** choose Anomaly as default theme but change this?
:Make default a different colour to green: [[Anomaly + topcoll]] [[Anomaly Green]]
<<<
{{{
rublev /usr/home/markp/public_html/LAE-199/theme/anomaly]$ mv styles_select.css styles_green.css
rublev /usr/home/markp/public_html/LAE-199/theme/anomaly]$ cp styles_blue.css styles_select.css
}}}
@@ Copy modified header from styles_green.css to styles_select.css ?@@
<<<
!!!Authentication:
Users : Authentication : manage
* Enable LDAP (open eyeball)
* disable email self registration
Now a setting for 'LDAP server' appears:
* see other TW for details
!Modules
+++!![Activities]
;Manage Activities
: Hide Hot Potatoes Quiz, Journal, LAMS, SCORM/AICC, Survey, Wiki (use OUWiki instead), Workshop (the new one is good)
; Assignment
: change default max size from 1Mb to 100Mb
; Forum
: change max attachment size to 100Mb
: Enable AJAX rating -- ''yes'' +++[details]>
AJAX rating is a forum rating usability improvement. If enabled, users can rate forum posts almost instantly without needing to scroll to the bottom of the page and click the 'Send in my latest ratings' button. This setting also requires AJAX to be enabled for the site and in user profiles.
=== 
: Enable Anonymous Forums : ''yes'' +++[details]>
Set to 'yes' if you want to allow anonymous forums. Teachers must still choose to allow them on a per-module basis.
=== 
: Note: @@These are different forum settings to what we had before@@
;ForumNG
: Max attachment size : 100Mb
: show usernames and id numbers in reports -- check
; Glossary
: Allow comments -- ''yes''
: Display Formats setup -- consider hiding obscure options to simplify configuration
; OU Blog
: defaults to show user pics
; Quiz
: <<tiddler [[Site defaults : Quiz]]>>
; Resource
: <<tiddler [[Site defaults : Resource]]>>
=== 
+++!![Blocks]
!!!Manage blocks
;Hide the following :
: Blog menu , Blog tags -- using OUblog instead
: Courses, Current Courses List -- functionality provided by Course Menu and myCourses block +++[note]
May need to enable Current courses to get the Microsoft upload thingy to work
=== 
: Loan calculator, Mentees, Netwrok servers, Random Glossary entry
: Section links -- duplicates Course Menu
: Tags -- @@evaluate whether to enable sitewide tags@@
!!!Sticky Blocks -- MyMoodle
@@done {{ts{5/08/10 11:32}}}@@
;BUT
: Latest News Items and RSS feed blocks not showing up.
!!!Course Menu
<<tiddler [[Configurate Course Menu]]>>
!!!myCourses
; Show 'all courses' link:
: ''yes''
; Show flat list:
: ''no'' (unchecked). Courses nested in categories are easier to follow
; Show course search box:
: ''yes''
; @@Note:@@
: users need to hit the [display my courses square] for their courses to show up. State is stored in a cookie.

=== 
+++!![Filters]
!!!Manage
; Enable the following filters:
: Resource Names Auto-linking
: Activity Names Auto-linking
: Multimedia plugins :
** Enable //.swf// : ''yes''
** Enable YoutTube link filter : ''yes''
: Multilanguage content (may switch this off)
=== 
+++!![Appearance:]
;HTML Settings {{ts{28/09/10 15:49}}}
: Remove HTML tags from all activity names : ''uncheck'' (Uncheck this setting to allow HTML tags in activity and resource names.)
: (by request from Greg Mahler) {{ts{28/09/10 15:49}}}
=== 
!Flagged items to attend to <<tag [[FLAG]]>>
+++!![Site Admin Settings]
<<tiddler [[LAE Site Admin Settings]]>>
=== 
!!!To Do
''No'' --Create a modified Anomaly css that uses 'Earlham' red ie ''7C0800''-- People like the blue so leave as is.

!! Roles
* [[Librarian role]]
* @@Add "login As" capability to Teacher role?@@
* Add backup user data capability to Teacher role, user files, grade histories
;Site Admin : Users : Permissions : define roles -> teacher
: Course : Backup User Data -- ''allow''
: Course : Restore user data -- ''allow''
: Course : Login as other user -- ''allow''
!! default settings for new courses
{{{
$CFG->defaultblocks_override ='progress,yui_menu,quickmail,sharing_cart,admin,myCourses,news_items:';
}}}
Note the ':' at the end of the string.
{{ts{23/07/10 09:49}}} -- added to config.php


[[Sundry]]
[[System configuration]]
[[Configure Moodle system]]
# Backup database just in case {{{~/moo-archives]$ mysqldump -u moodlebackup -p -C -Q -e LAE199 >LAE199_base-db.sql}}}
# Have already created course backup of "Teachers on Moodle" from Prod^^n^^ Moodle. This just contains the teacher accounts only. Creating this on LAE 2011 should create all the accounts (@@set default authentication to LDAP@@)
> Did all this, restored 'Teachers on Moodle' which had nothing but 105 users. @@Bloody worked@@
* [[Uploading Users]] also worked!
* Now do Upload courses with //categories_199.csv// +++[worked as well!]>
Parsed 62 course(s) from CSV
Created 62 course(s) out of 62
51 new category(ies) were created
You may wish to manually Re-Sort the categories
Re-Sorted courses
ANALYZE Database Tables OK
OPTIMIZE Database Tables OK
Total Execution Time: 1.28 s
=== 

@@Test all blocks.@@

!!!{{ts{29/07/10 11:15}}} 
Add [[OUBlog]] @@great success@@ tables setup correctly

{{ts{11/04/11 12:15}}} After a ''lot'' of looking the best I can find for LDAP usage is in the moodle docs: [[LDAP enrolment|http://docs.moodle.org/en/LDAP_enrolment]].
The intro says:
<<<
LDAP enrolment works best in Moodle when used in conjunction with LDAP authentication, and we're going to assume that you have already set Moodle up for LDAP authentication. 
<<<
And that's how we currently have it working.
This [[LDAP Sync with User Create and Nested Groups|http://moodle.org/mod/forum/discuss.php?d=124347]] may be exactly what we need.
Aaron suggested that we could possibly have the user create script //create a user account in moodle as well// so that whenever a new user got created they would get made in Moodle also.
I think that the above scripts do accomplish a lot of what we need but since I don't know anything about LDAP (eg I have no idea what 'nested group support means' and why it's significant) I really cannot take this further.
!! Pro
* keep production moodle on same server
* simpler to implement?
* Course data could be used elsewhere
!!Con
* would need to add user create script for moodle
* need to set up LDAP schema to store course data
* need to create SQL view to suck in course data from Banner
;Problem:
: When we migrate to the new system on Thursday (get the email out today!) we'll have a pile of courses that have already been created / restored. How to deal with these?
!!!Possibilities:
Find system generated course and do import. This would work but be slow. OR

Update the pre-created courses with the important system information (course id) and delete the system created course, then allow LMB to enrol the students & teacher. Here's how:
* Open in 2 separate windows the restored course and the LMB course. Go to the Settings page on both
* Copy the following from from LMB course to restored course:
## Course ID number @@critical@@
## Short name
## Full name (add to what's there)
## Summary (where present)
## @@don't save changes@@ yet
* @@rename@@ the LMB course:
## delete contents Course Id #
## Add ''-D'' to short name
## Add ''-D'' to Full name
## @@[Save changes]@@
* Now go to the 'restored' course and [Save changes]. The ex-restored course will now be updated by the next LMB run with the TEacher and Student enrollments since it now has the courseid #.
* Finally, go to Administration : Courses : Add/edit courses and 
## in <EC Fall Semester, 2011-12><Department> delete all the courses with -D
## in <Fall 2011 - Migrate> move fixed courses to appropriate departmental categories in <EC Fall Semester>
----
This should also work for courses on the Production moodle! I could update all of these with the Course ID. But what will happen when the first LMB import takes place? Will it try to overwrite what's there? Test with the Testing box.

{{ts{8/07/11 14:43}}} This time I'm using {{{chemix-12}}} as my test site so that {{{test-12}}} can continue as live update testing.
In this run I want to see whether an existing course is overwritten if the xml import is run twice.
This is important when we have courses that have content //and// enrollments and perhaps we have to run the xml import again.
# save database (to be on safe side)
# load {{{chemix12-peacedb-july7.sql}}}
# configure LMB [[LMB settings]] and run. Figured out why log file not created : "The file specified should already exist, and needs to be writable by the webserver process." +++[So:]>
{{{
lmb-test]$ touch chemix12-lmbevents-july8.log
lmb-test]$ chmod 774 chemix12-lmbevents-july8.log
lmb-test]$ sudo chown markp:www chemix12-lmbevents-july8.log
}}}
=== 
* The logging finally worked!
* The section numbering worked.
Have not had time to see whether doing the import again would overwrite course material. To do when I return.


Fix [[Start Date issues]] and run LMB import again to test that the start date stays the same.
Parameters as before.
Nothing happened -- I think I need a new import file.
{{ts{8/08/11 14:19}}} No -- just the date needs to be updated!
Tried [[LMB -- update existing courses]] with CHEM111-2:201210 -- @@great success@@
Teacher and student enrollments added to course.
!!!Part 0
There's a LMB tool called 'Prune LMB Tables' -- I'm wondering whether this would remove previous run data and allow the save import file to be imported again.
* Check database tables in phpmyadmin
* Backup database
* Run 'Prune LMB Tables'
* Run 'Import XML File Now'
!!!Part 1
;Question:
: What will happen when Sarah Emmer for example is added to a course as a teacher? Will she get unenrolled? 
Use {{{REL180-0:201210 -— Islam}}} and add Sarah Emmer as Teacher. Enrol "Aisha Abdul-Haqq" as a student and unenroll "Hani Al-Safadi"
@@No@@ -- Sara Emmerstill enrolled as Teacher
Aisha Abdul-Haqq -- still enrolled
Hani Al-Safadi -- enrolled back in
;Conclusion:
: Enrollments added by Teacher do not get affected and are 'sticky'. The default is not to unenrol. Unenrols only work when Banner does a 'drop'
!!!Part 2
Update a blank course from Fall 2011 Category with Course id # etc according to [[LMB -- update existing courses]]. Will running the LMB import add enrollments? Will it screw up the course and try to replace it?
Try with {{{PHIL250:201210}}}. Has Teacher : Marya Bower, Course Assistant : Sarah Emmer

----
Change course default settings:
* Show gradebook : No
* Max upload size : 128Mb
No place to set default start date.
Use {{{icgorldi_606593.xml}}} with {{{       <datetime>2011-08-08T12:15:37</datetime>}}}

* meet with Betsy Wed 10am -- [[Enrolment session with Betsy]]
+++[Initial thoughts]>
* issues with live update
** how it works. Performance hit
* using cron job to generate daily XML imports
** effect on existing courses / users
** accumulate live updates and then use cron with these?
* Procedure for freezing system and updating current courses. Timing.
## New courses with current student and teacher enrollments created by system
## //courses already restored// will need to be imported
## last year's courses can be imported by the Teacher
## other restores will need to take place //within// the current course.
## what to do (if anything) with unused courses
=== 
!! Test issues
# Figure out what happens with two successive runs of lmb import -- have not done this yet. What //should// happen is that just new courses get created and enrollments updated.
# What happens if courses / categories are deleted. Are they reinstated with the next run?
# Make sure that no content gets overwritten or destroyed.
# What happens if user accounts are manually enrolled / unenrolled. Test this.
[[LMB setup for Aug 3]]
+++!![1. What happens on 2nd run?]>
Use {{{chemix-12}}} updated to LAE 1.3 (ie moodle 1.9.12+) and {{{icgorldi_606592.xml}}}
* Have already backed up code, data and database
Need to look at courses / enrollments and accounts. 
!!Before import
EC Fall Semester, 2011-12
|!Department|!#courses|!updated|
|Japanese Studies|3|5|
|Journalism|3| |
|International Studies|3| |
|Business & Non-Profit|5| |
|Mathematics|10| |
|Peace & Global Studies|3| |
|Philosophy|4| |
|Physics|10| |
|Psychology|12| |
|Religion|7| |
|Sociology/Anthropology|6|8|
|Spanish and Hispanic Studies|8| |
|Art|18| |
|Biology|15| |
|English|12| |
|Classical Studies|6| |
|Computer Science|9| |
|German Language & Literature|5| |
|History|9| |
|Japanese Lang and Linguistics|6| |
|Music|57| |
|Theatre Arts|34| |
|Off Campus Programs|10| |
|Women's Studies|4| |
|TESOL|1| |
|Athletics|36| |
|Chemistry|10| |
|Education| | |
|Hum Dev & Social Relations|3| |
|Politics|3| |
|Comp Lang & Linguistics|3| |
|Environmental Studies|3| |
|Geosciences|9|11|
|Interdepartmental|6|16|
|Economics|3| |
|French & Francophone Studies|5| |
|Film Studies|1| |
|Latin American Studies|1| |
|African&AfricanAmericanStudies|2| |
|Wellness Programs| | |
|Language|1| |
|Interpretive Practices|5|15|
|Museum Studies|1| |
|Arabic|2|3|
|Jewish Studies|1| |
|Crosslisted|59|63|

''3093 users''
Import XML file -- 
Run Successful. 
New courses created: 33
[[LMB run Aug 3 -- errors]]
[[LMB run Aug 3 -- crosslisting]]
''3110 users''
=== 
!!2. Changes made to course/category
{{ts{4/08/11 16:51}}}
# delete a course -- will it get recreated?
# add course data to a course -- should be left alone
# Hide/unhide categories
# change course short name -- should get changed back
# unenrol a student -- should get restored
# enrol a student -- should get removed
----
* Backup database as before {{{chemix12-db-aug4.sql}}}
# +++[Delete course.]>
Full name : {{{JPNS240-2:201210 — Samuri: Then and Now}}}
Short name : {{{JPNS240-2:201210}}}
Course id: {{{11625.201210}}}
Enrolments:
 -- Teacher : Susan Furukawa
 -- Students:
# Emma Beckman
# Meaghan Davidson
# Ashley Cochran
# Seth Wenger
# Douglas Hatten
# Anton Guz
# Dillin Smith
# Michael Gallagher
# Lindsay Pitts
=== @@course recreated with all enrollemnts@@
# +++[Add course data]>
Course {{{BIOL341:201210 -- Cell Physiology}}} has lots of data. Let's import this into the LMB created course as the Teacher.
* login as Bob Rosenberg
* how do I know which is the new course? Only the import one listed in MyMoodle. Need to hide {{{FALL 2011}}} category and unhide the EC Fall semester categories.  Show category EC Fall Smester : Biology -- done
* login as Bob R again. The new course is revealed. Import courses not revealed. Good
* {{{BIOL.BIOL347:201210 -- Anatomy & Physiology II}}} listed as a crosslisted course. So we'll import from last year's course and then //change the shortname//
* Import successful. Note that no resources work cos I don't have the data dir on this system. BUT, it should work on the testing box.
* Change shortname from {{{BIOL.BIOL347:201210}}} to {{{BIOL347-1:201210}}}
=== @@Course left unchanged. Teacher : Bob Rosenberg. 27 students. Course content untouched@@
# Hide/unhide categories. Will categories that have been hidden (ie FALL 2011) or unhidden (ie everything in EC Fall Semester, 2011-12) be left alone? @@YES@@
# Change shortname from {{{BIOL.BIOL347:201210}}} to {{{BIOL347-1:201210}}} -- @@Shortname changed back as expected@@
# Unenrol student {{{Nathaniel Chandler}}} from Judy Hetrick's {{{JNLM115-1:201210 — Applied Journalism: The Word}}} -- @@student re-enrolled@@
# Enrol student {{{Spiggy Topes}}} into Kevin Miles' {{{PHIL480-0:201210 — Ehics and Tragedy}}} Spiggy still there. Not a good test cos Spiggy not in Banner system as such.
;Note:
: @@new version@@ of {{{icgorldi_606592.xml}}} dated Aug 4.

Import Finished in 357 seconds
See also [[LMB Test -- Aug 5]]
Scenario:
test-12 just remade with new code set and //empty datasbase//. Ran URL and tables created. Fairly sure it created the lmb_ set of tables. Now when import the production db we get +++[this:]>
{{{
enrol/lmb plugin needs upgrading
(mysql): CREATE TABLE mdl_lmb_courses ( id BIGINT(10) NOT NULL auto_increment, sourcedid TEXT, sourcedidsource MEDIUMTEXT, coursenumber BIGINT(10) unsigned NOT NULL DEFAULT 0, term BIGINT(10) NOT NULL DEFAULT 0, longtitle MEDIUMTEXT, fulltitle MEDIUMTEXT, rubric TEXT, dept MEDIUMTEXT, depttitle MEDIUMTEXT, num TEXT, section TEXT, startdate BIGINT(10) unsigned NOT NULL DEFAULT 0, enddate BIGINT(10) unsigned NOT NULL DEFAULT 0, timemodified BIGINT(10) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_courses' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_courses (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid TEXT,
    sourcedidsource MEDIUMTEXT,
  ..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_courses (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid TEXT,
    sourcedidsource MEDIUMTEXT,
  ...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_courses (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid TEXT,
    sourcedidsource MEDIUMTEXT,
  ..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

ErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_courses COMMENT='Courses that come from LMB/Banner'  
Success
(mysql): CREATE TABLE mdl_lmb_people ( id BIGINT(10) NOT NULL auto_increment, sourcedid BIGINT(10) NOT NULL DEFAULT 0, sourcedidsource MEDIUMTEXT, fullname TEXT, familyname TEXT, givenname TEXT, email TEXT, username TEXT, telephone TEXT, adrstreet TEXT, locality TEXT, region TEXT, country TEXT, academicmajor TEXT, recstatus TINYINT(2) NOT NULL DEFAULT 0, timemodified BIGINT(10) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_people' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_people (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid BIGINT(10) NOT NULL DEFAULT 0,
    source..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_people (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid BIGINT(10) NOT NULL DEFAULT 0,
    source...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_people (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid BIGINT(10) NOT NULL DEFAULT 0,
    source..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_people COMMENT='People as reported by LMB/Banner'  
Success
(mysql): CREATE TABLE mdl_lmb_enrolments ( id BIGINT(10) NOT NULL auto_increment, coursesourcedid TEXT, personsourcedid BIGINT(10) NOT NULL DEFAULT 0, term BIGINT(10) NOT NULL DEFAULT 0, role SMALLINT(4) NOT NULL DEFAULT -1, status SMALLINT(4) NOT NULL DEFAULT -1, extractstatus BIGINT(10) unsigned NOT NULL DEFAULT 0, succeeded SMALLINT(4) NOT NULL DEFAULT 0, gradable TINYINT(1) unsigned NOT NULL DEFAULT 0, midtermgrademode TEXT, midtermsubmitted TINYINT(1) unsigned NOT NULL DEFAULT 0, finalgrademode TEXT, finalsubmitted TINYINT(1) unsigned NOT NULL DEFAULT 0, timemodified BIGINT(10) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_enrolments' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_enrolments (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedid TEXT,
    personsourcedid BIGIN..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_enrolments (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedid TEXT,
    personsourcedid BIGIN...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_enrolments (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedid TEXT,
    personsourcedid BIGIN..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_enrolments COMMENT='Enrolments from LMB/Banner'  
Success
(mysql): CREATE TABLE mdl_lmb_raw_xml ( id BIGINT(10) NOT NULL auto_increment, headers MEDIUMTEXT, xml LONGTEXT, timereceived BIGINT(10) unsigned NOT NULL DEFAULT 0, xmltype TEXT, processed SMALLINT(4) NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_raw_xml' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_raw_xml (
    id BIGINT(10) NOT NULL auto_increment,
    headers MEDIUMTEXT,
    xml LONGTEXT,
    timerece..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_raw_xml (
    id BIGINT(10) NOT NULL auto_increment,
    headers MEDIUMTEXT,
    xml LONGTEXT,
    timerece...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_raw_xml (
    id BIGINT(10) NOT NULL auto_increment,
    headers MEDIUMTEXT,
    xml LONGTEXT,
    timerece..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_raw_xml COMMENT='A table the stores xml as it was received from LMB'  
Success
(mysql): CREATE TABLE mdl_lmb_crosslist ( id BIGINT(10) NOT NULL auto_increment, coursesourcedidsource MEDIUMTEXT, coursesourcedid TEXT, crosssourcedidsource MEDIUMTEXT, crosslistsourcedid TEXT, crosslistgroupid BIGINT(10) unsigned DEFAULT NULL, status SMALLINT(4) NOT NULL DEFAULT -1, manual TINYINT(1) unsigned NOT NULL DEFAULT 0, type VARCHAR(8) DEFAULT NULL, timemodified BIGINT(10) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_crosslist' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_crosslist (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedidsource MEDIUMTEXT,
    coursesour..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_crosslist (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedidsource MEDIUMTEXT,
    coursesour...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_crosslist (
    id BIGINT(10) NOT NULL auto_increment,
    coursesourcedidsource MEDIUMTEXT,
    coursesour..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_crosslist COMMENT='A crosslisting lookup table'  
Success
(mysql): CREATE TABLE mdl_lmb_terms ( id BIGINT(10) NOT NULL auto_increment, sourcedid MEDIUMINT(6) unsigned NOT NULL DEFAULT 0, sourcedidsource MEDIUMTEXT, title TEXT, starttime BIGINT(10) unsigned NOT NULL DEFAULT 0, endtime BIGINT(10) unsigned NOT NULL DEFAULT 0, studentshowtime BIGINT(10) unsigned NOT NULL DEFAULT 0, active TINYINT(1) unsigned NOT NULL DEFAULT 1, timemodified BIGINT(10) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_terms' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_terms (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid MEDIUMINT(6) unsigned NOT NULL DEFAULT 0,
..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_terms (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid MEDIUMINT(6) unsigned NOT NULL DEFAULT 0,
...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_terms (
    id BIGINT(10) NOT NULL auto_increment,
    sourcedid MEDIUMINT(6) unsigned NOT NULL DEFAULT 0,
..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_terms COMMENT='Terms as reported by LMB/Banner'  
Success
(mysql): CREATE TABLE mdl_lmb_categories ( id BIGINT(10) unsigned NOT NULL auto_increment, termsourcedid BIGINT(10) unsigned DEFAULT NULL, sourcedidsource MEDIUMTEXT, dept MEDIUMTEXT, categoryid BIGINT(10) unsigned DEFAULT NULL, cattype MEDIUMTEXT, CONSTRAINT PRIMARY KEY (id) )   1050: Table 'mdl_lmb_categories' already exists

            ADOConnection._Execute(CREATE TABLE mdl_lmb_categories (
    id BIGINT(10) unsigned NOT NULL auto_increment,
    termsourcedid BIGINT(10) unsigned DEFA..., false) % line  891, file: adodb.inc.php
         ADOConnection.Execute(CREATE TABLE mdl_lmb_categories (
    id BIGINT(10) unsigned NOT NULL auto_increment,
    termsourcedid BIGINT(10) unsigned DEFA...) % line   89, file: dmllib.php
      execute_sql(CREATE TABLE mdl_lmb_categories (
    id BIGINT(10) unsigned NOT NULL auto_increment,
    termsourcedid BIGINT(10) unsigned DEFA..., true) % line 2302, file: dmllib.php
   execute_sql_arr(Array[14]) % line  635, file: ddllib.php
install_from_xmldb_file(/usr/home/markp/public_html/test-12/enrol/lmb/db/install.xml) % line  137, file: adminlib.php

Scroll to previous warningErrorScroll to next warning
(mysql): ALTER TABLE mdl_lmb_categories COMMENT='A table to track categories'  
Success
Scroll to previous warning  Installing lmb FAILED! Scroll to continue button
}}}
=== 
Normally the database dump contains instructions to drop existing table and recreate. Eg:
{{{
DROP TABLE IF EXISTS `adodb_logsql`;
CREATE TABLE `adodb_logsql` (
}}}
But somehow since the table was already there seems to be a problem with doing the 'create table' operation which it re-runs becuase it redoing an install. However, the ALTER TABLE operation is successful and all the table fields seem to be created OK.
And clicking [Continue] re-executes the whole sequence.
!!!Three options :
# Drop the LMB tables @@before@@ doing production import. This would have the same effect as #2.
# Drop LMB tables after import and @@regenerate@@ -- use Phpmyadmin to drop. +++[Code]>
{{{
DROP TABLE `mdl_lmb_categories` ,
`mdl_lmb_courses` ,
`mdl_lmb_crosslist` ,
`mdl_lmb_enrolments` ,
`mdl_lmb_people` ,
`mdl_lmb_raw_xml` ,
`mdl_lmb_terms` ;
}}}
=== Hit 'Notifications' and the LMB code recreates the database tables correctly.
# Exclude the enrollment/lmb code and copy in and execute after production db import.
''Which is best?'' -- the easiest to implement really.
{{ts{4/08/11 16:39}}}
@@OR@@ (and this is probably the best solution) just load the production database ''before'' logging in to the web interface.
|!coursesourcedidsource 	|!coursesourcedid 	|!crosssourcedidsource 	|!crosslistsourcedid 	|!crosslistgroupid|!Moodle course|
|Earlham College INB Banner 	|21061.201220 	|Earlham College INB Banner 	|XLS17201220 	| 345 |GEOS.POLS211 |
|Earlham College INB Banner 	|21973.201220 	|Earlham College INB Banner 	|XLS17201220 	| 463 |GEOS.POLS211 |
|Earlham College INB Banner 	|21290.201220 	|Earlham College INB Banner 	|XLS18201220 	| 347 |GEOS211 |

Excel file:
|Ali Fanjoy changed to Edington|Person	9689|username collision while trying to update|
|Aditya Krishnan|Person	63584|username collision while trying to update|
|Mia Nickel|Person 869140|username collision while trying to update|
!!Ali Fanjoy
Name : Alison Fanjoy
Username : fanjoal
email : fanjoal@earlham.edu
Id # : 9689
+++[Courses :]>
COMDOCS:2011 -- Community Documents, 
COMM-CPC-CVP:2011 -- Curricular Visioning Process, 
COMM-Nom:2011 -- Nominating Committee 2011-12, 
INTD201:201110 -- Intermediate Academic Writing, 
INTD205:201120 -- Seminar on Social Trends, 
JAPN201:201110 - Intermediate Japanese I
=== 6 courses
First access:	Sunday, 31 August 2008, 09:29 pm  (3 years 151 days)
Last access:	Monday, 14 November 2011, 01:40 pm  (77 days 1 hour)
----
Name : Alison Edington
Username : edingal
email : edingal@earlham.edu
Id : //9689//
+++[Courses :]>
COMDOCS:2011 -- Community Documents, 
MISC-DavisPP:2010 - Davis Projects for Peace, 
MISC-TOM:2011 - Teachers on Moodle, 
POLS481-2:201210 — Internship/Field Experience
=== 4 courses
First access:	Tuesday, 15 November 2011, 10:15 am  (76 days 4 hours)
Last access:	Monday, 23 January 2012, 03:34 pm  (6 days 23 hours)
!!!Moodle Fix
# Unenroll //fanjoal// from all the courses
# Enroll //edingal// into the same courses
# Delete user //fanjoal//
!!Aditya Krishnan
Username : ''akrishnanc65af7''
Email:	akrish11@earlham.edu
Id # : 63584
+++[Courses]>
Unique:
ART115-0:201210 — Art: Context & Meaning, 
MATH190-0:201210 — Discrete Mathematics, 
Same as correct username:
CS.CS128:201210 -- Programming & Problem Solving, 
ECON.MGMT.INST204:201210 -- Statistics for Economics, 
ECON201-0:201210 — Survey of Economic Thought, 
ECON.MGMT301:201220 -- Intermediate Macroeconomics, 
ECON305-0:201220 — Econometrics, 
MATH195-0:201220 — Math Toolkit, 
MATH288-0:201220 — Sophomore Seminar, 
CS256-0:201220 — Advanced Programming
=== 
First access:	Thursday, 11 August 2011, 02:19 pm  (172 days 2 hours)
Last access:	Thursday, 15 December 2011, 10:10 am  (46 days 5 hours)
----
Username : ''akrish11''
Email : akrish11@earlham.edu
Id : 63584
+++[Courses]>
Same as user //akrishnanc65af7//:
CS.CS128:201210 -- Programming & Problem Solving, 
ECON.MGMT.INST204:201210 -- Statistics for Economics, 
ECON201-0:201210 — Survey of Economic Thought, 
ECON.MGMT301:201220 -- Intermediate Macroeconomics, 
ECON305-0:201220 — Econometrics, 
MATH195-0:201220 — Math Toolkit, 
MATH288-0:201220 — Sophomore Seminar, 
CS256-0:201220 — Advanced Programming
=== 
>So Aditya is enrolled into all of her 2012 courses //twice//
First access:	Monday, 19 December 2011, 01:17 pm  (42 days 2 hours)
Last access:	Sunday, 29 January 2012, 01:29 pm  (1 day 1 hour)
!!!Moodle fix
This is a tricky situation. ''If'' all the course enrollments were the same I could just delete user akrishnanc65af7 but unfortunately this is the user that is enrolled into the fall course ART115-0:201210 — Art: Context & Meaning and has unique grades assigned to it.

!!Mia Nickel
Username : mnickel -- never logged in
No Courses

Username : 
email : nickemi@earlham.edu
+++[Courses]>
COMDOCS:2011 -- Community Documents
=== 
!!!Moodle fix
* delete user account //mnickel//
Initial tests with Betsy were encouraging. Test this now with the newest CLAMP version. Use {{{chemix-12}}}.
Note also that {{{test-12}}} is based on 1.9.11 so I can fool about with that as well. Perhaps use test-12 for initial testing and then chemix-12 to confirm that things work.
{{ts{29/06/11 14:18}}} lmb enrollment successfully installed in chemix-12
# Start from scratch and reset the base database : {{{~/moo-archives/lmb-archives]$ mysql -u root -p -D test12 <test12-lmb-reference.sql}}}. Success.
# Create a new category for new courses @@2011 -- Fall@@
# In Courses : Enrolments  make [[LMB settings]] and Enable & [Save changes]
# execute test-12/enrol/lmb/importnow.php with input file {{{icgorldi_743990.xml}}}
!!Result
* 555 courses created.
* 2426 Users created
Crosslisted courses +++[created correctly too:]>
{{{
SPAN/LTST418:201120 -- Topics in Latino/LatinAmerStud
LTST/SPAN426:201120 -- Topics in Lit & Text Analysis
GER/AAAS345:201120 -- Germans of Color	Edit Assign
ECON/PAGS351:201120 -- Econ,Institutions&Hist Chg
ECON/MGMT301:201120 -- Intermediate Macroeconomics
AWPE/AWPE100:201120 -- Riding Lessons
POLS/PHIL362:201120 -- Western Political Phil II
AWPE/AWPE110:201120 -- Bowling-Beginning
REL/FILM240:201120 -- Islam and Film
SOAN/WMNS364:201120 -- Gender:Anthrop-Perspectives
MATH/MGMT300:201120 -- Mathematical Statistics
GER/JWST344:201120 -- NewVoice/German Jewish Writers
REL/PHIL310:201120 -- Is Religion "T(t)RUE"?
ENG/THEA381:201120 -- Shakespeare
POLS/PAGS375:201120 -- Global Threats
}}}
=== 
A couple of strange things:
# no students enrolled into courses
# termcode still set to ''20'' (ie spring semester) even though the input file dated from May. How can I get the upcoming semester's material?
{{{
Crosslist membership:XLS36201210:11792.201210:lmb inserted:Using default Moodle settings:created course:set course name:complete
Crosslist membership:XLS36201210:11793.201210:lmb inserted:set course name:complete
Crosslist membership:XLS36201210:11794.201210:lmb inserted:set course name:complete
Crosslist membership:XLS36201210:11795.201210:lmb inserted:set course name:complete
}}}
Check on the course created and the enrollments
Created properly. Here's the {{{mdl_course}}} record:
|!id|!category|!sortorder|!fullname|!shortname|!idnumber|
|1357|103|2133701|PAGS.MGMT.ECON.~INST101:201210 -- Introduction to Economics|PAGS.MGMT.ECON.~INST101:201210|~XLS36201210|
{{{
2011-08-03T21:00:26 - Course:11058.201210:no lmb changes to make:no changes to make:error
2011-08-03T21:00:26 - Course:11059.201210:no lmb changes to make:no changes to make:error
2011-08-03T21:01:49 - Course:10050.201210:no lmb changes to make:no changes to make:error
2011-08-03T21:01:49 - Course:10052.201210:no lmb changes to make:no changes to make:error
2011-08-03T21:01:50 - Course:10056.201210:no lmb changes to make:no changes to make:error
2011-08-03T21:02:27 - enrolment:course id 11058.201210:person id 3045:lmb updated:user not found:lmb updated:error
2011-08-03T21:02:27 - enrolment:course id 11059.201210:person id 82311:lmb updated:user not found:lmb updated:error
2011-08-03T21:02:35 - enrolment:course id 10050.201210:person id 82311:lmb updated:user not found:lmb updated:error
2011-08-03T21:02:35 - enrolment:course id 10052.201210:person id 3045:lmb updated:user not found:lmb updated:error
2011-08-03T21:02:35 - enrolment:course id 10056.201210:person id 82311:lmb updated:user not found:lmb updated:error
}}}
The above are all Music courses with adjunct teachers who I suspect have not been assigned a user account yet.
{{{
2011-08-03T21:05:21 - enrolment:course id DEPINST:person id 100392:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 772787:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPCS:person id 8122:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPZIA:person id 8832:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPZPRS:person id 9845:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPHIST:person id 820390:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPZWMS:person id 838841:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPSOAN:person id 846906:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPENSC:person id 854224:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 854348:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPPSYC:person id 854349:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPINST:person id 855063:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 855064:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPMUS:person id 855128:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPZBUS:person id 855222:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPGPE:person id 855317:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPHIST:person id 857453:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPBIOC:person id 857551:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPPHYS:person id 857552:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPENG:person id 862650:lmb updated:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEP0022:person id 863283:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 863283:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPMATH:person id 863284:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEP0022:person id 863313:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 863313:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEP0022:person id 863322:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEP0022:person id 863324:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPAWPE:person id 863336:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPZWSL:person id 863338:lmb inserted:course/role context not found:lmb updated:error
2011-08-03T21:05:21 - enrolment:course id DEPLANG:person id 863345:lmb inserted:course/role context not found:lmb updated:error
}}}
I'm not sure what the course id {{{DEPxxxx}}} refers to. The only place where these are to be found is in the table {{{mdl_lmb_enrolments}}}
{{ts{16/12/11 14:30}}}
{{{
100% complete
Process has completed. Time taken: 388 seconds.
Processing drops for term 201220
Dropping 50 out of 5882 (1%) enrolments.
Exceeds the drop percent limit, skipping term.
}}}
Still not sure what //Exceeds the drop percent limit// means.
!Settings for Banner/Luminis Message Broker
!!Log Settings
Log file output location (blank for no logging): {{{/usr/home/markp/moodata/lmb/lmb-events-log-june.txt}}}
Store raw XML from LMB in table: [Only on error]
!!Banner XML Import
Banner XML file location: {{{/usr/home/markp/moodata/lmb/icgorldi_743990.xml}}}	
Treat the Banner XML file as comprehensive: ''check''
Banner XML folder location: {{{/usr/home/markp/moodata/lmb/}}}
Treat the Banner XML folder as comprehensive: ''check''
Use status files for XML folder: ''check'' +++[Help: Use status files for XML folder:]> 
This option creates files in the XML folder to indicate the current status of processing. This allows external scripts to be aware of the current status, so they do not modify the directory contents on a currently processing extract.

If this option is checked, then the Banner XML Folder must be writable by the webserver. To allow an extract to start, you must place an empty, writable file in the XML folder called 'start'. When the extract process has begun, the script will remove that file, and create a file called 'processing'. When the processing has completed, the 'processing' file will be removed, and a file 'done' will be created.
=== 
!!XML Parse - Course
+++[Help:]>
Parse Course Settings

Course full name: This contains the template for creating the full course name. See the additional help for this item.

Force course name on update: If this option is selected then whenever an update occurs to a course through LMB/Banner the name will be set as described in the 'Course full name' settings, even if the name has been manually changed. If is option is not set, then the name will only be set during initial course creation.

Course short name: This contains the template for creating the short course name. See the additional help for this item.

Force course short name on update: If this option is selected then whenever an update occurs to a course through LMB/Banner the short name will be set as described in the 'Course short name' settings, even if the short name has been manually changed. If is option is not set, then the short name will only be set during initial course creation.

Create new courses as hidden: Specify if new courses should be created hidden or not. Options:

*    Never: Courses will never be created hidden (ie always created visible)
*    Based on cron setting: Course will be created with it's visibility set based on the 'Unhide this many days before course start' setting. If the course start date has already past, or starts within the number of days specified, it will be visible. If it occurs further in the future, it will be created hidden.
*    Always: Courses will always be created hidden 

Course Categories: This allows you select what categories you would like courses to be created in. Options:

*    Terms: This setting will cause courses to be placed in categories with the name of their term/semester.
*    Departments: This setting will cause courses to be placed in categories with the name of their host department.
*    Department Codes: Uses the department short code, instead of full name.
*    Terms then Departments: This setting will cause courses to be placed in categories with the name of their host department, which is contained in a parent term named for the term/semester.
*    Terms then Department Codes: Same as Terms then Departments, but uses the department short code instead of its full name.
*    Selected: With this setting, select the existing category you would like courses to be placed in from the second drop down menu. 

Force category on update: This option will cause the category to changed to the above setting whenever a LMB/Banner update occurs, even if it has been manually changed.

Use Moodle default course settings: When creating a new course, use the default course setting options found in the Moodle admin settings, instead of the settings hard-coded in this module. Only has an effect in Moodle 1.9.5 and greater.

Make new courses enrollable: This sets wether new courses are enrollable or not.
=== 
Course full name: {{{[DEPT][NUM]:[TERM] -- [FULL]}}} 
: @@this should generate the same full name for the course as we've been doing so far@@
Course short name: {{{[DEPT][NUM]:[TERM]}}}
Create new courses as hidden: [Never] 
: we'll see whether this works!
Course Categories: [Selected] -- [2011 -- Fall] 
: here again what this //should// do is to dump all the new courses in a single category, in this case //2011 -- Fall//
Use Moodle default course settings: ''check''
Make new courses enrollable: ''check''
!!XML Parse - Crosslisting 
+++[Help:]>
!!!Parse Crosslisted Course Settings
The basic premise of crosslisting is to take many individual CRNs, and to produce one course. For definition reasons, we will call the combined course the 'crosslist' or 'crosslisted course' while the individual courses that make it up will be 'member courses'
Crosslisted course full/short name: This contains the template for creating the full course name for crosslisted courses. See the additional help for this item.
Full/Short name repeater: This contains the template for [REPEAT] section of the course full name, and will be repeated for each member course in the crosslist. See the additional help for this item.
Full/Short name divider: This is the string that will be placed between each member string defined in 'Full name repeater'. See the additional help for this item.
Crosslisted course type: This determines how crosslisted courses will be handled in Moodle. Options:
*    Merged course: This setting will cause the separate courses of the crosslist to be left empty, with no enrollments. All members will be enrolled directly into the crosslisted course.
*    Meta course: This setting will cause members to be enrolled in the individual courses, while the crosslsted course is formed by making a meta-course containing all the individual courses. 
Place users in merged courses into groups: If this option is selected, then users will be placed into groups with a merged course based on their original course number.
=== 
Crosslisted course full name: --{{{[XLSID] - [REPEAT]}}}-- {{{[REPEAT][NUM]:[TERM] -- [FULL]}}}
+++[Help :]>
The crosslisted name template works in the same way, as the 'Course full name' setting, with a few differences, as outlined here.
The crosslisted name template can contain the same flags as 'Course full name'. If any of these flags are found, they will be replaced with the corresponding data from the first course to join the crosslist
In addition to the standard flags, 2 new flags are added:
*    [XLSID] - The Banner identifier for the crosslist
*    [REPEAT] - The flag will be replaced by the string generated with the 'name repeater' and 'name divider' settings.
;Example: 
:Say you have two courses, 12345.200710 and 54321.200710, and they are crosslisted with the crosslist code XLSAA200710. If you set 'Crosslisted course full name' to '[XLSID] - [REPEAT]', 'Full name repeater' to '[CRN]', and 'Full name divider' to ' / ', the resulting full title of the crosslisted course would be 'XLSAA200710 - 12345 / 54321'
=== 
Full name repeater: 	--{{{[CRN]}}}-- {{{[DEPT]}}}
Full name divider: 	{{{/}}}
Crosslisted course short name: 	--{{{[XLSID]}}}-- {{{[REPEAT][NUM]:[TERM]}}}
Short name repeater: 	{{{[DEPT]}}}
Short name divider: 	{{{/}}}
Crosslisted course type: ''*'' Merged course
Place users in merged courses into groups: ''check''
:@@come up with a better way to name cross listed courses@@
: Current example is {{{PAGS.MGMT343:201110}}} -- maps to {{{[DEP].[DEPT][NUM]:[TERM] -- [FULL]}}} change to [DEPT]/[DEPT]
!!XML Parse - Person
+++[Help:]>
Parse Person Settings

Create user accounts for users not yet registered in Moodle: This setting will allow the LMB module to create new Moodle users as directed by Banner/LMB.

Only create users with email in this domain: If this setting has a value, only users who have an email address in the given domain will have an account generated for them by the LMB module.

Delete user accounts when specified in XML: If this setting it checked, LMB module will delete user records from Moodle when directed.

Username source: This determines what will be the username of created users

*    Full email address: The entire email address is used as the username.
*    Email name (before @): Use the portion of the email address before the @.
*    useridtype - Login ID: Use the value supplied in the userid tag marked 'Login ID'.
*    useridtype - SCTID: Use the value supplied in the userid tag marked 'SCTID'.
*    useridtype - Email ID: Use the value supplied in the userid tag marked 'Email ID'.
*    useridtype - Other: Use the value supplied in the userid tag marked as indicated in the text box. 

Fallback to sourcedid if username not found: Set the userid to the persons sourcedid if a username is not found. In general users will not know this number, so will not be able to login, but it will create the account as a placeholder until more complete data is received.

Consolidate existing usernames: If user cannot be found with the expected sourcedid(idnumber), but a username match is found, the accounts will be consolidated. Only use this option if you know that usernames are unique and will not collide.

Set authorization method to: Select what authorization method the LMB module should set accounts to.

Password source: This determines what will be the password of created users

*    None: Do not set an internal Moodle password. Use this option if you are using an external authorization method, such as LDAP.
*    useridtype - Login ID: Use the value supplied in the password field of the userid tag marked 'Login ID'.
*    useridtype - SCTID: Use the value supplied in the password field of the userid tag marked 'SCTID'.
*    useridtype - Email ID: Use the value supplied in the password field of the userid tag marked 'Email ID'.
*    useridtype - Other: Use the value supplied in the password field of the userid tag marked as indicated in the text box. 

Force name on update: Always force the users name to match the XML, even if it has been manually changed.

Force email address on update: Always force the users email address to match the XML, even if it has been manually changed.

Include telephone: Include the users telephone number in the Moodle profile, if supplied by the XML.

Force telephone number on update: Always force the users telephone number to match the XML, even if it has been manually changed.

Include address/city: Include the users address/city in the Moodle profile.

City: What to use as the city.

*    User XML 'locality': Use the value supplied by the XML.
*    Use given if 'locality' missing: Use the value supplied by the XML, or the given city if not specified.
*    Always use given city: Always use the specified city. 

Force address/city on update: Always force the users address/city to match the XML, even if it has been manually changed.
=== 
Create user accounts for users not yet registered in Moodle: ''check''
Only create users with email in this domain: 	{{{earlham.edu}}}
Don't error on skipped user due to email: 	''check''
Delete user accounts when specified in XML: 	''check''
Username source: 	[useridtype - Login ID]
Ignore username capitalization: 	''check''
Set authorization method to: 	[LDAP server]
Password source: 	[none]
Include address/city: 	''check''
City: 	[Use given if 'locality' missing] [Richmond, IN]
Force address/city on update: 	''check''
!!XML Parse - Enrolment
+++[Help:]>
!!!Parse Enrolment Settings
Assign Roles: This section lists the roles that members are assigned in courses in the XML on the left. On the right, select which Moodle roles you would like those to translate to.
Unenrol members from course when directed: Unenrol (or 'drop') members from a course when an appropriate XML message is received.
=== 
Assign Roles:
"Learner" (01): {{{Student}}}
"Instructor" (02): {{{Teacher}}}
Unenrol members from course when directed: ''check''
1. Setup log file:
{{{
~/lmb-test]$ touch chemix12-lmbevents-aug3.log
~/lmb-test]$ chmod 774 chemix12-lmbevents-aug3.log
~/lmb-test]$ sudo chown markp:www chemix12-lmbevents-aug3.log
}}}
!!!Banner/Luminis Message Broker settings:
# Log file output location (blank for no logging): {{{/usr/home/markp/lmb-test/chemix12-lmbevents-aug3.log}}}
# Store raw XML : [Only on error]
# Banner XML file location: {{{/usr/home/markp/lmb-test/icgorldi_606592.xml}}}
# Course full name : {{{[DEPT][NUM]-[SECTION]:[TERM] — [FULL]}}}
# Course short name : {{{[DEPT][NUM]-[SECTION]:[TERM]}}}
# Force course short name on update : ''check''
# Create new courses as hidden: [Never]
# Course Categories : [Terms then Departments]
# Use Moodle default course settings: : ''check''
# Make new courses enrollable: ''check''
# Crosslisted course full name: {{{[REPEAT][NUM]:[TERM] -- [FULL]}}}
# Full name repeater: {{{[DEPT]}}}
# Full name divider: ''.''
# Crosslisted course short name: {{{[REPEAT][NUM]:[TERM]}}}
# Short name repeater: {{{[DEPT]}}}
# Short name divider: ''.''
# Crosslisted course type: ''*'' Merged course
# Place users in merged courses into groups: ''check''
# Create user accounts for users not yet registered in Moodle: 	''check''
# Username source: [useridtype - LoginID]
# Consolidate existing usernames: ''check'' {@@important@@ -- accounts won't be created without this.}
# Set authorization method to: 	[LDAP server]
# City: [User 'XML' locality]
# "Learner" (01): [Student]
# "Instructor" (02): [Teacher]
# Unenrol members from course when directed: : ''check''
{{ts{6/07/11 14:54}}}
Use new {{{test-12}}} with {{{moodleDB-peace-june29.sql}}} database loaded -- see [[Update code]].
@@2962 Users@@
+++!![Errors]>
User create error
{{{
2011-07-06T13:34:20 - Person:13086:inserted into lmb table:username collision, could not create user:error
}}}
Enrollment errors:
{{{
2011-07-06T13:40:03 - enrolment:course id 10342.201210:person id 13086:lmb inserted:user not found:lmb updated:error
2011-07-06T13:40:03 - enrolment:course id 10338.201210:person id 13086:lmb inserted:user not found:lmb updated:error
2011-07-06T13:40:03 - enrolment:course id 11674.201210:person id 13086:lmb inserted:user not found:lmb updated:error
2011-07-06T13:40:03 - enrolment:course id 11670.201210:person id 13086:lmb inserted:user not found:lmb updated:error
2011-07-06T13:40:03 - enrolment:course id 11681.201210:person id 13086:lmb inserted:user not found:lmb updated:error
}}}
So it seems that student/faculty enrollment is failing because users cannot be created.
Looking in {{{icgorldi_751856.xml}}} we find :
{{{
                        <id>13086</id>
                <email>krshaw08@earlham.edu</email>
}}}
and indeed krshaw08 user account is present in the moodle database.
How to handle this?
=== 
!!!Change settings
From the Help file:
<<<
Only create users with email in this domain: If this setting has a value, only users who have an email address in the given domain will have an account generated for them by the LMB module.
Delete user accounts when specified in XML: If this setting it checked, LMB module will delete user records from Moodle when directed.
Username source: This determines what will be the username of created users
<<<
So: 
; Only create users with email in this domain: earlham.edu
: Leave this blank 
: I'm hoping that this also means that a blank value will lead to no users being created.
----
{{ts{6/07/11 15:30}}}
* reload {{{lmb-test/test12-peacedb.sql}}} and rerun lmb enrollment with {{{icgorldi_751856.xml}}} and the following changed settings:
<<<
Log file output location (blank for no logging): {{{/usr/home/markp/moo-archives/lmb-archives/test12-lmb-events-july6.txt}}}	
Only log errors: 	''uncheck''
Store raw XML from LMB in table: ''Only on error''	
Treat the Banner XML file as comprehensive: ''uncheck''
Banner XML folder location: ''blank''
Course Categories : Departments
For cross listed courses:
fullname and shortname divider : ''.''
For XML Parse - Person : 
Create user accounts for users not yet registered in Moodle: ''check'' {since these will be freshmen}
Consolidate existing usernames: 	 ''check''
<<<
Start : 1997 Users
[[Course hiding and MyMoodle]]
@@Great Success@@ -- courses created, and enrollments teacher + student working.
Finish : 3086 Users
So, //only// 1089 new user accounts got created. I wonder if there's a way to track those -- yes, see [[LMB test #3]]
Note that the log file was ''not'' created and I pressed [Continue] before I realised so I lost all the logging information.
''Tomorrow'' 
Use chemix-12 to test Betsy's new xml data  dump. [[LMB test #3]]
{{ts{7/07/11 11:05}}}
Use new Luminis file {{{icgorldi_751994.xml}}}
I took a look at the database with phpmyadmin. I could create a list of extra user accounts added by doing a dump :
<<<
{{{
SELECT `username` , `firstname` , `lastname` , `email`
FROM `mdl_user`
WHERE `auth` = 'ldap'
}}}
<<<
Tried doing this and saving as Excel spreadsheet. It worked. So, basically do the dump after importing the production database and then again after running the xml and then diff the two.
Summary of procedure:
* Use chemix-12 code and chemix12 database. 
* Drop tables lmb* +++[code:]>
{{{
DROP TABLE `lmb_categories`, `lmb_courses`, `lmb_crosslist`, `lmb_enrolments`, `lmb_people`, `lmb_raw_xml`, `lmb_terms`;
}}}
=== Option #1 in [[LMB Update problems]]
* import {{{moodleDB-july7.sql}}} and tweak config +++[code:]>
{{{/lmb-test]$ mysql -u root -p -D chemix12 <moodleDB-july7.sql}}}
This did not work. That is, the database did not seem to load properly. But no errors. Strange. 
duplicate set of 'mdl' tables! Because od this in //config.php// {{{$CFG->pchemixix    = 'mdl_';        // Pchemixix to use for all table names}}}
Evidently my global substitution went wrong! revert to {{{$CFG->prefix    = 'mdl_'; }}} and drop all the tables and do the import again
=== This worked. And no mdl_lmb table problems either. Move departmental categories into hidden 2010-11 category. 2028 users. 30 more than in June. Wierd.
* dump/save database. {{{lmb-test]$ mysqldump -u moodlebackup -p -C -Q -e chemix12 >chemix12-peacedb-july7.sql}}}
* run LBM enroll with {{{icgorldi_751994.xml}}}
* compare results to test-12
!!LBM Configuration
Log file output location (blank for no logging) : {{{/usr/home/markp/lmb-test/chemix12-lmbevents-july7.txt}}}
Store raw XML from LMB in table: [always]
Banner XML file location: {{{/usr/home/markp/lmb-test/icgorldi_751994.xml}}}
;Consolidate existing usernames:
:Existing user accounts in the database have no idnumber since they are created with LDAP. Consolidate matches these user accounts with the ones from banner/luminis. I think the previous failure was because duplicate accounts were attempted to be created with the same username.
@@Import successful. @@
But no reposrt created yet again.
3090 users

<<notes>>
Using phpmyadmin I saved the list of ldap users in csv format. Just out of interest I generated a list of non-ldap users (ie manual accounts). Besides the ones I expected (eg wesadmin, amyadmin etc) there were some that have been created on a courses restore. I propose deleting all these records in the new system.
Can use Dlete User and do it via the Moodle admin interface.
{{ts{8/07/11 14:18}}}
I had the ITAM student Julia login to satta.earlham.edu (the luminis test server) and enroll into  ~ART115 and ~EDUC485, and drop ~ENG302. However, none of these actions triggered anything on the moodle side and it seems that there's a problem on the Luminis side. Betsy is going to look into this.
!!Wrinkles
Courses are created //without// section numbers. For example, there are 4 BIOL111:201210 courses. At first this struck me as strange since Moodle generally insists on a unique shortname, but then I took a look at the Course id and this is indeed unique. So it looks like you can have duplicate names if you have unique course id. But it's really important to have the section number with the course //especially// with IP and ES courses since this provides the unique label for people to see.
!!Fix
In Courses : Enrollments : LMB
;Course full name:
:[DEPT][NUM]''-[SECTION]'':[TERM] -- [FULL]
;Force course name on update: 	
:Course short name: [DEPT][NUM]''-[SECTION]'':[TERM]
How does triggering work? Here's what Betsy writes:
<<<
How it works is that when a change gets made in Banner, say a student gets enrolled(registered) in a course, there are triggers that tell Banner to sync the event up with Luminis.  As soon as Luminis sees there was an event synced over, it then sends the information, using the message broker, over to moodle.  You can't make changes the other way around.  It is set up as an outgoing http connection from the luminis server to moodle.  The liveimport.php on the moodle server is what *receives* the update that was just made in Banner and then it should update Moodle through liveimport  

Its not a cron job that runs, its using the messaging gateway and messaging broker components within Luminis to do the event syncing.  Basically then Luminis is acting as the intermediary in the process.  Its a real time processing of events.  I guess we would have to do some testing to see what type of a load it puts on the moodle server.  I can ask Regina what type of a load they see on their Moodle server during registration times.  
<<<
And :
<<<
I got an email back from her and she said that they have not seen any performance impact during peak registration times, but she also said that they don't change the active term in Banner until after the registration period is closed, so those events are actually not synced over during that period of time.  I'm guessing, although she's going to get more info from the moodle administrator, but they most likely do a fresh import of the xml file at the beginning of each semester.    
<<<
My reply:
<<<
    By 'active term' do you mean termcode? So they leave termcode at 201120 for example until *after* registration and then switch to 201210 ? That would mean that no moodle courses would get any enrollments until after registration which would mean that teachers could not prepare their courses. I don't get it.
> Yes.  Active Term is the term code.  And yes, they don't put the new term in as Active for Synchronization until after everyone has registered.    
    So, if there's no synchronization, why bother? I don't understand. Maybe they switch the system on after registration and do it all in one fell swoop with a fresh xml file? 
>Good question on why bother.  I sent a reply back asking that question about why they wait.  I'll let you know. That's the whole reason I like the event syncing.  It works and we don't need to think about keeping the systems synced manually. 
    Should we do the same do you think?
>No, not unless there is a good reason to do it.  I set the active term as soon as I can, or as soon as Julie says, yes turn it on, which for the fall it is already turned on.    
<<<
And :
<<<
It looks like they do an upload in mid-June of all the course  information for the fall.  She said the first year they set it up,  having events turned on during registration and trying to have all the  information feed over through the syncing did cause performance  problems on the moodle server for them.  What they do now, is import  all fall courses in June after grades have been submitted and the  spring semester has closed.  That gives the teachers time to work on  and develop their courses over the summer.  Then they wait until right  after registration to turn the event syncing on.
<<<
[[Flax|http://docs.moodle.org/en/Flax_module]] module:
<<<
FLAX helps automate the production and delivery of practice exercises for learning English. Teachers can easily create exercises from the textual content of digital libraries. They can also create their own digital library collections, add them to their course as resources, and, optionally, share them within their institution.
<<<
The Scheduler module has two language strings missing in both //en_utf8// and //en_us_utf8// language modules:

[img[graphics/scheduler-string-missing.png]]

Find out what these strings are meant to be .........
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0.1 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{

var MINS  = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS  = 24 * HOURS;

if (!config.lessBackups) {
	config.lessBackups = {
		// comment out the ones you don't want or set config.lessBackups.modes in your 'tweaks' plugin
		modes: [
			["YYYY",  365*DAYS], // one per year for ever
			["MMM",   31*DAYS],  // one per month
			["ddd",   7*DAYS],   // one per weekday
			//["d0DD",  1*DAYS],   // one per day of month
			["h0hh",  24*HOURS], // one per hour
			["m0mm",  1*HOURS],  // one per minute
			["s0ss",  1*MINS],   // one per second
			["latest",0]         // always keep last version. (leave this).
		]
	};
}

window.getSpecialBackupPath = function(backupPath) {

	var now = new Date();

	var modes = config.lessBackups.modes;

	for (var i=0;i<modes.length;i++) {

		// the filename we will try
		var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
				'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

		// open the file
		try {
			if (config.browser.isIE) {
				var fsobject = new ActiveXObject("Scripting.FileSystemObject")
				var fileExists  = fsobject.FileExists(specialBackupPath);
				if (fileExists) {
					var fileObject = fsobject.GetFile(specialBackupPath);
					var modDate = new Date(fileObject.DateLastModified).valueOf();
				}
			}
			else {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
				file.initWithPath(specialBackupPath);
				var fileExists = file.exists();
				if (fileExists) {
					var modDate = file.lastModifiedTime;
				}
			}
		}
		catch(e) {
			// give up
			return backupPath;
		}

		// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
		// June file on disk that's more than an month old then it must be stale so overwrite
		// note that "latest" should be always written because the expiration period is zero (see above)
		var expiry = new Date(modDate + modes[i][1]);
		if (!fileExists || now > expiry)
			return specialBackupPath;
	}
}

// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
	return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}

//}}}

Posted this message ([[Librarian Moodle Support role|http://moodle.org/mod/forum/discuss.php?d=129702#p567700]]) to the Roles & Capabilities Forum on moodle.org:
<<<
I am trying to create a well functioning site-wide role that allows my Reference Librarians to assist teaching faculty in any course on the whole site but does not list them as participants or send them News Forum messages. Originally I based this role off the Teacher (editing) role but I am at a loss to figure out which Capability is employed to control visibility in Participants. Currently there are problems because the Librarian user is listed as a participant in every course and gets all the course emails.
Any ideas how to fix this?
Mark
<<<
Reply from Helen Foster:
<<<
Hi Mark,
All users with the view course capability are listed as course participants. However, you can assign the librarian role as a hidden assignment, then students (and other users without the capability to view hidden assignments) won't see librarians listed as course participants.
For librarians to not receive course emails, the initial subscriptions capability should be not set. Please see [[Capabilities/mod/forum:initialsubscriptions|http://docs.moodle.org/en/Capabilities/mod/forum:initialsubscriptions]] for more details.
<<<
----
<<<
My response:
>Thanks Helen,
>Very helpful indeed. But:
>> you can assign the librarian role as a hidden assignment
>I'm not sure what this entails. Do I need to create a hidden assignment in each course to assign the librarian role to? I'm puzzled about how to accomplish this operation.
>Thanks once again.
>Mark
<<<
----
<<<
>Mary Cooch interjected:
>>Hi Mark :-) I think there is a semantic issue here - assignments
>>As well as meaning the task students are set, assignment refers to how you assign a role to somebody -and so if you look at the docs here you can assign someone a hidden role (which is what Helen suggested you do) http://docs.moodle.org/en/Assign_roles#Hidden_assignments
<<<
Looking for something else on moodle.org I came across [[this discussion|http://moodle.org/mod/forum/discuss.php?d=132344]]:
<<<
I have a 'Librarian Moodle Support' role for which I would like to add the ability to 'Login As' any user (particularly teachers). To do this I think that the user needs access to the Site Administration block and then the ability to go to Users : Accounts : Browse list of users. The complication is that our site is set to Force users to use MyMoodle so that they never see the Front page. How can I allow the Librarian Moodle Support role to see the Front page and thereby gain access to the Site Administration block and Browse list of users?
<<<
I got this response:
<<<
Re: Role to Login As
by David Sturrock - Sunday, 13 September 2009, 06:00 PM
 	
Hi Mark

We had a similar requirement for category managers. Add the site administration block to the myMoodle page as a sticky block. It will only be available to users who have an administration capability set at site level and only show the links related to that capability (such as browse users).
<<<
So, that's it sorted :
# give admin capability at site level to Librarian role
# add site admin block to MyMoodle sticky page.
Plugins on this site will always be free of charge and open source. They are licensed under TheBSDLicense.
This looks more like what Brent could do with.
http://moodle.org/mod/data/view.php?d=13&rid=1021&filter=1
[img[http://moodle.org/pluginfile.php/108/mod_data/content/11098/lbgal-2.png]]
<<<
This resource allows you to create 'Lightbox' enabled image galleries within your Moodle course. The Lightbox system is a set of scripts than can be used to apply nice effects to image galleries - more info can be found here.

As a course teacher, you are able to create, edit and delete galleries. The main configuration option involves telling Moodle which directory contains the images you want to include in the gallery. Small thumbnails will then be generated, which are used for the thumbnail view of the gallery.

Clicking on any of the thumbnails brings that image into focus, and allows you to scroll through the gallery at your leisure. Using the Lightbox scripts creates nice transition effects when loading and scrolling through the images.
<<<
Downloaded {{ts{15/12/10 14:36}}}
See also [[Image Directory Slideshow]]
!!!Known Issues
There's a different link to use in order to upload files >128Mb <512Mb into Moodle:

https://moodle-admin.earlham.edu:8080

{{{
@charset "utf-8";
.small_text {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 0.8em;
}
.bold {
	font-family: Arial, Helvetica, sans-serif;
	font-weight: bold;
	font-size: 0.9em;
}
}}}
{{ts{14/04/11 14:47}}}
There @@is@@ a version for moodle 1.9. It looks like we could get the info we want directly from Luminis.
* Here's a link to the [[download|http://moodle.org/mod/data/view.php?d=13&rid=849&filter=1]]
* Here's [[the discussion|http://moodle.org/mod/forum/discuss.php?d=140266]]
* And here are all the [[bug fixes|http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&&pid=10033&component=10593&sorter/field=status&sorter/order=DESC&sorter/field=updated&sorter/order=DESC&sorter/field=issuekey&sorter/order=ASC]]
To be clear the events we can do are :

   1. Create Person Data
   2. Create Course Data
   3. Create Cross-List Group Data
   4. Create Cross-List Membership Data
   5. Create Course Section Data
   6. Create Student Enrolment Data
   7. Create Faculty Assignments

The Events that are not supported are

   1. Create College Data
   2. Create Department Data
   3. Create Department Membership Data
   4. Create Term Data
   5. Grade Exchange (something that is in progress)

+++[From the Readme:]>
!!GENERAL
This enrollment plugin can digest XML from the Luminis Message
Broker, allowing realtime Banner to Moodle integration, as well as full XML
extractions from Banner.

You can use this module with or with Luminis Message Broker. If you do not use
Luminis Message Broker, you can instead use this module to import XML files from
banner on a manual or automated basis.

This is a heavily modified version of the IMS Enterprise plugin.
=== 
!!!for Moodle 2.0
From Eric Merrill in [[this post|http://moodle.org/mod/forum/discuss.php?d=172797]] alpha version for moodle 2.0. From +++[the Readme:]>
Luminis Message Broker enrollment Module.
Version: 2.0.0a4
Moodle version: 2.0.x
Maintainer: Eric Merrill (merrill@oakland.edu)
!!CHANGES
Since 2.0.0a3
Fixes to errors when use has no password
Fixes to errors when use has no email
Fixes to enrol/unenroll errors
Tools fixes
Fix error when no department found
Fixed error when no username
Help strings added to config page

Since 2.0.0a2
No email address now caught
term sourcedid converted to 128 varchar
!!TODO
Prune XML table
* Reprocess enrolments (enrol/unenrol need to be done in plugin now)
Check into term length dependancies
Load config descriptions
Filter Terms
=== 
Will this work with our system?

MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some plugins designed to improve usability and provide a better way to organise your information. For more information see http://mptw.tiddlyspot.com/.
From [[other ideas for development|http://mahara.org/node/198]]:
<<<
1. Ability for a view to have more than 1 page. Similar to igoogle etc a user could add additional tabs along the top of their view to be able to spread their content. This gives Mahara very basic publishing options similar to Wordpress blog/pages combo.
2. Ability to always be able to comment on individual blog posts. If the blog is included in the view as a single artifact, currently you can only post feedback on the entire blog, not against individual posts. Or have I missed a setting/option somewhere?
3. Blog post archive and tag linking block
4. Ability to pulish RSS feeds from each view/block/feedback. At the moment we can only bring RSS feeds into Mahara - we need to be able to publish them as well.
<<<
With comment:
<<<
I see the blog feedback issue as critical otherwise we can't really claim to have a comprehensive blogging tool, as allowing comments at post level is a standard component of any blog tool. And to force users to individually "publish" each post in order to be able to receive this type of feedback just goes against any commitment we have to usability.

If RSS feeds only work for views published publicly then I'd be happy. Even more specific if they only work for blogs in public views I'd be satisfied. :-)

Why? I see Mahara's central hook for gaining users in institutes of our size (3000 fulltime equivalent students) as the blog tool, with all the other aspects of the system as additional advantages once we get users comfortable with the general toolset. For this reason I see a free service like the wordpress based edublogs as real competition for institutional use, 
<<<

<<tag 2012>> <<tag moodle-12>> <<tag [[moodle_2010]]>> <<tag [[FLAG]]>> <<tag [[themes]]>>
[[Welcome]] [[Download]] <<tag Plugins|systemConfig>> [[More Plugins]] [[What's New]] [[Blog|New Blog]] MonkeyGTD [[Donate]] [[Contact]] [[License]]
+++[email to Tom Steffes and Aaron]>
Dan Graves has conducted a unique Ford Knight research project this semester which I have been assisting in a small way. He has canvassed virtually all the people in Richmond concerned with music and built databases of Musicians, Venues and Performances in a Moodle course. My role has been to create the database frameworks using the Database activity module and to create reporting 'presets'. He is nearing the end of this project and has found that there is considerable interest in the local community to access these databases. Specifically, the Whitewater Valley Arts Fusion website (maintained by Summersault under the aegis of the Richmond Arts Council Task Force with Len Clark and Lynn Knight on the board) would like to link to these databases. Technically it's not difficult to set the Moodle course to Guest access, hide the components that we don't want to expose and make the 'course' read only access. I don't see there being a huge amount of traffic and it would certainly provide a good community outreach. However, I didn't want to make this decision without consulting with you chaps first.
=== 
!!Options
# Make the course open to Guest user and link from Whitewater Arts Fusion web site
** Hide unwanted components
** disallow changing presets by Guest
** do we want to expose Moodle site to outside users?
** no real traffic issues
# Create separate Moodle instance to host course
** not too difficult to set up
** intrinsically more secure
** could have the possibility of public signup and adding to the database
Site Admin : Modules : Blocks 
!!Manage Blocks
Hide the following:
* BLog Menu
* Blog Tags
* Courses
* Current Courses List
* Flickr
* Loan Calculator
* Mentees
* Network Servers
* Random Glossary Entry
* Section Links
* Social Activities (?)
* Tags

<<notes>>
Bob Puffer disables @@Messages@@! WOW!
New Youtube block!
!!Background
Two years ago in Feb 2008 I met with Denise and Aaron from ECS to discuss the migration of the moodle system from the Sun server to new server hardware (documented [[here|http://www.earlham.edu/markp/miss/#%5B%5BECS%20-%20ITAM%20meeting%20re%20services%5D%5D]] and [[here|http://www.earlham.edu/markp/miss/#%5B%5BECS%20-%20ITAM%20Meeting%20%232%5D%5D]]). We decided on a three tier system of hardware; the moodle production server on a fast capable quad core Intel hardware, a test server on similar but less powerful server, and my sandbox server which I recycled from Charlie Peck. Randy Schultz configured the sandbox server with ~FreeBSD so that we could be sure of the same environment as the Test and Production servers. The agreement was that I would create the whole moodle system on my sandbox, then zip it up into a tar file, hand it off to Aaron who would install it onto the Test server. When it had been tested he would then move it to production. In practice, however, this system has not worked well. Aaron is almost never available to do any copying when I need it, and Denise is often unavailable to consult. Plus, when I have to get Denise's permission to ask Aaron to do anything on the server systems this can take ages just to find an available time slot. The problem is that there are always small things that one misses and so I always have to make tweaks after the system has gone onto the Test server. And recently Aaron has been so busy that he would not put the code into production before the start of the spring semester even though it was ready on the Test server. This has been massively frustrating since I spent the whole of December on updating Moodle to correct an important security hole, and that time is now wasted.
!!Survey of Moodle admins in NITLE
I vented my frustrations with the current 'system' to a colleague of mine at Luther, Bob Puffer. His comments were threefold:
# He said that it was reasonable to expect to upgrade the server in December because of bug fixes, security fixes, enhancements, and improvements made between the summer and end of year. (Especially going from 1.9.5 to 1.9.7 to fix the massive security hole of administrator password exposure).
# When I told him that I did not have any access to the server and could not tweak the config.php he thought that that was not a reasonable posture
# He suggested that I poll Moodle admins from NITLE to assess their experiences. What follows is a summary of responses to 4 questions I posed in a NITLE Moodle Exchange [[discussion forum|http://moodle.nitle.org/mod/forum/discuss.php?d=2926]]
!!!Summary of responses to ((NME(NITLE Moodle Exchange))) poll
8 Moodle admins replied to the forum question (see below). Of these, all but one had sudo access (ie can execute a command with root privileges) to the Moodle production server. The majority situation seemed to be that the Moodle administrator was also the web application developer or analogue and had responsibility for Moodle code updates as well as other web services. In these four cases (Lafayette, Smith, Albion and Luther) other computing system groups such as Networks and Systems keep the hardware and system software up to date and secure while the Moodle admin is responsible for the care and feeding of the moodle code. All of these have //sudo// access to their production moodle server. At Hope and Macalaster it is the system administrator's job to update the Moodle code. Finally, Colby college use a Virtual Machine (VM) to run Moodle which is operated and maintained by the systems group who are "very responsive". Although they do have shell and ftp access to the moodle VM they do not have sudo access. However, the system group does install the latest moodle version every semester.
!!Discussion
Clearly, I am in a unique position here. When Rowan Littell was system administrator he setup and maintained both the Moodle server and the code. He even performed the course backups. Since he left I have taken on the responsibility for updating Moodle versions and applying patches and installing new modules so that Earlham faculty would have the most reasonably up to date version of Moodle to work with and not be left running an outdated, buggy and unsupported system. Few colleges have the Moodle administrator also responsible for faculty training and support. It seems to me that I am effectively being punished for doing this by the denial of the tools I need to complete the job, ie access to the Test and Production Moodle servers. Melinda Kraft's (Albion) comment sums it up 
<<<
"I don't think it is unreasonable to expect a higher level of access for yourself as a Moodle admin, at least for the application updates. As long as you have access to backup the current apps and databases before applying an update, it seems to me a sys-admin would be happy to have that off their plate." 
<<<
I heartily agree with this. Any reasonable person would expect to have the tools to complete the job; in this case, sufficient access to the Moodle server to apply code updates, tweak the config.php, add and modify themes, add other applications such as statistics gathering (which right now we cannot do) and of course backup the code base before applying changes.
!!What I ask for
All I'm asking for is the following:
# A user account on the Moodle Test and Production servers. This will enable me to conduct testing on moodle modules (such as Jmol) which faculty have been asking for. Currently, though I can install these into Moodle systems on my sandbox server, this is only accessible from within the Lilly building (ie subnet .7).
# Configuration of the Apache config with a virtual host, or alias or other means to run moodle from this user account. Thus sudo access will not be required which helps security.
I understand that the Test and Production servers will only be accessible via Paz but I do have an account on Paz and I'm familiar with using Paz to get to other places. I don't think that these are unreasonable requests; security would be virtually unchanged and if I screw things up then I will face the consequences.

!!Data
[[Access to server by Moodle admin]]
<<<
The Media Player plugin activity module for Moodle is a UI tool to deploy the JW FLV Player 5.0 in Moodle.
It does the following:
* Deploys FLV, MOV, MP4, F4V and other web video formats and supports H.264 AVC
* Supports a range of plugins and manages their settings to make using the Media Player module as easy as possible
* Supports playlists and other media types such as MP3, JPG, GIF, PNG and SWF
* Can play video directly from YouTube.com, Ted.com and any sites that have the necessary crossdomain.xml policy file in place
* Can be used with media servers and a variety of types of media streaming
* Comes with a wide selection of UI skins to change the visual appearance of the player 
<<<
* [[Site|http://code.google.com/p/moodle-mplayer/]]
* [[download|http://code.google.com/p/moodle-mplayer/downloads/list]]
* [[Matt Bury's demo course|http://matbury.com/moodle/course/view.php?id=9]] (login as Guest)
!Mediabird
From Deutschland we have [[Mediabird next generation workspace|http://www.mediabird.net/en/]]
<<<
Adds collaborative note taking functionality to the Moodle environment.
Allows for taking notes related to any page of a Moodle course and to collaboratively review and discuss them later on.
<<<
* [[screenshot|http://docs.moodle.org/en/images_en/thumb/2/2c/MediabirdStudyNotesOverlay.png/800px-MediabirdStudyNotesOverlay.png]]<<imagebox>>
* download from [[modules and plugins page|http://moodle.org/mod/data/view.php?d=13&rid=2354&filter=1]] not in CVS
* discussion -- [[Introducing collaborative note taking based on Mediabird technology|http://moodle.org/mod/forum/discuss.php?d=122050]]
** [[this note by Chardelle Busch|http://moodle.org/mod/forum/discuss.php?d=122050&parent=623266]] is important methinks
* [[Using Mediabird study notes docs|http://docs.moodle.org/en/mod/studynotes/view]]
* [[annotating PDFs|http://www.mediabird.net/fileadmin/Mediabird-PDF-Annotation-Concept.pdf]] //very powerful//
To have this work on every page of the course I would need to add some code to the default theme +++[Theme adjustments]>
!!!Theme adjustments for in-place note taking
Using the included theme
If you don't mind about the theme you use, you may easily
* go to Appearance in the admin panel
* select Theme Selector and choose standardmediabird 
Note: If the theme does not appear in the list, make sure you've extracted it from the Mediabird Study Notes packages into the theme folder of your Moodle installation.
!!!Using a custom theme
If you are using your own theme, all you need to add is the following line in the file header.html from your theme folder
{{{
<?php
  include_once($CFG->dirroot.'/mod/studynotes/ext/overlay_snippet.php');
?>
}}}
after the line
{{{
<div class="navbar clearfix">
}}}
which is located near the middle of the file. 
=== 
!!Testing
* downloaded //studynotes_package.zip// on {{ts{14/04/10 12:03}}} to {{{markp/2010-test-mods/mediabird}}}
In [[CLAMP LAE|Testing out CLAMP LAE 1.9.7]] test site, installed [[Mediabird Study Notes]]
* Switch on debugging from Front Page: Administration : Server
* Switched theme to 'Standardmediabird'
* Add activity MediaBird Study Notes
** Errors:
{{{
Notice: Undefined variable: myCards in /usr/home/markp/public_html/clamp-LAE/mod/studynotes/ext/overlay_snippet.php on line 69
Notice: Undefined variable: theirCards in /usr/home/markp/public_html/clamp-LAE/mod/studynotes/ext/overlay_snippet.php on line 74
}}}
And when I try to add notes I get [[this screen|graphics/mediabird_app_error.png]]<<imagebox>>
It turns out that the Open Source version is no longer supported but [[the 'about' page|http://www.mediabird.net/en/about]] does not say anything about the cost.
----
!!!Uninstalled {{ts{23/04/10 15:44}}}
Removed via Site Administration : Modules : Activities : Manage activities [delete]
Manually remove theme/standardmediabird
[[Contrib-1988|http://tracker.moodle.org/browse/CONTRIB-1988]] has progress for all the non-core modules/blocks being migrated.
Hope are are using Ubuntu linux from [[their system|Hope Linux config]]. Could we do the same with RedHat on a VM server?
Aaron would need to:
# Create a VM server for moodle test and one for moodle production ''and'' one for a sandbox test (where I can have access)
# Install RedHat in exactly the same config on all (presumably one can clone a VM)
# Install Apache, php etc on all three.
# Conduct some benchmarks with moodle code to make sure that performance is up to snuff
# Install the database drivers and make sure that it all works [[Hope Linux config]]
Then we can start to test out the user creation and course creation.
Need icons for:
* Attendance
* File/Files
* ForumNG
modules
-- create pix folder in each mod and place gif/png? icon
[[activities without icons|graphics/activity_modules_installed.png]]<<imagebox>>
!Fix
Switch on pix search with Site Administration : Miscellaneous : Experimental -> Smart pix search [check] -- [[activity icons displayed|graphics/activity_module_icons.png]]<<imagebox>>
Show user pics : check
>If enabled, user pictures are displayed next to each post and comment.
* Disable the built-in blog system:
> Site Admin : Security : Site policies -- >  Blog visibility : @@disable blog system completely@@
Following a recent Glitter meeting at Hope College I came back with some dead useful Moodle stuff, including their installation guide. It looks like they install both Questionnaire //and// Feedback modules (plus Attendance). Subject specific stuff include:
* [[SWF Activity module|http://code.google.com/p/swf-activity-module/]]
* [[Jmol resource type|http://moodle.yeovil.ac.uk/course/view.php?id=1927&username=guest]] and [[filter|https://github.com/geoffrowland/moodle-filter_jmol/tree/MOODLE_19_STABLE]] + [[docs|http://docs.moodle.org/en/Jmol_filter]]
* [[Java Molecule Editor|http://moodle.org/mod/data/view.php?d=13&rid=296]] question type -- good for quizzes.
* [[Nanogong|http://gong.ust.hk/nanogong/index.html]]
I have asked ({{ts{22/03/11 13:33}}}) about their experience with the +++[chemistry stuff:]>
Dean, Jeff,
While reading through the excellent and detailed setup instructions for Hope Moodle I noticed a number of interesting modules that you use and I wondered whether you had any comments to make:
   1. Jmol. When I last looked at this (quite a while ago I must confess) the bundled Jmol code was rather out of date compared to the one that worked with moodle. How has this worked out for you in practice? Are the Chemix faculty pleased with the way it works?
   2. Have they found the 'Java Molecule Editor' useful?
   3. Nanogong -- last I heard that was rather flakey. What's been your experience? I think if I were to install it I'd use just the application rather than the filter.
Cheers

Mark
=== 
Also sent +++[this email]>
Last week I was at a small GLCA I.T get together at Hope College. I talked with some of my mates in IT about their Moodle setup and they kindly gave me a document they use to steer the installation and configuration of their moodle instances (they use a new version and start from scratch every semester). Reading through this it emerges that they install a number of modules that are focussed on Chemistry. So, my question to you chaps is this. If you are willing to test these modules out (on a moodle version on my sandbox server) I'd be willing to install them as part of the production moodle so that they could be used with students.  Here's what's involved:

   1. Jmol resource type. http://docs.moodle.org/en/Jmol_resource_module.
      This allows the teacher to upload a molecule definition in Jmol format and have it be displayed interactively. For example:
   2. Jmol filter (http://docs.moodle.org/en/Jmol_filter) allows you to link to a molecule data file (previously uploaded to the site) from a Web page resource or from the Course outline. Can also be used in Quiz questions.
   3. Java molecule editor question type. See http://moodle.org/mod/data/view.php?d=13&rid=296

All of these require both Java and Javascript in the browser to be present on the client machine (both these are fairly standard).

Let me know what you think. If you're interested and are willing to spend a short amount of time fooling around with the system I'll install them into a moodle instance that you can mess with.

What about students? It is possible for students to create jmol data files to upload and display, but it does involve tweaking the Capabilities for the student role in the context of Files. This is something that I can easily help you do.
=== to Earlham chemmix faculty.

MonkeyGTD is a Getting Things Done&trade;* system powered by MonkeyPirateTiddlyWiki. 

The currently stable version is based on TW 2.0.x and can be found at http://monkeygtd.tiddlyspot.com/

There is also a pretty usable (if you have Firefox) alpha over at http://mgtd-alpha.tiddlyspot.com/ (right click [[here|http://mgtd-alpha.tiddlyspot.com/empty.html]] to download) and a MonkeyGTD blog at http://monkeygtd.blogspot.com/
That's what MPTW stands for.
Moodle 1.9 multimedia [electronic resource] : create and share multimedia learning materials in your Moodle courses
Fernandes, João Pedro Soares.
Publisher: Packt,
Publication date: 2009.
ISBN: 9781847195906

View Full Text online
Copy details
Shelf mark 	No. of copies 	Loan type 	Location
				
E-BOOK 	1 	Electronic resource 	Internet
Catalogue record
ISBN: 	9781847195906 (pbk.) :
ISBN: 	1847195903 (pbk.) :
Personal Author: 	Fernandes, João Pedro Soares.
Title: 	Moodle 1.9 multimedia [electronic resource] : create and share multimedia learning materials in your Moodle courses / João Pedro Soares Fernandes.
Publication info: 	Birmingham : Packt, 2009.
Physical descrip: 	v, 255 p. : ill. ; 24 cm.
General Note: 	Includes index.
Title as subject: 	Moodle.
Subject term: 	Computer-assisted instruction -- Authoring programs.
Subject term: 	Open source software.
Electronic access: 	Connect to resource. 
!!Activity Modules
Here are the Activity Modules I'm using so far:
|!Directory|!Name|!Status|!Comments|
|mod/attforblock |Attendance |Non-standard|version available|
|mod/enhancedfile |File upload (enhanced) |Non-standard| status unknown|
|mod/forumng |ForumNG |Non-standard| ?upgrade?|
|mod/oublog |OU blog |Non-standard| version available|
|mod/ouwiki |OU wiki |Non-standard| version available|
|mod/questionnaire 	|Questionnaire 	|Non-standard| ? |
|mod/scheduler |Scheduler |Non-standard| ? |

!!Blocks
|!Directory|!Name|!Status|!Comments|
|blocks/attendance |Attendance |Non-standard | version available|
|blocks/filtered_course_list |Current Courses List |Non-standard | LAE option|
|blocks/myCourses |myCourses |Non-standard| may not be needed|
|blocks/progress |Progress Bar |Non-standard| ? |
|blocks/quickmail |Quickmail |Non-standard| if available|
|blocks/sharing_cart |Sharing Cart |Non-standard| useful to have|
|blocks/yui_menu |Course Menu |Non-standard| may not be needed|

!!Filters
|!Directory|!Name|!Status|!Comments|
|filter/jmol |Jmol |Non-standard| if available|
# Progress Bar -- update for {{{overview.php}}} to make compatible with 2.2 available [[here|http://blog.fh-kaernten.at/wehr/?p=1717]]
# updated topcoll and weekcoll for M 2.2
# ForumNG not updated to 2.2 -- test that it works
# Online Audio recording -- not updated. If this does not work with v2.2 we would have to move back to v2.1. Download from [[github here|https://github.com/MaxThrax/moodle-assignment_onlineaudio/tree/MOODLE_20]]
!!To Do
* [[Questionnaire|Questionnaire & Moodle 2]] updated to v2.2 compatible {{{mod_questionnaire_moodle22_2010110101}}} release date jan 13 2012
* Scheduler -- not updated {{{mod_scheduler_moodle21_2011103002}}} version for 2.1 released Nov 28 2011. Downloaded {{{bostelm-moodle-mod_scheduler-559d041.zip}}} from github. There aRE 5 DIFFERENCES FROM THE 'STANDARD' SCHEDULER SO USE THE GITHUB ORIGINATED VERSION. 
* Quickmail -- version for 2.1 {{{block_quickmail_moodle21_2011021812}}} release date Sep 14 2011. There seem to be problems with this version -- use the CLAMP version? Until that time, don't install. Try version from [[github|https://github.com/lsuits/quickmail]] {{{lsuits-quickmail-v1.1.2-0-gb709682.zip}}}
 


!!Modules and Blocks 
to install in the new version for 2011-12
{{ts{15/04/11 15:37}}} Updated 
* @@Forumng@@: --{{{ ~/2010-test-mods/contrib/plugins/mod/forumng]$ cvs update}}}-- @@don't use this version@@ -- use version in [[Update OpenUni plugins]]
* @@Progress Bar@@ : {{{~/2010-test-mods/contrib/plugins/blocks/progress]$ cvs update}}}. Problem with this one (//Block progress: self test failed//) so download from moodl.org into {{{code-moo12/blocks}}}
* @@Sharing Cart@@ on {{ts{19/04/11 10:38}}} +++[update CVS]>
{{{
moo-plugins/contrib/plugins/blocks/sharing_cart]$ cvs update -dP
cvs update: Updating .
cvs update: Updating db
cvs update: Updating lang
cvs update: Updating lang/en_utf8
cvs update: Updating lib
cvs update: Updating lib/course
cvs update: Updating lib/form
cvs update: Updating pix
cvs update: Updating plugins
cvs update: Updating plugins/repository
cvs update: Updating plugins/repository/Form
cvs update: Updating plugins/repository/lang
cvs update: Updating plugins/repository/lang/en_utf8
cvs update: Updating plugins/repository/lib
cvs update: Updating plugins/repository/pix
cvs update: Updating shared
cvs update: Updating shared/qtype
}}}
So, only lang files updated for 1.9 
And same version {{{v20100930.txt}}} as [[before|Test new version Sharing Cart]] but newer version than in //mirror10//
=== Install from {{{moo-plugins/contrib/plugins/blocks/sharing_cart}}}
* @@yui menu@@ {{{moo-plugins/contrib/plugins/blocks/yui_menu]$ cvs update -dP}}} Nothing much of note. INstall from {{{moo-plugins/contrib/plugins/blocks/yui_menu}}} Exactly the same as the download from moodle.org.
* @@attendance@@ --{{{moo-plugins/contrib/plugins/blocks/attendance]$ cvs update -dP}}}--. Just langs. Test [[updated attendance|Attendance updated]] Downloaded http://download.moodle.org/download.php/packages19/attendance_package.zip to {{{code-moo12/att-test}}} and established that this is indeed the latest 2.1.1 version, so @@use this version@@ (delete the CVS version)
* @@ouiwiki@@ --Old version {{{$module->version  = 2010042201;}}} -- but now {{{$module->displayversion = 'Unstable development version (use at own risk)';}}}-- so lets [[Update OpenUni plugins]]
* @@questionnaire@@ +++[old version]>
{{{
<?php // $Id: version.php,v 1.20.10.10 2009/11/23 20:14:49 mchurch Exp $

/////////////////////////////////////////////////////////////////////////////////
///  Code fragment to define the version of NEWMODULE
///  This fragment is called by moodle_needs_upgrading() and /admin/index.php
/////////////////////////////////////////////////////////////////////////////////

$module->version  = 2008060405;  // The current module version (Date: YYYYMMDDXX)
$module->requires = 2007101000;  // Requires this Moodle version
$module->cron     = 60*60*12;    // Period for cron to check this module (secs)
}}}
=== running {{{contrib/plugins/mod/questionnaire]$ cvs update -dP}}} seems to have done +++[some updating]>
{{{
cvs update: Updating .
U lib.php
U locallib.php
U mod_form.php
U myreport.php
U print.php
U questions.php
U questions_form.php
U report.php
cvs update: Updating backup
cvs update: Updating backup/moodle2
cvs update: Updating css
U css/default.css
cvs update: Updating db
cvs update: Updating images
cvs update: Updating lang
cvs update: Updating phpESP
cvs update: Updating phpESP/admin
cvs update: Updating phpESP/admin/include
cvs update: Updating phpESP/admin/include/function
cvs update: Updating phpESP/admin/include/lib
cvs update: Updating phpESP/admin/include/tab
cvs update: Updating phpESP/admin/include/where
cvs update: Updating phpESP/docs
cvs update: Updating phpESP/examples
cvs update: Updating phpESP/images
cvs update: Updating phpESP/images/surveyimages
cvs update: Updating phpESP/locale
cvs update: Updating phpESP/public
cvs update: Updating phpESP/public/css
cvs update: Updating phpESP/scripts
cvs update: Updating phpESP/scripts/admin
cvs update: Updating phpESP/scripts/db
cvs update: Updating pix
cvs update: Updating questiontypes
P questiontypes/questiontypes.class.php
cvs update: Updating questiontypes/check
cvs update: Updating questiontypes/date
cvs update: Updating questiontypes/drop
cvs update: Updating questiontypes/essay
cvs update: Updating questiontypes/numeric
cvs update: Updating questiontypes/pagebreak
cvs update: Updating questiontypes/radio
cvs update: Updating questiontypes/rate
cvs update: Updating questiontypes/sectiontext
cvs update: Updating questiontypes/text
cvs update: Updating questiontypes/yesno
}}}
But the contents of version.php are exactly the same? What gives?
=== This seems to be the latest version. (Did download from moodle.org and the code is exactly the same. Phew) -- install from {{{/code-moo12/mods}}}
* @@mycourses@@ --does not look like this has been updated-- @@wrong@@ Has been updated by Rosario Carco and uplaoded to [[this discussion|http://moodle.org/mod/forum/discuss.php?d=67494]] Latest version is now {{{myCourses07a}}} and is located in {{{code-moo12/other}}}
* @@mymoodle@@ -- ditto. Use existing code.
* @@scheduler@@ expanded {{{scheduler-20110210.zip}}} in code-moo12 (from [[CLAMP code|http://www.clamp-it.org/code/]])
!!!Other stuff
* @@enhanced file upload@@ -- zip file in {{{code-moo12/other}}} don't forget to [[change prompts|Enhanced File upload : change prompts]] {{ts{20/04/11 10:46}}} +++[done:]>
{{{
mirror10/mod/enhancedfile/lang/en_utf8]$ diff -iwB enhancedfile.php ~/code-moo12/other/enhanced_file_mod/package/mod/enhancedfile/lang/en_utf8/enhancedfile.php
2,4c2,4
< $string['modulenameplural']='Enhanced Upload';
< $string['modulename']='File upload (enhanced)';
< $string['modulenameadd']='File upload (enhanced)';
---
> $string['modulenameplural']='Enhanced File';
> $string['modulename']='File / Files';
> $string['modulenameadd']='Add File or Files';
}}}
The only thing different are the modified strings. So we can copy over this version with impunity.
{{{
code-moo12/other/enhanced_file_mod/package/mod/enhancedfile/lang/en_utf8]$ mv enhancedfile.php enhancedfile-old.php
code-moo12/other/enhanced_file_mod/package/mod/enhancedfile/lang/en_utf8]$ cp ~/public_html/mirror10/mod/enhancedfile/lang/en_utf8/enhancedfile.php .
}}}
=== 
* remove code for simple file upload (in {{{mod/resource/type/fileupload}}}. {{ts{20/04/11 10:46}}} @@done@@ for {{{test-12}}} [[Adjust database too|Simple file upload]] when migrating to new system. @@FLAG@@
* uploadcourse.php
* @@en_us@@ language! Downloaded from moodle.org/lang and installed. Also install welsh (cy_utf8) and gaelic (ga_utf8)
[[Moodle 2011 test modules]]
Installed a new instance of LAE 1.1 moodle in order to test out some modules.
Located at 
!!1. [[Install MrCute Jr]]
3. Use the Simplicity theme -- [[modify Simplicity theme]]


!Schedule for rolling out Moodle 2011
In previous years Moodle code has undergone a lot of bug fixing during the early summer and often a new version has come out which needed testing and configuration. This has meant a last minute scramble to get the system ready and courses transferred over. Faculty are already asking for next year's courses to work on over the summer.
Since the codebase is more stable these days I'd like to propose a different schedule:
# I already have the following items ready to go:
** Codebase (see below)
** User accounts spreadsheet to load into system -- tested and working
** Categories and courses with named teachers -- tested and working
# Put this version onto Moodletest by the end of this week
# Email faculty to ask what courses they want repeated next year and copy these courses into new system.
** migrate contents of COMM, MISC etc (see below)
# switch this over to production at the beginning of June
# during June / July work on themes, other changes coming out of Hack/Doc 2010
# implement changes into production at end of July.
# hit the ground running in August 
!!((Clamp(Collaborative Liberal Arts Moodle Project))) ((LAE(Liberal Arts Edition))) Moodle
I'm planning to use the [[CLAMP|http://www.clamp-it.org]] [[Liberal Arts Edition (LAE1)|http://www.clamp-it.org/2010/02/moodle-1-9-7lae1-update/]] of 1.9.7+ moodle, for the following reasons:
* baked in TinyMCE editor. This addresses a lot of the perceived 'clunkiness' of moodle and allow MS Word text to be pasted //sans// the Word CSS crud which causes so many problems.
* ZIP download
* reliable RSS feeds
!!New database
Advantages:
* fresh sparkly clean database with no grunge
* fix custom scales (remove 'standard Earlham alphabetic' which is erroneous)
* fix user profiles -- eg Monteze Snyder
* fix user login problems -- eg Vince Punzo
* fix 'Word CSS' issues in Course outlines (for new courses)
Disadvantage:
* Cannot use Course import to refresh course (but problems with that anyway matching Course outline formats)
** Course moving is easier -- but we don't want folks to 'move' courses, we want to copy/duplicate them
** Course copying still involves backup/restore
* need disk space to accommodate all the Course backups to restore from. 
!!New Plugins
* [[Progress bar|Progress bar : display]]
* [[Enhanced file module|Enhanced File Module]]
* [[Forum NG|http://rublev.lly.earlham.edu/~markp/clamp-LAE/mod/forumng/index.php?id=2]]
!!To Do
In order to roll out Moodle 2011 with new database before the end of May:
* upload all user accounts -- script already sussed
* create categories and new course shells -- script sussed out.
* upload new courses with TBA -- already sussed.
* execute system wide course backup on 2010 moodle
** move all course backups into 2011 Moodle : front page : files : backupdata so that they can be restored from there.
* Email faculty
** courses wanted to repeat or restore for new year. Eg COMM (8), MISC (6), CLUB (3) + any repeating course
** unenroll student names from spring semester course
* Get courses restored over the course of the summer
* Develop theme stuff and apply end July.
* Allow supporters to delve into issues before the semester starts
!!System Issues
* @@Course backups@@ -- I'd like to do regular (weekly?) automated course backups. Space on the network to store the files? +++[Background]>
We've been treading on thin ice for some time and I'd like to take steps to prevent a mini-Armageddon before it happens. Basically, if a teacher accidentally screws up a course (and clicking Administration : Reset will do this) we have no way of restoring it apart from taking the whole server down and doing a system wide restore. It's a trivial matter to configure regular course backups system wide -- all we need is the space to store the files and an agreed policy
=== 
* Space to expand -- do we have enough disk space on the Moodle server to cope with next year?
* Old Moodle versions. We need to retire the Hedd server and put the old Moodle versions onto a VM server. +++[Subtext]>
Every semester I get requests for courses that were run off Hedd (05-06, 06-07, 07-08). In fact in the Fall semester I got a request for a course from spring 2004, the pilot year. Currently, the Hedd hardware configuration won't allow mass course backups, so we cannot just create backups of all the courses and store them. Moreover, Hedd is on it's last legs and if it crashes permanently we'll be stuck.
We only need a single Virtual Machine running FreeBSD and MySQL and Postgres with sufficient disk space to accommodate the code and data directories. This would also free up space elsewhere. My feeling is that it wouldn't take too much effort to do this and I'd be willing to do it if I had the sudo permission on the VM box.
=== 

[[Configure Moodle system]]

!![[Support Issues]]
Install into test-12:
* Jmol chem stuff. See [[Modules from Hope]]. Located in {{{code-moo12/other}}}. Resource type, filter and Java mol editor.
* Lightboxgallery (check to see if this is going to 2.0)
!Thunderbirds are go
{{ts{11/08/11 16:24}}}
Aaron fixed the [[Start Date issues]] by running a 'sed' job to do the global substitute before doing the LMB import.
This worked on the Moodletest server so we ran it on the xml import file for Production.
!!Complications
It turns out that in the LMB import file courses that are crosslisted are also present as individual courses //but// the latter do not get any enrollments. So, for example, Jennifer Seeley's {{{POLS339-0:201210 — Approaching Political Puzzles}}} is also listed as {{{INST.POLS339:201210 -- Approaching Political Puzzles}}} but only the latter gets the enrollments. But since Jennifer has been working on {{{POLS339}}} we need to make this have the student enrollments. This we do by the expedient of copying the Course id (CRN) from {{{INST.POLS339}}} (which is {{{XLS28201210}}}) and pasting it into {{{POLS339}}} and then transferring the short name and long name into the populated course thereby renaming it. To make the system work we now have to rename the empty course by adding a ''-D'' to the end of the short name and long name. Now, when the xml import next gets run Firday morning this newly named course should get all the enrollments. Finally, having made sure that this has worked we delete the empty course.
How can one tell if a course has a crosslisted equivalent. Answer -- you cannot. I have tried as best I can to spot the crosslisted course ahead of time, but I know that I've missed some. The only courses we are concerned about are those which already have content or which were created manually prior to kick-off.
Here's a list of changes:
!!Individual Courses to Crosslist
|!Course|!Crosslisted course|!CRN copied?|!Enrollment update?|
|~POLS359:201210 |AAAS.INST.~POLS359:201210-D -- Democracy & Dictshp of Africa| Y | @@YES@@ |
|~BIOL347-0:201210 — Anatomy & Physiology II |BIOL.~BIOL347:201210 -- Anatomy & Physiology II| Y | @@YES@@ |
|~POLS339:201110 -- Approaching Political Puzzles |INST.~POLS339:201210 -- Approaching Political Puzzles| Y | @@YES@@ |

!Meta Courses
Where one faculty teaches two sections of the same course it makes sense to create a meta course and then inherit the child course enrollment automatically.
|!Meta course|!Children|!Teacher|!Done?|
|~PSYC342:201210 — Experimental Psychology|~PSYC342-1 (18) ~PSYC342-2 (18) | Kathy Milar | ''Y'' |
|~BIOL111:201210 — Ecological Biology|~BIOL111-1(8) ~BIOL111-2(8) ~BIOL111-3(8) ~BIOL111-4(8) | Brent Smith, Wendy Tori, Chris Smith | ''Y'' |
{{ts{12/08/11 10:50}}}
More on [[Start Date issues]]. Yesterday I sent to Betsy and Aaron +++[this email]> 
A week ago I realised that courses were being created by the LMB process with the Start Date set to Wed Aug 24th. The problem with this is that when the Course Outline is set to 'weekly' the blocks get displayed with the dates running from Wed - Tues rather than from Sun - Sat. So I figured out a SQL UPDATE to change the date string in mdl_course:startdate field. This worked, but I neglected to check what would happen after a subsequent LMB import. And indeed, a subsequent run of LMB import overrides the startdate. This also means that even if the user sets it in the Course Settings it'll get overridden. So, my question is, is there any way of changing this date in the LMB export file?
Here's an example of where it occurs in icgorldi_606594.xml :
{{{
                <description>
                        <short>10224</short>
                        <long>JPNS-488-0</long>
                        <full>Senior Capstone Experience</full>
                </description>

                <timeframe>
                        <begin restrict="0">2011-08-24</begin>
                        <end restrict="0">2011-12-15</end>
                </timeframe>
}}}
Sorry to shove this on you at this time.
=== 
+++[Betsy's response]>
There would have to be a script run on it to change the date before it gets uploaded into moodle.  That's the term code dates that are in the ssbsect table in banner.

Betsy
=== 
Aaron did the magic and the manual import worked. But overnight Thursday the new iteration of {{{icgorldi_606594.xml}}} did not get copied over. Here's what +++[Aaron wrote this morning]>
Looks like I screwed up the crontab to scp the new file from nagaya to sunstone (I was calling ssh instead of scp).  this means that there wasn't a new update.  Do you want me to run it right now with the new data?  

Also I'm changing how its doing it a little bit now that I know how the update gets triggered....I'm changing the name that gets copied over to have a {{{icgorldi_606594.xml-org}}} and then doing the processing on that file and calling the corrected date file {{{icgorldi_606594.xml}}}.  The reason for this is that if the fix date script doesn't get called before one of the regular moodle cron jobs then it might try to import the file before the date is updated in it.
=== 
So today Aaron fixed the copy and then we had to [[fix the cron lmb|Moodle 2012 -- lmb cron]]
The help file for the cron option on LMB enrollment says this:
<<<
!!Cron Options
Check XML File during cron: With this option enabled, each time cron is called, the module will check the XML File to see if its modification date has changed since the last time it was processed. If it has, then it will processed.
<<<
To us this implied that checking this option would cause the lmb import to be run //when the standard moodle cron job ran//. This we set up as {{{wget moodle/admin/cron.php}}}. In normal circumstances nothing would happen since the import file would not have changed it's date stamp. So we editted the import file ({{{icgorldi_606594.xml}}}) to change the date and that also set a new modified date stamp. However, no output was written to the log file and we already ascertained that the import file would have run manually so something must be wrong with this.
So we tried a 'one off' crontab entry with {{{wget moodle/enrol/lmb/importnow.php}}} and, yes, this executed as we hoped.

It seems that cron can execute {{{importnow}}} //without authentication// but (probably) only if the option is checked in the LMB enrollment settings (though we haven't checked the negative -- ie will importnow run from cron if the option is not checked?)
Email exchange with Aaron:

> Aaron,
> Now that we seem to have the LMB thing sorted, I'd like to try
> regular system wide course backups. So, a couple of questions:
>     1. I'm thinking of once a week (or perhaps more frequently at the
>     beginning of the semester). What day and what time would be best
>     for doing this?
Not really sure when the best times would be...I'm guessing anytime when its not being heavily used would work.  You might want to take with Brian (who is out all next week unfortinatly) if you want to coordinate it with tape backups.  By "system wide" is that all courses at once or course by course?  Also, wondering when a backup happens does it lock that course so that no one can change the content in it?
>     2. Could you give me a full path to a directory writeable by the
>     web server where the course backups can be placed?
The folder /backup/ is owned and writable by the www group.  If it has trouble with that I can make a link to it from inside the code root to see if that helps.
> I'd also like to switch the system 'Statistics' on for a while before
> the beginning of the semester. Any objections?
We should keep an eye on the load of the server to be safe.  I'm not really concerned with CPU since that thing is loaded with um but if its reading/writing a lot to the drives (or does it use the database) we could cause some spikes in drive IO.  Just let me know when your turning this on and I'll keep some IO monitoring going to see how things look.
What time period is the best to do system wide backups in IS Moodle? In other words when is it //not// used? Let's take a look at the time of last use and the time of first use for the days since the beginning of the semester:

|!Day|!Date|!Time last use|!Comments|!Time first use|!Comments|!Total accesses|!hours of non-use|
|Wed | 24-8| 3:48am|student assignment view| 5:02am|same student assignment upload! | 7758| 1:14|
|Thurs | 25-8| 2:03am|student assignment view| 4:16am|student access| 8339| 2:13|
|Fri | 26-8| 2:32am|Faculty| 4:47am|student access| 6167| 2:15|
|Sat | 27-8| 2:49am|student| 6:17am|Faculty| 3504| 3:28|
|Sun | 28-8| 4:07am|student assignment upload!| 6:33am|student course view| 9721| 2:26|
|Mon | 29-8| 3:49am|student resource view| 6:43am|student course view| 11321| 2:54|
|Tues | 30-8|>|>|>| no break in use from 12pm to 7am | 9644| 0|
|Wed | 31-8| 2:44am|student add forum post! | 5:55am|faculty checking out course | 8807| 3:11|
|Thurs | 1-9| 4:36am|student assignment upload| 5:09am|student assignment view| 5856| 0:53|

!!Notes
* There are offcampus users from Japan using the system at odd times of the day. But the times given above are mostly for local users.
* There seems to be no clear day of the week with a substantial block of free time to do course backups.
List of tasks that will need to be done while I'm on sabbatical.
* Upload and restore course backups > 128Mb
* Solve gradebook problems. By:
## perform full course backup (as admin) with user data
## restore into a sandbox moodle site
## experiment and discover the fix
## communicate with client and have client apply fix
* Set up Attendance
* Manage permissions:
** how would you grant permission for a group of students to use a folder in the files area for graphic image for use with their wiki?
* Configure gradebook categories for typical course sections.
# Allowed email domains (Admin:Users:Authentication:Manage) : ''earlham.edu'' only? +++[Implications]>
Students won't be able to set a non-earlham address as their email
=== COnsensus -- Not needed so leave blank.
# Allow faculty to change role to a student and 'login as' a student.

;Thor Hogan (phone):
:How to copy a quiz (use Sharing Cart)
; Wendy Tori (email)
: enrolling TA into ECOBIO111, a Meta course
: +++[email]>
Mark,
One of my TA's in ECOBIO is having some problems accessing MOODLE (see below).  Could you help me with this?
I added a password (Bird) and allow access only to guests.  Should I do something to make my TA's guests?
Thanks in advance for your help!
Best,
Wendy

From: "Charles William Sheridan Boyd" <cwboyd10@earlham.edu>
To: "Wendy P Tori" <toriwe@earlham.edu>
Sent: Tuesday, August 30, 2011 10:14:18 PM
Subject: Moodle for Eco Bio

Hey Wendy,
Moodle is not letting me register myself. It is telling me that it is not open to guests or the public, but does not give me a chance to put a password in. Do you have to enroll me? Also, where do I go to get the Ebook?
Thanks!
Charlie
=== 
: +++[solution]>
Wendy,

Because of the way that the Ecobio moodle course is set  up students cannot enrol themselves, so I'll add the student concerned as an Administrative Assistant, OK? HJave done!

Mark
---- 
Wendy,

I'm *really* busy right now -- you can add these folks yourself by going to one of the Ecobio courses eg BIOL111-5 https://moodle.earlham.edu/course/view.php?id=1358 and Administration : Enrollments

Cheers

Mark
<<<
    Mark,

    Could you also help me with my other ECOBIO TA's?

    1) Emma Cohn
    2) Melina Neira
    3) Michael Warner
    4) Jonathan Sheppard
    5) Emma Dunoughe
    6) Hanna Klondaris
    7) Frances Hall
    8) Kelen Paine
<<<
=== 
; Marya Bower in classes she doesn't want!
: A Julie Stout issue
: +++[Solution]>
Mark,
She is out of the class listing.

Julie

From: "Mark Pearson" <markp@earlham.edu>
To: "Julie S. Stout" <stoutju@earlham.edu>
Sent: Wednesday, August 31, 2011 11:34:41 AM
Subject: Re: Moodle / Self-Service Interface


    Mark,
    The PHIL 120-Y is not a cross listed course.  It should only be listed as 10770.

Yes, that's what it's listed as. But Marya is still 'teaching' it and she doesn't want to. Boo hoo ... :-) Could you take her out of that one?

Thanks

Mark
<<<
    I have just removed the cross list for the 483 course so it won't be there when you refresh.

    Julie
----
    From: "Mark Pearson" <markp@earlham.edu>
    To: "Julie S. Stout" <stoutju@earlham.edu>
    Cc: "Bonita Washington-Lacey" <washibo@earlham.edu>
    Sent: Wednesday, August 31, 2011 10:32:53 AM
    Subject: Re: Moodle / Self-Service Interface

    Julie,

    Here's are the CRN / cross list id for the courses concerned:

    Course                  CRN/Crosslist id
    PHIL120-Y:201210  10770 (yes, 'PHIL120-Y:201210' is how it's listed)

    PHIL.JPNS.WMNS483:201210 XLS 48
    (and Meghen Jones is listed on this one too -- she should not be there either)

    The INTD240 issue I'll fix -- a colleague created a course that's a duplicate of one that Banner created. Unfortunately this is the one Marya has put all her content into, but we'll fix that.

    Cheers

    Mark

    PS The easy solution would be to bury the course link at the bottom of the My Moodle listing ....
----
        Hi Mark and All,

        As of this morning, the following courses are still showing up on my Moodle list, even though I am not at all connected to the courses.

        PHIL:201210 -- Intro to Phil. Ethics&Tragedy
        PHIL.JPNS.WMNS483:201210 -- Teaching Assistant


        Also, we are still showing two versions of the Student Development course:

        INTD240-1:201210 — Stud Dev inthe Res. Hall

        INTD 240:2011Fall -- Student Development in the Residence Halls

        Thanks for your help in getting these cleared up!

        Marya
<<<
=== 
; Carol Hunter questions
: +++[answers]>
Carol,
<<<
    Mark

    I need to add a TA to my class list--she is not automatically enrolled because she's not formally enrolled because of credit reasons.  I used to be able to add people--couldn't figure out how now.
<<<
Just go to Administration : Enrollments and select either Administrative Assistant or Teacher. The basic difference these roles is that Admin Assistants cannot see moodle grades whereas Teachers can. But if you don't keep your grades in the moodle class (and this can be handy especially for large classes) you can assign your student TA to the role of Teacher.
<<<

    Secondly, I'm back on CPC after sabbatical but couldn't see how to get that committee to come up on my moodle.
<<<
I've just added you into the CPC moodle committee site.

Hope this helps,
=== 
: Carol neglected to tell me who she had replaced so I sent this out +++[email exchange]>
Thanks Mark.  I am forwarding this to our convener, Brent Smith.  Brent do you want me to update?

Bonita
<<<
From: "Moodle Czar" <moodle@earlham.edu>
To: "Bonita Washington-Lacey" <washibo@earlham.edu>
Sent: Wednesday, August 31, 2011 9:48:45 AM
Subject: CPC committee membership

Carol Hunter requested that I add her to the CPC Moodle site. This I have done but it occurred to me that if she is returning to the committee then someone else should be leaving. Would someone please take responsibility for unenrolling the person or persons concerned? Just go to the CPC moodle site and open Administration : Enrollments, select Teacher then click and [Remove] the person(s) to leave the committee.

Thanks

Mark the Moodle Czar
<<<
---- 
"Someone" has removed herself,

Jennifer

Jennifer C. Seely
Assistant Professor
Politics Department, Earlham College
Drawer 63
801 National Road West
Richmond, IN 47374
----
And then messages from Greg, Bonita, and finally, Carol Hunter ..........
=== 
; Kalani Seu enrollment issues
: +++[another Julie Stout messgae]>
TO: Julie Stout

Kalani Seu spoke to me yesterday with Yet Another Enrollment Problem (YEAP) :-)

Basically, while advising a student he managed to enrol himself (as a student) into ART115 and SPAN101-2. Yesterday I removed his name from the courses on Moodle but I'm gratified to see that it's back again so I know for sure the system is working!

Could you do the necessary to unenrol Kalani from these two course for him?

Thanks

Mark

PS I CCed Kalani so he knows what's going on.
<<<
    Hi Mark,
    I just logged on to Moodle and ART115-0 and SPAN101-2 are back on my list of courses.  Any help on getting rid of them would be greatly appreciated.

    Thanks,
<<<
=== Julie fixed this.
; Independent Studies. I still don't understand Julie's system.
: +++[problem]>
!!!Update {{ts{2/09/11 11:40}}}
This course is now in the system as {{{HIST485-0:201210 — Frankfurt School}}} with Chuck and Ferit as teachers and 5 students
----
Mark,
No they will be added once we get all the Independent studies seperated.  This usually takes a few days.

Julie
----
From: "Mark Pearson" <markp@earlham.edu>
To: "Julie S. Stout" <stoutju@earlham.edu>
Sent: Wednesday, August 31, 2011 9:38:04 AM
Subject: Re: HIST485

So basically, Chuck & Ferit should be contacting you, right? Otherwise they'll be teaching a course which never gets into the student's transcript ....

Cheers

Mark
----
    Mark,
    These are the the generic courses that all independent studies go until they are sectioned out by instructors.  There are no instructors assigned to 485-0.

    Julie
----
    From: "Mark Pearson" <markp@earlham.edu>
    To: "Julie S. Stout" <stoutju@earlham.edu>
    Sent: Tuesday, August 30, 2011 4:09:21 PM
    Subject: HIST485

    Julie,

    I just got an email message from Chuck Yates. Apparently he and Ferit Guven are co-teaching "HIST485-0:201210 — Independent Study" with a CRN=10377. But neither of them appear as teachers in the course. Maybe this is something you already know about and can fix?

    Cheers

    Mark

===  
; And then there's ''//Monteze//''
: +++[for example]>
I've just thought of a problem which you might have had, and the solution.
After you've Added the sessions you are taken to the 'Sessions' screen but you see weekly sessions only . This is an odd default and all you need to do is to click [All] tab to show all the sessions. See attached graphic. Now I think I understand where the confusion arose.

Cheers

Mark
----
Mark, attached is what I see in every one of my courses when I click attendance, NOt working for me yet. : ( though not for lack of effort! Am I doing something wrong?
----
Monteze,

You need to click on the [All] button as I indicated in this screenshot which I sent you already.

Mark
[[Screenshot show sessions|graphics/attendance-showsession.png]]<<imagebox>>
[[Screenshot add sessions|graphics/attendance-addsession.png]]<<imagebox>>
=== 
!!EC Spring Semester, 2011-12
|African & African American Studies|1|
|African&~AfricanAmericanStudies|3|
|Arabic| |
|Arabic|3|
|Art|26|
|Art original|4|
|Athletics|70|
|Biology|32|
|Business & ~Non-Profit|5|
|Business & ~Non-Profit Management| |
|Chemistry|17|
|Chinese Language & Literature| |
|Classical Studies|5|
|Comp Lang & Linguistics|2|
|Comparative Languages & Linguistics| |
|Computer Science|11|
|Crosslisted|49|
|Economics|5|
|Education|3|
|English|11|
|Environmental Studies|6|
|Film Studies| |
|French & Francophone Studies|6|
|Geosciences|4|
|German Language & Literature|5|
|History|9|
|Hum Dev & Social Relations|4|
|Interdepartmental|15|
|International Studies|1|
|Interpretive Practices|13|
|Japanese Lang and Linguistics|9|
|Japanese Studies|4|
|Jewish Studies| |
|Journalism|5|
|Language|1|
|Latin American Studies| |
|Legal Studies| |
|Mathematics|11|
|Museum Studies|1|
|Music|73|
|Off Campus Programs|21|
|Peace & Global Studies|3|
|Philosophy|7|
|Physics|9|
|Politics|9|
|Psychology|16|
|Religion|6|
|Sociology/Anthropology|7|
|Spanish and Hispanic Studies|13|
|TESOL| |
|Theatre Arts|34|
|Undeclared Department|1|
|Women's Studies|5|
!!Install instructions
# move all tgz files to the moodle code root. They are designed to be unpacked from there.
# There is one new module (scheduler), one new resource type (enhanced file upload),  bug fixes (lae grader updates, lang update) and a grade importer (iclicker). The bug fixes and grade importer do not make an table changes. Scheduler and Enhanced file upload do.
# Install scheduler with {{{tar -xvf scheduler-mod.tgz}}} and install database tables by clicking on Administrator : Notifications
# Repeat with Enhanced file upload {{{tar -xvf enhanced-file-upload.tgz}}} and click on Administrator : Notifications
# Install language update {{{en_lang_update.tgz}}} (this adds the US English language pack and makes a slight change to the basic english language pack) as above.
# Before installing the lae grader updates {{{lae-grade-updates.tgz}}} you should remove the current reports with {{{rm -r grade/report/LAE*}}}. Now untar as before.
# Unpack iclicker import module {{{iclicker-import-grade.tgz}}}
Mark Pearson {{ts{5/01/11 10:39}}}
Email to faculty {{ts{9/08/10 16:51}}}
----
Folks,

This is the time of year when we regularly move to a new version of Moodle, and this year is no exception. A few intrepid faculty (thanks Marya!) have been banging on the new 1.9.9 system at moodletest and have pronounced it stable enough to use and so we are going to put it into production as the main moodle site with a new database. 

!!What will happen?
--The current system running at //moodletest.earlham.edu// together with database and data will be moved over to the production server (newly outfitted with extra disk space) and become the new EIS moodle system at //moodle.earlham.edu//. The current system will stay on the server for the time being and be renamed //moodle08-10.earlham.edu//--

Later this week we are going to be moving from the current (green) moodle to a spanking new blue version. All courses that are currently in the ''2011'' category (MyMoodle -> Show all courses : 2011 category) will be ported over and placed into the correct departmental category. Courses created between now and then will be placed straight into the system currently at https://moodletest.earlham.edu since this is what will constitute the new working moodle.
!!When will this happen?
We are planning to do this move on Wednesday (11th) or Thursday (12th) or Friday (13th) of this week. It should not take long to do but we will need to close down both Testing and Production moodle servers.
!! What about my courses?
* I shall be moving over all the courses that are currently residing in the ''2011'' category (these are the ones which have already been requested) tomorrow (Tuesday) so that these will be ready for action when the new system comes up on Wednesday morning.  Thus it would be helpful if you did not make changes to your course while this is happening (or the changes may get lost).
* In addition, some courses from COMMS (including of course, Community Documents) and CLUBS will be backed up and moved over.
* Can I request a new course? Yes -- please fill in the [[new form here|https://moodletest.earlham.edu/mod/questionnaire/?id=88]] 
* Can I request a course to be restored ? Yes -- please fill in [[this new form|https://moodletest.earlham.edu/mod/questionnaire/?id=88]]
!! Changes
I hate changes! I hope you haven't changed too much. 
The new moodle system looks very similar to last year except for the cool new blue theme. There are some behind-the-scenes changes (bug fixes, slight gradebook improvements, security enhancements) together with some front-of-house differences :
# The new WYSYWG editor (TinyMCE) is a lot more stable,  it works in Safari on the Mac, tables are easy to create and modify,  and it handles pasting from MS Word in a much better way. 
# New Activities include :
** OUBlog for class blogs
** ForumNG for when you want to grade a forum
** Questionnaire for class surveys
** Upload a file -- easy resource creation
# New blocks include:
** Progress Bar -- students can track their reading of course resources.
!!Where's the documentation?
Documentation will be forthcoming on the moodledocs site.
!Request Course & COurse Backup restore

!!Course Create
Currently I have a //Feedback// acivity in Teachers On Moodle that assembles responses. I want to drop Feedback so I'll revamp this form into the Questionnaire Activity.
The format in Feedback is rather clumsy anyway:
* [[screenshot 1|graphics/course_create_form_pt1.png]]<<imagebox>>
* [[screenshot 2|graphics/course_create_form_pt2.png]]<<imagebox>>
Each course has to have a completely separate part of the form. Tedious to setup and complete also.
The advantage of this system is that it'll send emails when the form has been completed. Make sure we can do this with Questionnaire.

!! Course Restore
+++[Intro page :]>
!Course Restore Form

Use this form to request Moodle Course Backups to restore into new courses

Courses are saved using the Course Backup procedure which allows all the courses in a Moodle installation to be saved in separate files.
When we restore a course all we have to work with is the filename of the course backup file in the following format:

backup-<Course Id>_<graduation year><semester>-<date backup>-<time backup>.zip
example : backup-hist232_200820-20080730-1118.zip

Thus we need to know both the course id and the graduation year and semester that the course was first taught.
=== 
Ditto for course restore:
* [[screenshot|graphics/course_restore_feedback.png]]<<imagebox>>

!Thoughts on Moodle development cycle
Over the past few years Moodle has had a fairly consistent cycle of releases and improvements. Here's how it worked for version 1.9:
* The initial release of version 1.9 was announced in early August of 2007 ([[here|http://moodle.org/mod/forum/discuss.php?d=77470]]) +++[Earlham's position]>
At this point we were on version 1.8.2. In Dec (18-Dec-07) we [[upgraded to 1.8.3+|http://www.earlham.edu/markp/miss/#%5B%5BMoodle%20production%20update%5D%5D to address [[user issues|http://www.earlham.edu/markp/miss/#%5B%5BUser%20Issues%20%3A%20overview%20Dec%2008%5D%5D]]
=== 
* In January of 2008 there was still no official release. It looked like 1.9 would emerge by the end of February.
* By summer, the versions had progressed to 1.9.2 and so this was the version I used for that years [[current installation|http://www.earlham.edu/markp/miss/#%5B%5BMoodle%201.9%20install%5D%5D]]. However, in late August it emerged that there were significant [[performance issues|http://www.earlham.edu/markp/miss/#%5B%5BPerformance%20issues%20in%201.9.2%5D%5D]] with 1.9.2. 
** complicating matters this year was the fact that the Moodle server, //HEDD//, was on it's last legs and could not generate automated course backups. This meant that I had to have a student trawl through every working course and do a manual backup.
** [[|http://www.earlham.edu/markp/miss/#%5B%5BMeeting%20with%20Tom%20%26%20Wes%5D%5D]]
* As a result we [[updated over the Christmas break|http://www.earlham.edu/markp/miss/#%5B%5BUpdating%20Moodle%20Xmas%2008%5D%5D]] to version 1.9.3+

!!Summary
|!Date|!Version available|!Version prod^^n^^|!Comments|
| Jan-08| 1.9 beta| 1.8.3+|gradebook stinks |
| Aug-08| 1.9.2| 1.9.2|transition to this version |
| Dec-08| 1.9.3+| 1.9.2|serious performance and security issues |
| Aug-09| 1.9.5| 1.9.3|gradebook improvements. zip download not available for new version |
| Dec-09| 1.9.7| 1.9.5|security updates. Zip download added |
!!Conclusion
Moodle development originates in the Antipodes. Their //academic year// runs from Dec -- Dec since the summer break is in December/January. Generally speaking, new versions seem to be released in time for their new year at the end of Jan. Version updates are frequent throughout the year. The assumption seems to be that sites will update on a fairly regular basis.
!!Looking forward
From [[Moodle Central|http://moodle.org/mod/forum/view.php?id=56]] :
<<<
We're aiming to release Moodle 2.0 beta on 1 March 2010, followed by a testing period of four months before releasing 2.0 stable.
<<<
This means that a stable version of Moodle 2.0 may be available by the end of June. This will undoubtedly have new useful features but also lack some features that faculty has used hitherto. The chances are that a better version will be available by the end of the year which would mean a December turnaround again.

Talk with Denise & Aaron about:
* installing Assignment ZIP into current production (quick process)
* Automated course backups -- where to store.
* File storage space on Moodle production server. Any issues here -- do we need to expand local storage?
* [[Banner/Moodle integration|10 Sept 2009 Banner-Moodle Integration Project]]
* Hack/Doc 2010 -- [[can we send Ben|27 Oct 09 Email Ben re Hack/Doc]]?
* Transitioning to 1.9.6 -- [[security issues|Security Alerts]] with 1.9.5
** Use CLAMP LAE version? They are going to update v 1.9.5 to 1.9.6
** Apply EC addins -- Attendance, Sharing Cart, (Quickmail), MyMoodle, ~YUIMenu, Course Menu
* address [[Critical Security vulnerability]]
----
!!!Meeting with Denise and Aaron 24-Nov-2009
* Agreed that Aaron would do the Assignment ZIP upgrade when he can find time (//keep hassling//)
* Course backups depend on the progress of the backup service system. Looking at Feb 10
* Banner/Moodle integration. Ben is currently working on Portal stuff. But could be released to look at this later in 10
* Hack/Doc Jan 2010. Ben is fully occupied -- possible for summer meeting.
* Transition to 1.9.6 (7). Install sandbox version and get Aaron to implement
** need tgz of current moodledata
* [[Critical Security vulnerability]] -- notes
!!!Decided
* meet again in Feb-2010 to review ongoing ECS situation
!Getting messages to students -- Mail from Moodle
A number of faculty have been complaining about the delay in sending out messages (often perceived as 'it doesn't work').
;User's view:
: Using the News forum to get the message out to students about upcoming work. Here's +++[Jana, a blind user]>
I am trying to use a news forum in Moodle this year for posting announcements to the Bonners.  I have run into a problem with these messages not being emailed out right away.  When I send them, I ckeck the box that says “Mail now.”  When I clikck the Post to Forum button, I hear a message that says something like, “This message will be sent out immediately.  Continue?”  I believe that continue is a link, but before I can find it, it disappears, my post appears on the list of posts but it does not get emailed out right away.
=== She goes on +++[to write]>
This is a fairly major deterrent to me continuing to use Moodle for posting emails as I am often trying to get out a message quickly and even a delay of half an hour will mean that students checking email at midday, for example, will not see the message then.  Since these messages are often about meetings that evening and since I know I am not likely to be able to get around to trying to send these messages sooner, I am quite likely to return to my practice of sending out these messages using the Earlham listserv I have used since it instantly send out my emails.
=== 
!!Mail from the News forum
# Outgoing mail messages and RSS updates are handled by a script called {{{cron.php}}} which is designed to be run by a system process called //cron// at regular intervals (currently set to every 30 minutes).
# Message posted to News forum in normal way. The moodle system imposes a 30 minute delay to allow for editing and reflection //before// handling the posting and putting it into the mail queue. +++[Example cron output]>
* News forum posting at 1:40pm
* Moodle cron executed from web browser at 1:42pm
{{{
Server Time: Thu, 30 Sep 2010 13:35:03 -0400
Starting activity modules
Processing module function assignment_cron ...done.
Processing module function chat_cron ...done.
Processing module function forum_cron ...Starting digest processing...
Cleaned old digest records
done.
Processing module function forumng_cron ...
Email processing:
Initial query: 0s
Marking processed posts: 0s.
Email processing (0 new posts) complete, total: 0s
done.
Finished activity modules
Running auth crons if required...
Cron script completed correctly
Execution took 8.722624 seconds
}}}
=== 
# Message posted to New forum with 'Mail now' checked. This ensures that the posting is sent out //but only at the next cron cycle//. Thus, if the system has just run the cron it'll wait for 29 minutes until it's run again. +++[Example of cron output]>
* News post #2 -- check Mail now
{{{
Server Time: Thu, 30 Sep 2010 13:43:45 -0400

Starting activity modules
Processing module function assignment_cron ...done.
Processing module function chat_cron ...done.
Processing module function forum_cron ...Processing user 8
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 249
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 133
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 135
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 241
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 266
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 265
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
Processing user 138
Sending post 1131: MAID Meeting <span style="color: #008000;">green 2 go</span> #2
8 users were sent post 1131, 'MAID Meeting <span style="color: #008000;">green 2 go</span> #2'
Starting digest processing...
Cleaned old digest records
done.

Running auth crons if required...
Cron script completed correctly
Execution took 17.448682 seconds
}}}
=== 
!!To Do
Ask Aaron to set cron timing to every 10 minutes

; Possible problems with increasing cron frequency:
: Problem : Automated course backups are executed via the cron.php. What if they did not finish before the next cron ran? 
: Ans: This happens now anyway. The old moodle running course backups would take hours and cron was set to start the process at a certain day and time.
In no particular order:
* +++[GEOS.POLS211]>
Arrrg! WHat's wrong with this?
# Totally wrong crosslisting GEOS.POLS211 ??? should be {{{GEOS211-1}}}
# CRN = XLS17 (also points to POLS240)
** should be {{{21061}}}
# Meg Streepey a teacher @@but@@ Helena Kaler also a teacher
# student enrollments mostly wrong
Also GEOS211:201220 should be GEOS211-2:201220
* CRN = {{{XLS18}}} instead of {{{21290}}}
* wrong student enrollments
Various attempts at fixing all failed. Made course backups. Copy of production database shows that course GEOS211-1:201220 is already there but it doesn't show! Can't create a course with shortname GEOS211-1:201220 because systemn says that it's already there!
Deleted courses completely BUT they were ''not'' recreated the next day after the next run banner/lmb
Manually create {{{GEOS211-A:201220}}} with correct CRN and hope that enrollments get fixed.
=== 
* +++[from Helena Kahler]>
{{{
Islam, Modernity, Globalization is listed as 2 separate courses, INST 340 and POLS.REL 340. They need to be combined.
}}}
What are we meant to do about this??? How are we supposed to know which courses go with which?
I created a meta course as POLS340 and imported stuff from POLS.REL340.
=== 
# {{{ESEM}}} category not created at all
# I did not realize, and nobody told me, that MAT and Med programs have totally separate termcodes (
# Dealing with 'Comps courses' that need to be present for the whole year.
# Crosslist frenzy {{{JPNS.JAPN.JPNS.WMNS340:201220}}}
# MyMoodle edit front page
|moodletest| zincite|
|production| sunstone|
Add following items to IRC Agenda Items over the next couple of months:
* New Moodle version for year 2011-12. Based on [[CLAMP LAE 1.1.4|http://www.clamp-it.org/code/moodle-1-9-9lae-v1-1-4/]] (moodle version 1.9.9+). What changes should we contemplate?
## different or modified theme? Can the default theme be improved (yes).
## modules/blocks/filters to add?
## modules / blocks / filters to discard?
## revamp categories as suggested [[here|http://legacy.earlham.edu/markp/socped/index.html#%5b%5bCategory%2Fcourse%20processes%20for%202011-12%5d%5d]] to make them look like [[this|http://legacy.earlham.edu/markp/millmiss/graphics/course-categories-new.png]]<<imagebox>>.
* Training for Moodle administrators for while I'm away on sabbatical. More details:
<<tiddler [[Moodle Management]]>>
* Course create script
* Student enrollment script


Need to hide {{{FALL 2011}}} category and unhide the EC Fall semester categories.
I have no fewer than four instances of Moodle running. Let's figure out what's what.
!!moo-195
* Started on 8-July [[Way forward]]. Uses same database as moo-clamp.
* Has the current production code running
* with new MyMoodle
* production data dir from 0809
* But last year's theme
!!moo-clamp
* Superseded by moo-195 on July-8.
* can probably delete this one
* deleted 20-Oct-09
!!moo-t95
* Testing for MyMoodle. Can remove this one too.
* test for parchment theme
* assignment zip patch screw up (version was for 2.0)
!!moo-late
* {{{$release = '1.9.5+ (Build: 20090805)'}}}
* no //config.php//
* I think I installed this one to get an up to date copy.
* deleted 20-Oct-09
!Next Steps for Moodle
# implement [[assignment zip|LAE Assignment Zip]] before the end of the semester.
** test out in moo-195
** try out on Moodle testing server
** Roll out over Thanksgiving
# download and install [[Moodle Liberal Arts Edition|http://www.clamp-it.org/code/moodle-liberal-arts-edition-v10/]] and add my goodies to it.
** over Christmas break
{{ts{7/12/11 11:01}}}
Email to Jane Niccum and Sarah Emmer:
<<<
Jane, Sarah,

Would you be interested in attending one or more hands on moodle workshops over the break? If so, what topics would you like to cover? Here's some suggestions:
*    Using Questionnaire to poll a class
*    How Progress Bar can help students keep up with their reading
*    Grading Attendance and Class Participation the easy way with Attendance.
*    Gradebook redux -- simple ways to keep track of class grades
*    Gradebook -- when to use Assignment activity and when not.
*    Managing courses -- using Import / Backup / Restore to manage all your courses yourself.
*    Content heavy course -- simple ways to present courses with lots of material without clutter.
*    Using Scheduler to create online 'sign up sheet' 
<<<
+++[Sarah's response]>
Thanks for the offer, and yeah, sure, I'd be interested in at least reviewing/polishing my Moodle skills. From your list, in order of preference, the items I'd be most interested in would be:
1) Using scheduler to create an online "sign up sheet"
2) Managing... particularly the backup & restore parts
3) Attendance.
then maybe...
4) Content heavy courses & preventing clutter.

If Jane has different needs, like I said I'd be happy to review/polish other skills too.
I'll be around all through break, so any time would work -- particularly between the hours of 9:00-1:00.
=== 

{{ts{2/08/10 16:29}}}
Moodletest up and running.
Uploaded 127 users from //moodle_professor-accounts 2010.csv//
But:
>Aaron still working on Apache config :-)
{{ts{2/08/10 17:38}}}
Uploaded a bunch of user accounts. 
Then courses -- hiccuped on Jane Terashima cos she's on  sabbatical this semester.
Finally, created 66 courses and 51 categories!
Now that the digital dust is beginning to settle I wanted to review the changes that have taken place and some consequent implications.
!! Automated Course Creation, Enrollment, and Why You Still Need an Enrollment Key
We have put into place a system (called ‘LMB’) which takes information from Self-Service (Banner) and feeds it into Moodle to create courses automatically and assigns both teacher and student roles in these new courses. When a student enrolls into a class using Self Service, the ‘LMB’ updates (overnight) the moodle system with the newest class information. When a student drops a class, this is also handled by the system and her name is removed from the moodle class roster by the following day.
!!!Implications:
* If a student is not in the list of class participants in your Moodle course the chances are that he has not successfully enrolled into the course from Self Service. A visit to the Registrar's office is essential. But do check the class roster in Self Service first -- it may be that he has just signed up today.
* Students who are just visiting the class will not have access to the Moodle course. 
** @@Workaround:@@ Set an 'enrollment key' and then allow access to 'Guest + key' (Administration : Settings : Availability : Guest access -> allow guests who have the key). The student then will login to Moodle //as a Guest//, find your course and use the Enrollment key you give him to view the course. You can use this same technique to allow colleagues from other institutions to look at your course.
* You cannot change the student enrollments independently of the LMB system (neither can the Moodle Czar). As a Teacher in a course you can add Administrative Assistants and TAs in the Admin Assistant or Teacher role (Administration : Enrollments -> Admin Assistant - Search and [Add]).
!! To Do
* You still ''need to set an enrollment key'' for your course. (It's quite easy, just open Administration : Settings : Availability and type in a short password, then [Save changes]. Not only does this prevent inquisitive students (there are some out there!) from accidentally enrolling in your class it means that the course is fully password protected for the purposes of copyright. 
* Please check your student roster (Participants : students) against what you find in Self Service. Remember that class enrollments will reflect the previous day's activity.
!! Last year's courses hidden
We put last year's courses (which use the graduation year 2011 in the short name, eg ~ENG255:201120) into a 'hidden' category. We realize that this has caused fury in some quarters and we apologize, but we cannot please all the people all the time. We hid all last year's courses so that returning students would not get confused and use the wrong year's course (which has happened in the past). We all know of students who exploit ambiguities or potential confusions and having all of last year's courses visible to them would definitely cause a good deal of confusion. You can still import a course from last year into a current year's course as I have explained before ([[details here|http://legacy.earlham.edu/markp/moodledocs/#ImportCourse]]).
!! Moodle 'sites' that are not classes (eg Committees)
Our 'open' policy with regard to moodle use means that there are many 'sites' that are not classes, for example Community Documents. These have been moved over //as is// from last year. These sites //are not part of the automated enrollment system// so if you are in charge of such a site (ie in the 'teacher role') it's worth checking the participants and making adjustments via Administration : Enrollments and Add and Remove names as necessary. If you need a new site created in this way please complete the [[Site creation form| ]]
!!Accessing course material from last year's classes. 
Please reread [[this docmentation|http://legacy.earlham.edu/markp/moodledocs/#Moodle2012]]
!!Cross listed courses
There are many ways that courses can be crosslisted. Sometimes it has the same department crosslisted, eg {{{PSYC.PSYC115:201210}}} or {{{ART.ART.ART325:201210}}} and sometimes it has two different forms, eg {{{PAGS.MGMT.ECON.INST101:201210}}} and {{{ECON.PAGS.INST.MGMT101:201210}}}. Either way, we should have sorted out any problems with this type of course already.
!!Multiple sectioned courses
If you are teaching a course with multiple sections and you are teaching both of those sections (eg {{{PSYC342-1:201210}}} and {{{PSYC342-2:201210}}}) we can create a //meta// course (in this case we call it {{{PSYC342:201210}}}) which inherits the enrollments of the constituent //child// courses. Course material goes into the meta-course and the //child// courses should have no student availability which hides them from view. C
!Moodle Team
Need more help? Contact a moodle team member:
|!Team member|!email|!phone|
|Wes Miller|{{{wesm}}}| 1278|
|Amy Bryant|{{{bryanam}}}| 1302|
|Neal Baker|{{{bakerne}}}| 1355|
;Note:
: The Moodle Czar, Mark Pearson, will be away from his post on sabbatical from September 3^^rd^^ until November 30^^th^^


To : Faculty mailing list, MyMoodle page, theHeart (Brad Stahlhut)

!Moodle construction work this summer
There will be construction work this summer on our Moodle server hardware which will have some unavoidable impact on uptime.
# The current production server is running out of disk space, so we are upgrading the drives to 1 Terabyte size (1,000 Gb). To accomplish this with minimal downtime we need to move all the moodle code and data off this server and onto the Test server where we can restart moodle with the familiar URL (moodle.earlham.edu). Moodle will have to be offline during this process so that no data corruption occurs. We are hoping that this process won't take any longer than a working day. Thursday June 2nd is currently slated for this activity.
# When the new drives have arrived they will be installed and the FreeBSD operating system installed and configured. Then the moodle code and data need to be transferred back from the Test server and tested. Again, this activity demands that moodle be taken offline and so there will be a day in early July when Moodle will be unavailable.
# Finally, I am working on an upgraded Moodle system which will have bugfixes and a few new features but will look and feel essentially the same. We're planning to restart with a new database which will alleviate a number of longstanding problems. Here again, after a period of testing the production Moodle will be taken offline and the new system brought up. This should not involve a whole working day's downtime. Look for this to happen in late July.
!!!Timetable
# Thursday July 2nd -- Moodle freeze for the day. Move code & data to Test system.
# Early July. When the new drives are ready move Moodle back to Production server. Freeze for a day.
# Late July. Having tested new Moodle version freeze system to move to new code.
Way cool bar to add to bottom of theme. Try adding to Anomaly
+++[get it]>
{{{
~/moo-plugins/contrib]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P -r MOODLE_19_STABLE contrib/patches/moodlebar/
cvs checkout: Updating contrib/patches/moodlebar
cvs checkout: Updating contrib/patches/moodlebar/images
}}}
This didn't work even though it seemed to. No contrib/patches directory created. Wierd. Strange.
=== 
Get the zip file from [[Moodle bar|http://tracker.moodle.org/browse/CONTRIB-1797]] in the Tracker.
Modify a copy of Anomaly to make Anomaly_bar.
Created 'Anomalybar but the [[effect is not so good|graphics/moodlebar_theme_addin.png]]<<imagebox>>
So won't use this one just yet.
See [[Zebra theme]]
{{ts{30/01/12 15:07}}}
I emailed Betsy an Excel file which summarized all the import errors that were occurring on doing the icgorldi import.
She sent me back an annotated copy with helpful identifications.

* [[LMB errors : username collision]]
* [[LMB errors : courses]]
* [[WordCountMacro|http://wordcountmacro.tiddlyspot.com/]] - a one-liner that displays a tiddler's word count
* [[LinkToMeMacro|http://linktomemacro.tiddlyspot.com/]] - another one-liner that automatically makes a link to the current TiddlyWiki file

Older and experimental stuff:
* http://mptw-beta.tiddlyspot.com/
* http://mptw2.tiddlyspot.com/
* http://mptw1.tiddlyspot.com/
I want to test out the [[user-determined order and number of courses on myMoodle|http://tracker.moodle.org/browse/MDL-19430]] (and discussion : [[user-determined order of courses on myMoodle|http://moodle.org/mod/forum/discuss.php?d=122236]]) to see whether this hides courses in hidden categories. 
I'm using the //public_html/moo-t95// test version so that if it screws up I'm not sunk.
# Revert the files that we patched here : [[Hide courses in MyMoodle]] , ie //course/lib.php// and //lib/datalib.php//
# Apply //0001-hook-for-a-local-my-moodle.patch// (in moo-plugins/mymoodle
# Install the code +++[installation steps]>
INSTALLATION STEPS:
1. Log in to your Moodle admin and go to '/moodle/user/profile/index.php'. Create two new user profile
 fields of type 'Text input':
  * shortname: 'myorder'
    max length: 2048
    all other settings are up to you
  * shortname: 'mynumber'
    max length: 3
    all other settings are up to you

2. Copy the 'local' folder to '/moodle/local'

3. Append below CSS to '/moodle/theme/standard/styles_layout.css'

Users may need to log out for changes to take effect.
=== 
I had some funnies with the small set of courses there so I rejigged the config.php so that it used the 'moomy' database and data dir.
{{{
$CFG->wwwroot   = 'http://rublev.lly.earlham.edu/~markp/moo-t95';
$CFG->dirroot   = '/usr/home/markp/public_html/moo-t95';
}}}
Now I'm ready to apply the patch. ''But'' when I examine the patch file it refers to a directory that does not exist:
|local/lib.php |    7|
|my/index.php  |   58|
The dir //local// does not exist in any of my installs. Should I check to see whether it exists in the latest Moodle download?
----
First attempt at patch {{{public_html/moo-t95]$ patch <0001-hook-for-a-local-my-moodle.patch}}} +++[output]
{{{
[markp@rublev /usr/home/markp/public_html/moo-t95]$ patch <0001-hook-for-a-local-my-moodle.patch                Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|From ec94245e7ebf9ef64b41af2fe109941fb5d1fe14 Mon Sep 17 00:00:00 2001
|From: David Drummond <david@catalyst.net.nz>
|Date: Tue, 21 Oct 2008 13:18:10 +0100
|Subject: [PATCH] hook for a local my moodle
|
|---
| local/lib.php |    7 +++++-
| my/index.php  |   58 ++++++++++++++++++++++++++++++++++++--------------------
| 2 files changed, 43 insertions(+), 22 deletions(-)
|
|diff --git a/my/index.php b/my/index.php
|index 449a954..0a0f7e9 100644
|--- a/my/index.php
|+++ b/my/index.php
--------------------------
Patching file index.php using Plan A...
Hunk #1 failed at 63.
1 out of 1 hunks failed--saving rejects to index.php.rej
Hmm...  Ignoring the trailing garbage.
done
}}}
=== 
Here's what I now think is going on. 
# Use the Penny Leach file to patch the moodle/my/index.php and then 
# Install the Minh-Tam Nguyen stuff.

Move file to the //my// directory,and then {{{ }}} ''but'' +++[still failed:]
{{{
Hmm...  Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|From ec94245e7ebf9ef64b41af2fe109941fb5d1fe14 Mon Sep 17 00:00:00 2001
|From: David Drummond <david@catalyst.net.nz>
|Date: Tue, 21 Oct 2008 13:18:10 +0100
|Subject: [PATCH] hook for a local my moodle
|
|---
| local/lib.php |    7 +++++-
| my/index.php  |   58 ++++++++++++++++++++++++++++++++++++--------------------
| 2 files changed, 43 insertions(+), 22 deletions(-)
|
|diff --git a/my/index.php b/my/index.php
|index 449a954..0a0f7e9 100644
|--- a/my/index.php
|+++ b/my/index.php
--------------------------
Patching file index.php using Plan A...
Hunk #1 failed at 63.
1 out of 1 hunks failed--saving rejects to index.php.rej
Hmm...  Ignoring the trailing garbage.
done
}}}
=== 
So let's apply the code that's new by hand:
At line 63:
{{{
--- 63,111 ----
      print_container_start(TRUE);

  /// The main overview in the middle of the page

+     // look for a custom handler
+
+     $locallib = $CFG->dirroot . '/local/lib.php';
+
+     if (file_exists($locallib)) {
+          require_once($locallib);
      }

+     if (function_exists('local_my_moodle') ) {
+
+         local_my_moodle();
+
+     } else {
+
+         // limits the number of courses showing up
}}}
And at 111 we terminate the //else// clause :
{{{

+
      }

      print_container_end();
}}}
----
Having fixed the index.php now let's make a diff file so that we can reapply the patch:
{{{
$ diff -iwBu index.php.bak index.php >hook-for-a-local-my-moodle-195.patch
}}}
And upload this back to MDL-19430

[[MyMoodle for 1.9.5]]
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300

This is in progress. Help appreciated.


Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

/***
|Name:|MptwConfigPlugin|
|Description:|Miscellaneous tweaks used by MPTW|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
!!Note: instead of editing this you should put overrides in MptwUserConfigPlugin
***/
//{{{
var originalReadOnly = readOnly;
var originalShowBackstage = showBackstage;

config.options.chkHttpReadOnly = true; 		// means web visitors can experiment with your site by clicking edit
readOnly = false;								// needed because the above doesn't work any more post 2.1 (??)
showBackstage = true;							// show backstage for same reason

config.options.chkInsertTabs = true;    		// tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = "";			// don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";			// don't need message when creating a new tiddler 

config.options.chkSaveBackups = true;			// do save backups
config.options.txtBackupFolder = 'twbackup';	// put backups in a backups folder

config.options.chkAutoSave = (window.location.protocol == "file:"); // do autosave if we're in local file

config.mptwVersion = "2.5.3";

config.macros.mptwVersion={handler:function(place){wikify(config.mptwVersion,place);}};

if (config.options.txtTheme == '')
	config.options.txtTheme = 'MptwTheme';

// add to default GettingStarted
config.shadowTiddlers.GettingStarted += "\n\nSee also [[MPTW]].";

// add select theme and palette controls in default OptionsPanel
config.shadowTiddlers.OptionsPanel = config.shadowTiddlers.OptionsPanel.replace(/(\n\-\-\-\-\nAlso see AdvancedOptions)/, "{{select{<<selectTheme>>\n<<selectPalette>>}}}$1");

// these are used by ViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';

//}}}
Name: MptwGreen
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

Name: MptwRed
Background: #fff
Foreground: #000
PrimaryPale: #eaa
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwRounded|
|Description|Mptw Theme with some rounded corners (Firefox only)|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|PageTemplate|MptwTheme##PageTemplate|
|StyleSheet|##StyleSheet|

!StyleSheet
/*{{{*/

[[MptwTheme##StyleSheet]]

.tiddler,
.sliderPanel,
.button,
.tiddlyLink,
.tabContents
{ -moz-border-radius: 1em; }

.tab {
	-moz-border-radius-topleft: 0.5em;
	-moz-border-radius-topright: 0.5em;
}
#topMenu {
	-moz-border-radius-bottomleft: 2em;
	-moz-border-radius-bottomright: 2em;
}

/*}}}*/

Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

|Name|MptwStandard|
|Description|Mptw Theme with the default TiddlyWiki PageLayout and Styles|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
|Name|MptwTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|##PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|##StyleSheet|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
        <div id='sidebarTabs' refresh='macro' force='true' macro='slider chkSideBarTabs SideBarTabs " index »" "display lists of tiddlers"'></div>
<!--
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
-->
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->

!ViewTemplate
<!--{{{-->
[[MptwTheme##ViewTemplateToolbar]]

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	<!--
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
	-->
</div>

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>
<!--        <div class='viewer' macro='notes heading:"Remarks" tag:"NoteTiddlers" suffix:"Notes"'></div> -->
</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>

<!--}}}-->

!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler permalink references jump +editTiddler  > closeOthers deleteTiddler fields '></span> <span macro='newHere label:"new here"'></span> 
<!--	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span> -->
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->

!StyleSheet
/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas' monospace;
	background-color:[[ColorPalette::TertiaryPale]];
}


/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'Trebuchet MS' sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:1em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background-color: transparent;
	color: [[ColorPalette::Foreground]];
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryDark]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	visibility:hidden;
}
.selected .toolbar {
	visibility:visible;
}

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
   display:inline;
}

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
  padding:0.5em;
  display:block;
}
#sidebarOptions .sliderPanel .select br {
	display:none;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}

/* get user styles specified in StyleSheet */
[[StyleSheet]]

/*}}}*/

|Name|MptwTrim|
|Description|Mptw Theme with a reduced header to increase useful space|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|StyleSheet|MptwTheme##StyleSheet|
|PageTemplate|##PageTemplate|

!PageTemplate
<!--{{{-->

<!-- horizontal MainMenu -->
<div id='topMenu' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<span refresh='content' tiddler='SiteTitle' style="padding-left:1em;font-weight:bold;"></span>:
<span refresh='content' tiddler='MainMenu'></span>
</div>
<div id='sidebar'>
	<div id='sidebarOptions'>
		<div refresh='content' tiddler='SideBarOptions'></div>
		<div style="margin-left:0.1em;"
			macro='slider chkTabSliderPanel SideBarTabs {{"tabs \u00bb"}} "Show Timeline, All, Tags, etc"'></div>
	</div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
</div>

For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
/***
|Description:|A place to put your config tweaks so they aren't overwritten when you upgrade MPTW|
***/
//{{{

config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

config.options.txtTheme = 'MptwTheme';
config.options.txtBackupFolder ='archives';
//}}}
!![[MrCUTE Jr. Shared URL/File Repository|http://moodle.org/mod/data/view.php?d=13&rid=2540&filter=1]]

[[Here's what it does|http://moodle.org/file.php/1/moddata/data/13/48/2540/MrCUTE_Jr_SharedURL-FileRepository_1r2.gif]]<<imagebox>>

* [[Useful slideshow|http://www.slideshare.net/guest01b8f9/mr-cute-2-the-simple-facts]]
<html>
<div style="width:425px" id="__ss_1037920"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/guest01b8f9/mr-cute-2-the-simple-facts" title="Mr Cute 2 - The simple Facts">Mr Cute 2 - The simple Facts</a></strong><object id="__sse1037920" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mrcutesharecare2-1234880059811423-3&stripped_title=mr-cute-2-the-simple-facts" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse1037920" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mrcutesharecare2-1234880059811423-3&stripped_title=mr-cute-2-the-simple-facts" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/guest01b8f9">guest01b8f9</a>.</div></div>
</html>

!!!Documentation
* [[MrCuteJr Shared Resource Repository|http://docs.moodle.org/en/MrCuteJr_Shared_Resource_Repository]]
<<<
!!  Features (no particular order)

* Shared resources can be searched for by keywords (thanks to MrCUTE2 team for key code for this functionality)
* A shared URL resource that needs updating (e.g. a broken link) can be done in one location
* A shared file resource that needs updating can be updated in one location
* Shared URL/File resources are stored outside of site-files and can only be accessed by a student from a link inside of a course that the students are enrolled in; further, the links are user & course specific and will not work for another user
* Any admin or editingteacher can search for, add and edit resources in the shared repository (no setup required)
* Admin can import existing files that have been FTP'd/copied/moved to the repository folder; the import tool also provides "semi-intelligent" suggested values for the repository searchable data fields (title, description, keywords) for each new file found
* Optionally, resource icons, (in particular for URL's), can be defined more appropriately
* It should be simple to use (at least I hope, it was one of my goals! Let me know if you find otherwise and have ideas on how to make it easier)
* AJAX search-as-you-type feature (see how-to below) 
<<<
On CVS at :
<<<
Please note for CVS there are 2 directories you need to access:
* Block Module (for search):
** {{{http://cvs.moodle.org/contrib/plugins/blocks/mrcutejr/}}}
* Resource-Type Module (for "add resource..." functionality):
**          {{{http://cvs.moodle.org/contrib/plugins/mod/resource/type/mrcutejr/}}} - the patch for enabling dynamic icons is stored in this folder
<<<

<<notes>>
Install this on rublev --LAE-199-- use moo-2011t instead
Enquire whether this works for M 2.0
Installed [[Install MrCute Jr]]
I noticed this recently when doing Dan's course :
[[Multimedia filter shows file format and link|http://tracker.moodle.org/browse/MDL-27259]]
The workaround solution is:
<<<
One way to eliminate these links is to empty the relevant strings in moodle/lang/en_utf8/mediaplugin.php. For example, change
{{{$string['mp3audio'] = 'MP3 audio';}}}
to
{{{$string['mp3audio'] = '';}}}
<<<
Do this.
!!Enhancements to ~MyMoodle
* Treat course list like a Course outline. 
** order by drag'n'drop
** hide unused classes
* hide/reveal assignments due (on //student's// display) OR
* assignment not displayed until From date and disappear after Due date.
* simple, //configurable//, stats display under Course name. Eg:
** number of enrolled students
** date of last activity (do I need to do something?)
** graph of course access by all students over last week/month/since course start. This would indicate how much your students have been accessing the course material. Easy to crunch the data from logs.
It used to be the case that MyMoodle displayed your courses whether they were in a hidden category or not. No longer! Now, moving them into a hidden category hides the course list from both MyMoodle and the My Courses block.
''Brilliant''
!!Update
The above behaviour was seen in http://rublev.lly.earlham.edu/~markp/moodev/ where I was using the Catalyst 1.9.4 TinyMCE distro and, more importantly, had applied patches. So, back to square one.
!!Options:
* Try out ~Minh-Tam Nguyen's [[MyMoodle hack|http://moodle.org/mod/forum/discuss.php?d=122236]], and on tracker [[user-determined order and number of courses on myMoodle|http://tracker.moodle.org/browse/MDL-19430]].
** Need to pre-install Penny Leach's [[LOCAL: my moodle centre column override|http://tracker.moodle.org/browse/MDL-17446]]
* Try to get Jenny Gray's MyMoodle hack [[22 April 2009: MyMoodle followup]] to work.
How about this?
If the course has the [[Progress Bar|Time Management Tool]] block enabled add it into the MyMoodle course section (see [[Progress bar : display]])
And remove the list of Assignments because that would be superfluous.
Having sussed out the [[local_mymoodle_patch|More on MyMoodle]] I went ahead with installation of //MDL-19430+(20090721).zip//:
!!!INSTALLATION STEPS:
#Log in to your Moodle admin and go to '/moodle/user/profile/index.php'. Create two new user profile fields of type 'Text input':
** shortname: 'myorder'
***    max length: 2048
***    all other settings are up to you
** shortname: 'mynumber'
***    max length: 3
***    all other settings are up to you
#Copy the 'local' folder to '/moodle/local'
# Append below CSS to '/moodle/theme/standard/styles_layout.css'
!!!Results
Great success 
* [[screenshot|graphics/mymoodle_ui-improvement.png]]<<imagebox>>
* [[edit MyMoodle display|graphics/mymoodle_ui_editmode.png]]<<imagebox>>
!!! Create tar archive
+++[code]
{{{
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ mkdir my
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ cd my
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive/my]$ cp ~/public_html/moo-t95/my/* .
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive/my]$ ls
hook-for-a-local-my-moodle-195.patch    index.php.bak
index.php                               pagelib.php
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive/my]$ rm pagelib.php
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive/my]$ cd ..
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ cp -r ~/public_html/moo-t95/local .
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ sudo chown -R www:www local
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ sudo chown -R www:www my
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ mkdir theme
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ mkdir theme/standard
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ cp ~/public_html/moo-t95/theme/standard/styles_layout.css theme/standard/styles_layout.css
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ sudo chown -R www:www theme/
[markp@rublev /usr/home/markp/moo-patch/mymoodle_archive]$ tar -cvzf ../mymoodle_gui.tgz *
a local
a local/images
a local/lang
a local/lib.php
a local/move.php
a local/lang/de
a local/lang/en_utf8
a local/lang/en_utf8/local.php
a local/lang/de/local.php
a local/images/Bottom.gif
a local/images/Down.gif
a local/images/MyMinus.jpg
a local/images/MyPlus.jpg
a local/images/Top.gif
a local/images/Up.gif
a my
a my/index.php.bak
a my/index.php
a my/hook-for-a-local-my-moodle-195.patch
a theme
a theme/standard
a theme/standard/styles_layout.css
}}}
=== 
----
!!Try out on //moo-195// installation:
* Copy over //mymoodle_gui.tgz// to moodle root
* unpack with {{{tar -xvf mymoodle_gui.tgz}}}
* don't forget to set up new Profile fields with Administration : Users : Accounts : User profile fields
[[works great|graphics/new_mymoodle_ui.png]]<<imagebox>>
----
Check out [[MyMoodle new version]]
Here's a response in [[My Moodle Functional Overhaul|http://tracker.moodle.org/browse/MDL-19124]] in the Moodle tracker.
<<<
>@Hubert:
>    We will probably just start off with just a duplication of the current "Course Overview" (with maybe minor improvements), at least for the initial release. ......... But it will probably not be in Moodle 2.0. And until it does become part of Moodle (if it does become a part of Moodle, which as always depends on demand for the changes, and manpower to maintain it), you can maintain your own version of the Course Overview block, which will be easier for others to add to their own Moodle site, since it will just be a block, rather than a patch.


I think that this is a mistake. Here's why. Let us assume that the majority of sites with Moodle in production are going to be migrating from version 1.9 to version 2. I don't think this is an unreasonable assumption since the number of sites coming to Moodle version 2 for the first time is likely to be quite small, especially in relation to the overall population of running Moodle sites. Now, we know that since the format for the course backup for v2 is incompatible with 1.x (for very good reasons I might add) the only way to get courses from v1.9 to v2 is by using the new code with an existing database. Thus we can be confident that many if not most of the moodle installations will have a population of users (faculty and students) who are enrolled in many courses. Thus the default user logging in to Moodle 2.0 with ~MyMoodle switched on will be greeted with a long list of courses stretching down for several 'pages' with all the assignments/other activities visible. Even if this list is ordered by most recent course it will still entail much scrolling to locate the course that the user desires to enter. The primary function of ~MyMoodle (IMO) is to present the enrolled courses in a simple to access list -- if the user has to scroll down the page every time to an arbitrary position this will quickly get tiresome and administrators will come under pressure to remove ~MyMoodle from being the default point of entry. Thus the ~MyMoodle Mockup graphic above is misleading; display 12 courses with assignments etc and you'll have a much better notion of what it'll look like at every logon to the average user.  To conclude, I cannot see how the Course Overview will function adequately without the ability to reorder and hide courses, and hide/reveal activities in the course frame which is exactly what [[MDL-19430|http://tracker.moodle.org/browse/MDL-19430]] achieves. 
<<<
Twelve hours later Martin D replied with:
<<<
Mark, I agree with you that the Course Overview should be a lot more collapsible/customisable than it is now, something along the lines of ~MDL-19430.

Since some code exists already it might be pretty simple to use it in the new Course Overview block. If so I'll try to ensure it gets into 2.0 as standard.

The nice thing with the new block structure is that these blocks can evolve independently of the main My Moodle pages, and people can create alternatives at any time.
<<<
''YES'' -- who said that a measured comment at the right time couldn't change things?
On 17th Aug ~Minh-Tam Nguyen [[uploaded an update|http://tracker.moodle.org/browse/MDL-19430]] to the [[MyMoodle for 1.9.5]] package:
<<<
I uploaded a new package of files: MDL-19430 (20090818).zip
I have made a number of changes to improve security, maintainability and performance, as suggested by Ashley Holman.
I have also made changes to the install.txt to hopefully avoid the confusion Mark went through.
This package is straight from of my installation of 1.9.5, and Penny's patch also works fine on 1.9.5, once you create the 'local' folder. 
<<<
I unpacked this and found that there were three files different:
{{{
MDL-19430-0818]$ diff -qr local/ ~/public_html/moo-195/local/
Only in local/: install.txt
Files local/lib.php and /home/markp/public_html/moo-195/local/lib.php differ
Files local/move.php and /home/markp/public_html/moo-195/local/move.php differ
Only in local/: num.php
}}}
Suggest copying over these files and then remaking the tar/zip archive.
{{{
MDL-19430-0818/local]$ cp *.php ~/public_html/moo-195/local
moo-plugins/mymoodle/MDL-19430-0818/local]$ cp *.php ~/public_html/moo-t95/local
}}}
----

In moo-t95 the php debugging is switched on. Get the following errors:
{{{
Notice: Undefined variable: site in /usr/home/markp/public_html/moo-t95/local/lib.php on line 169
Notice: Trying to get property of non-object in /usr/home/markp/public_html/moo-t95/local/lib.php on line 169
}}}
When I switch back to the previous versions of local/lib.php and local/move.php the errors go away.

----

Posted the problem to the Tracker: +++[problem]>
Mark Pearson added a comment - 18/Aug/09 05:25 AM
I downloaded the MDL-19430 (20090818).zip and substituted it into a working 1.9.5 system where the previous version had worked fine. I found two errors:
1) The pulldown menu for number of courses always has "10" at the bottom (not there before)
2) Switch on debug in administration and get the following notices:

Notice: Undefined variable: site in /usr/home/markp/public_html/moo-195/local/lib.php on line 169
Notice: Trying to get property of non-object in /usr/home/markp/public_html/moo-195/local/lib.php on line 169

I thought you should know.
=== 
And got +++[this reply]>
Minh-Tam Nguyen added a comment - 18/Aug/09 02:19 PM
Thank you Mark for those two points.
The extra 10 (if the user has access to less than 10 courses) was mainly to allow people to set a higher number than they currently have, in anticipation of soon getting more.
However your comment made me realise that this wasn't the right solution. Instead, I have now changed it to be "Always show all", 1, 2, 3, etc. up to the number of courses. THis shoudl allow users to set it to 'Always all' and know that new courses will show.
I have also changed the code to avoid that error message. I guess I was a little too keen in removing unused variables.
CHeers,
Minh-Tam
=== 
I downloaded his new version. Overwrote the //local// folder in moo-195. It worked with no errors. Copied over the stuff and that works too. 
+++[code]
Check that code versions are in fact different:
{{{
moo-plugins/mymoodle/MDL-19430-new]$ diff -qr local/ ~/public_html/moo-t95/local/
Only in local/: install.txt
Files local/lang/de/local.php and /home/markp/public_html/moo-t95/local/lang/de/local.php differ
Files local/lang/en_utf8/local.php and /home/markp/public_html/moo-t95/local/lang/en_utf8/local.php differ
Files local/lib.php and /home/markp/public_html/moo-t95/local/lib.php differ
Files local/move.php and /home/markp/public_html/moo-t95/local/move.php differ
Only in local/: num.php
}}}
Copy files:
{{{
moo-plugins/mymoodle/MDL-19430-new]$ cp -R local/* ~/public_html/moo-t95/local/
}}}
That does it:
{{{
/moo-plugins/mymoodle/MDL-19430-new]$ diff -qr local/ ~/public_html/moo-t95/local/
}}}
=== 
!!ToDo
Pack this version into TGZ and copy to paz for Aaron.
{{{
moo-patch/mymoodle_archive]$ tar -cvzf ../mymoodle_gui_new.tgz *
}}}
Get to the right directory : {{{cd ~/moo-patch/mymoodle_archive/theme/standard}}}
Edit the standard_layout.css to remove all the standard stuff just leaving the my moodle css and rename to mymoodle_layout.css
Re-tar into archive : {{{ ~/moo-patch/mymoodle_archive]$ tar -cvzf ../mymoodle_gui_2010.tgz *}}}
!!Install
# Copy into place : {{{/markp/public_html/clamp-LAE]$ cp ../../moo-patch/mymoodle_gui_2010.tgz .}}}
# Unpack : {{{clamp-LAE]$ tar xvf mymoodle_gui_2010.tgz}}}
# Append mymoodle_layout.css : {{{clamp-LAE/theme/standard]$ cat mymoodle_layout.css >>styles_layout.css}}} and delete
# Log in to your Moodle admin and go to '/moodle/user/profile/index.php'. Create two new user profile fields of type 'Text input':
** shortname: 'myorder'
***    max length: 2048
***    all other settings are up to you
** shortname: 'mynumber'
***    max length: 3
***    all other settings are up to you
!!1. [[Moo-cat|http://rublev.lly.earlham.edu/moo-cat]]
This is the Catalyst version of 1.9.4+ with TinyMCE and uses a copy of the production database but dummy data together with the EIS theme.
* My Courses block ''does'' hide courses in hidden category, //but// does not display the full course  title.
* ''MyMoodle'' : all courses with user as Teacher are displayed whether or not in a hidden category. This is the behaviour we ''don't'' want.
!!2. [[moodev|http://rublev.lly.earlham.edu/~markp/moodev/]]
This is also the Catalyst TinyMCE 1.9.4+ version, but with a couple of changes:
# [[patches to MyMoodle|http://tracker.moodle.org/browse/MDL-13583]] by Jenny Grey were applied. However there is an [[ugly side-effect|graphics/MyMoodle_ugliness.png]]<<imagebox>>
# a different and better MyCourses block.
This ''does'' hide courses from hidden categories, see also [[MyMoodle and course hiding]], and so something in the applied patch is doing this. I wonder if I can extract the part which hides the courses from the other stuff?
!!3. [[moo-clamp|http://rublev.lly.earlham.edu/~markp/moo-clamp]]
This is a straight 1.9.5 install with a config file that can use the production database and data dir or a test db and blank data dir.
With the production setup, MyMoodle behaves badly.
!!ToDo
Do a diff between the mymoodle.php on moo-dev and moo-cat to see the differences.
!!What next?
[[22 April 2009 : MyMoodle queries]]
* [[New maintainer for My Moodle|http://moodle.org/mod/forum/discuss.php?d=117522]]
* [[new MyMoodle discussion group|http://moodle.org/mod/forum/view.php?id=7309]]
* Activity on Tracker: [[number of courses in MyMoodle home page|http://tracker.moodle.org/browse/MDL-13224]] -- current max courses = 21
!! Participants
Student role : 223
Teacher role : 17
!!!Activity
|!Activity|!Teachers|!Students|
|no access > 1 year| 5| 125|
|inactive 3 months - 1 year| 4| 61|
|active in last 30 days| 7| 14|
|active in last 5 days| 4| 5|
!!Forums
|!Forum|!About|!# posts|
|HELP!!!|Problems, and solutions|281|
|Moodle Documentation|A forum for posting documentation and tutorials on moodle.|19|
|Documentation and Training Collaboration|Documentation and Training Collaboration forum to share ideas and progress-this is separate from the Moodle documentation forum. This forum is a result of a breakout session at Denver Moodle Users Conference in October 2007.|3|
|Moodle newbies|This forum is intended for discussions concerning evaluating, migrating to and/or getting started with Moodle|32|
|Showcase Moodle courses|This forum is intended to allow users to showcase innovative uses of moodle.|2|
|Collaborative Moodle development|Forum for discussions concerning customizing, integrating, and developing Moodle capabilities|74|
|Developing Testing/Check Procedures for each module|Post drafts of testing procedures for your module here. Give Feedback on other check lists. Finalized procedures should be posted to the Wiki page for that Module in the above Wiki.|1|
|Hack-Doc Fest|This forum is to discuss the specifics of upcoming Hack-Doc Fests. The next event will be held Tuesday, July 15 through Thursday, July 17, 2008 at Kenyon College.|22|
|Statistics / Assessment Coding|Here we'll upload and talk about coding efforts with regard to functionality variously described as Census, Statistics and Assessment, each of which are interlinked.|4|
|Scheduler Module development|for collaboration between those working on the scheduler module.|3|
|Alternate Editors in Moodle |Discussion and solutions for implementing alternate editors with Moodle (other than HTMLArea)|1|
|Session Notes 08|Please post notes from 2008 sessions into this forum.|0|
|Session notes|Please post notes from sessions into this forum|9|
|Workshop Brainstorming|Planning and brainstorming and "Advanced Moodle" workshop (title subject to change!)|1|
;Most active forum is HELP!
:number participants : 235
:% posting : 36.2%
:% viewing : 62.4%
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
/***
|Name|NestedSlidersPluginInfo|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|documentation for NestedSlidersPlugin|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Usage
<<<
Use {{{+++}}} and {{{===}}} to delimit the slider content.  You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.  This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.

Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*open on hover (without needing to click)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro.  See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*@{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* ''"""+++""" (or """++++""") and """==="""''<br>marks the start and end of the slider definition, respectively.  When the extra {{{+}}} is used, the slider will be open when initially displayed.
* ''"""(cookiename)"""''<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* ''"""! through !!!!!"""''<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* ''"""^width^ (or just ^)"""''<br>makes the slider 'float' on top of other content rather than shifting that content downward.  'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.).  If omitted, the default width is "auto" (i.e., fit to content)
* ''"""*"""''<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed.  This is useful for creating 'pulldown menus' that automatically go away after they are used.  //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* ''"""@"""''<br>denotes "open on hover": the slider/floating panel will be automatically opened as soon as the mouse moves over the slider label, without requiring a click.
* ''"""{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""''<br>uses label/tooltip/accesskey.  """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional.  'class' is any valid CSS class name, used to style the slider label text.  'key' must be a ''single letter only''.  altlabel/alttooltip specify alternative label/tooltip for use when slider/floating panel is displayed.  //Note: you can use HTML syntax within the label text to include HTML entities (e.g., {{{&raquo;}}} (&raquo;) or {{{&#x25ba;}}} (&#x25ba;), or even embedded images (e.g., {{{<img src="images/eric3.gif">}}}).//
* ''"""#panelID:"""''<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content.  This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* ''""">"""''<br>automatically adds blockquote formatting to slider content
* ''"""..."""''<br>defers rendering of closed sliders until the first time they are opened.  //Note: deferred rendering may produce unexpected results in some cases.  Use with care.//

//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider: 
{{{
+++
   content
===
}}}
+++
   content
===
----
use a custom label and tooltip: 
{{{
+++[label|tooltip]
   content
===
}}}
+++[label|tooltip]
   content
===
----
content automatically blockquoted: 
{{{
+++>
   content
===
}}}
+++>
   content
===
----
all options (except cookie) //(default open, heading, sized floater, transient, open on hover, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++!!!^30em^*@{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
}}}
++++!!!^30em^*@{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
}}}
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
----
embedded image as slider button
{{{
+++[<img src=images/eric3.gif>|click me!]>
	{{big{OUCH!}}}
===
}}}
+++[<img src=images/eric3.gif>|click me!]>
	{{big{OUCH!}}}
===
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
2008.11.13 - 2.4.8 in document.onclick(), if transient panel is not a sliderPanel or floatingPanel, hide it via CSS
2008.10.05 - 2.4.7 in onClickNestedSlider(), added try/catch around focus() call to prevent IE error if input field being focused on is currently not visible.
2008.09.07 - 2.4.6 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.06.07 - 2.4.5 in 'onmouseover' handler for 'open on hover' slider buttons, use call() method when invoking document.onclick function (avoids error in IE)
2008.06.07 - 2.4.4 changed default for chkFloatingSlidersAnimate to FALSE to avoid clipping problem on some browsers (IE).  Updated Morpher hijack (again) to adjust regular sliderPanel styles as well as floatingPanel styles.
2008.05.07 - 2.4.3 updated Morpher hijack to adjust floatingPanel styles after animation without affecting other animated elements (i.e. popups).  Also, updated adjustSliderPos() to account for scrollwidth and use core findWindowWidth().
2008.04.02 - 2.4.2 in onClickNestedSlider, handle clicks on elements contained //within// slider buttons (e.g., when using HTML to display an image as a slider button).
2008.04.01 - 2.4.1 open on hover also triggers document.onclick to close other transient sliders
2008.04.01 - 2.4.0 re-introduced 'open on hover' feature using "@" symbol
2008.03.26 - 2.3.5 in document.onclick(), if click is in popup, don't dismiss transient panel (if any)
2008.01.08 - [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.28 - 2.3.4 added hijack for Animator.prototype.startAnimating().  Previously, the plugin code simply set the overflow to "visible" after animation.  This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
2007.12.17 - 2.3.3 use hasClass() instead of direct comparison to test for "floatingPanel" class.  Allows floating panels to have additional classes assigned to them (i.e., by AnimationEffectsPlugin).
2007.11.14 - 2.3.2 in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()".  Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display).  Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
2007.07.26 - 2.3.1 in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed.  Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
2007.07.20 - 2.3.0 added syntax for setting panel ID (#panelID:).  This allows individual slider panels to be repositioned within tiddler content simply by giving them a unique ID and then moving them to the desired location using the {{{<<DOM move id>>}}} macro.
2007.07.19 - 2.2.0 added syntax for alttext and alttip (button label and tooltip to be displayed when panel is open)
2007.07.14 - 2.1.2 corrected use of 'transient' attribute in IE to prevent (non-recursive) infinite loop
2007.07.12 - 2.1.0 replaced use of "*" for 'open/close on rollover' (which didn't work too well).  "*" now indicates 'transient' panels that are automatically closed if a click occurs somewhere else in the document.  This permits use of nested sliders to create nested "pulldown menus" that automatically disappear after interaction with them has been completed.  Also, in onClickNestedSlider(), use "theTarget.sliderCookie", instead of "this.sliderCookie" to correct cookie state tracking when automatically dismissing transient panels.
2007.06.10 - 2.0.5 add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)
2007.05.31 - 2.0.4 add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel.  This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page.  (thanks to Harsha for bug report)
2007.03.30 - 2.0.3 added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
2007.03.01 - 2.0.2 for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2007.03.01 - 2.0.1 in hijack for Slider.prototype.stop, use apply() to pass params to core function
2006.07.28 - 2.0.0 added custom class syntax around label/tip/key syntax: {{{{{classname{[label=key|tip]}}}}}}
2006.07.25 - 1.9.3 when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it.  Significantly reduces the 'cookie overhead' when default slider states are used.
2006.06.29 - 1.9.2 in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"
2006.06.22 - 1.9.1 added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value
2006.05.11 - 1.9.0 added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label
2006.05.09 - 1.8.0 in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element
2006.04.24 - 1.7.8 in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position
2006.02.16 - 1.7.7 corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie
2006.02.15 - 1.7.6 in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)
2006.02.04 - 1.7.5 add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2006.01.18 - 1.7.4 only define adjustSliderPos() function if it has not already been provided by another plugin.  This lets other plugins 'hijack' the function even when they are loaded first.
2006.01.16 - 1.7.3 added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels.  While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels.  Short-term workaround is to only adjust the position for 'top-level' floaters.
2006.01.16 - 1.7.2 added button property to slider panel elements so that slider panel can tell which button it belongs to.  Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2006.01.14 - 1.7.1 added optional "^" syntax for floating panels.  Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.
2006.01.14 - 1.7.0 added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)
2006.01.03 - 1.6.2 When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element.  (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)
2005.12.15 - 1.6.1 added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders
removed checkbox option for 'global' application of lazy sliders
2005.11.25 - 1.6.0 added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)
2005.11.21 - 1.5.1 revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability.  Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.
2005.11.20 - 1.5.0 added (cookiename) syntax for optional tracking and restoring of slider open/close state
2005.11.11 - 1.4.0 added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style
2005.11.07 - 1.3.0 removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines
2005.11.05 - 1.2.1 changed name to NestedSlidersPlugin
2005.11.04 - 1.2.0 added alternative character-mode syntax {{{(((}}} and {{{)))}}}
tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax
2005.11.03 - 1.1.1 fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used.  code cleanup, added documentation
2005.11.03 - 1.1.0 changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}.  changed name to EasySlidersPlugin
2005.11.03 - 1.0.0 initial public release
<<<
There is now a blog for MPTW. Check it out [[here|http://monkeypiratetiddlywiki.blogspot.com/]].
I came to the conclusion that the previous trial didn't go very well. So I'll down load the [[jmol resource for moodle 1.9|http://moodle.yeovil.ac.uk/course/view.php?id=1927&username=guest]] again and also [[the jmol filter for 1.9|https://github.com/geoffrowland/moodle-filter_jmol/tree/MOODLE_19_STABLE]] (note -- I think the previous version didn't work because it was the 2.0 version.
# download to {{{moo-plugins}}} {{{geoffrowland-moodle-filter_jmol-b876624.tar.gz}}} and {{{resource_jmol4moodle19.zip}}}
# create new site -- rename 'chemix-12', create new database to use with new site. Then generate site and add in the jmol code.
# +++[Install Jmol resource]>
TO INSTALL:

1. Copy the folder that comes with this download, from its location mod/resource/type/jmol, to the exact same location in your Moodle web server.
; use tar to do the copying.
2. Copy the language files from lang/en_utf8 (and various subfolders) to the exact parallel locations in your Moodle web server. duplicate {{{en_utf8}}} to {{{en_us_utf8}}} 
Results are in {{{jmol14-lang.tgz, jmol14-mod.tgz, jmol14-pix.tgz}}} @@done@@
<<<
You should also add a new 'text string' to the existing Moodle language file, {{{lang/en_utf8/resource.php}}} --//and// {{{en_us_utf8}}}-- not needed. This is the line to add: {{{$string['resourcetypejmol'] = 'Display a 3D molecule viewer';}}} 
@@done@@
<<<
3. OPTIONAL - Setting the Jmol icon - this is a little tricksy but looks good: 
# Firstly, copy the icon from pix/f/jmol.gif to the equivalent position on the Moodle server. @@done@@
# Secondly, modify mod/resource/lib.php and modify the function resource_get_coursemodule_info($coursemodule) so that it sets the icon correctly for "jmol" resource type. The following shows lines 376-387 AFTER modification - note the extra "else if" clause we've added at the end:
{{{
       if ($resource->type == 'file') {
           $icon = mimeinfo("icon", $resource->reference);
           if ($icon != 'unknown.gif') {
               $info->icon ="f/$icon";
           } else {
               $info->icon ="f/web.gif";
           }
       } else if ($resource->type == 'directory') {
           $info->icon ="f/folder.gif";
       } else if ($resource->type == 'jmol') {
           $info->icon ="f/jmol.gif";
       }
}}}
The line numbers may not correspond exactly in your copy of the lib file. @@done@@
=== 
!!Fixes
There are [[some fixes|graphics/jmol-lang-string-fixes.png]]<<imagebox>> to the lang files that should be done in {{{lang/en_utf8/resource_jmol.php}}} and {{{en_us_utf8}}}
!!Problem
When uploaded .pdb or .mol file get //unrecognized file format//. Did some detective work on moodl.org and found that it could be a Java issue. This would make sense since all the displays on Geoff Rowland's site do the same thing!
Check in Lilly Lab downstairs PCs and find that the molecule displays fine. But check Java version and it's at v6.
Back at my PC, frigg around with the //Java Control Panel//
Find an interesting setting:
* [Advanced] -> Java plugin : Enable next generation java plugin. ''uncheck this''
Try with Chrome and Firefox -- @@great success@@
!!Resources
* http://molvis.sdsc.edu/visres/index.html#pdb -- hugely comprehensive
----
!!Jmol Filter
Get the files together (lang is in the filter dir which is a pain):
{{{
filter/jmol]$ tar -czvf ../../jmol-lang.tgz lang
filter/jmol]$ rm -r lang/
filter/jmol]$ cd ../..
$ tar -cvzf jmol-filter.tgz filter/
$ ls -lh
total 2104
-rw-r--r--  1 markp  admins     0B Mar 29 09:25 README
drwxr-xr-x  3 markp  admins   512B Mar 29 09:25 filter
-rw-r--r--  1 markp  admins   2.0M Jun 28 19:25 jmol-filter.tgz
-rw-r--r--  1 markp  admins   4.5K Jun 28 19:23 jmol-lang.tgz
}}}
Now simply copy these to chemix-12 and untar
@@GREAT SUCCESS@@
<<notes>>
@@{{ts{5/07/11 15:58}}}@@
Test Jmol in {{{chemix-12}}} replicated in {{{ref-12}}}. Despite the previous success and no changes to the Java configuration I still got the @@unrecognized file format@@ when running jmol resource and filter in Firefox on my PC.
Talked to Jason and opened FF on his canonical test PC used to spawn all Lab m/c. All Jmol components worked fine. Also worked fine with Internet Explorer. And also my Mac. 
Back at my PC Firefox still not good, but Jmol worked with I.E and Chrome. Looks like a problem with Firefox alone.
''{{ts{19/07/10 15:58}}}''
With Bob Puffer's enthusiasm behind it, I'm looking at questionnaire:
>downloaded from [[moodle.org|http://download.moodle.org/download.php/plugins19/mod/questionnaire.zip]] and also did a CVS downlaod (in moo-plugins/contrib). I found all the files to be exactly the same. So use {{{~/2010-test-mods/questionnaire}}}
Install into Testbed and consider replacing Feedback.
!!Theme overhaul plus theme and palette switcher
Click options and try "select theme" and "select palette". Also there is no longer the empty_nolayout. You can just download the empty.html and change theme to MptwStandard. If you like to customise your templates see [[Note about customising templates]].
!!Slice based tagging list modes
You can now show tagging lists with all slices or description slices. See [[systemConfig]] for an example of the description slice. To use these click the excerpts button to cycle through the modes.
!!New plugins
I've included InstantTimestampPlugin and PrettyDatesPlugin as part of the standard MPTW distribution.
!!Latest TW core
Finally. <<version>>. Sorry about the long wait.
Came across some interesting stuff to test:
* [[Topicstree Course Format]]
{{ts{29/11/10 09:59}}}
New patch at [[Bulk user upload force password change when auth=POP3|http://tracker.moodle.org/browse/MDL-21559]] dated 5-nov-10 [[20101105_MDL-21559_2.0.patch|http://tracker.moodle.org/secure/attachment/22123/20101105_MDL-21559_2.0.patch]]

Download this and merge with 1.9.9 to make a new version.
!More themes from Patrick
http://newschoollearning.com/theme/
* [[Autumn theme]]

<<tag themes>>
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
	newHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	},
	newJournalHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	}
});

//}}}

/***
|Name:|NewMeansNewPlugin|
|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Version:|1.1.1 ($Rev: 2263 $)|
|Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Note: I think this should be in the core
***/
//{{{

// change this or set config.newMeansNewForJournalsToo it in MptwUuserConfigPlugin
if (config.newMeansNewForJournalsToo == undefined) config.newMeansNewForJournalsToo = true;

String.prototype.getNextFreeName = function() {
       var numberRegExp = / \(([0-9]+)\)$/;
       var match = numberRegExp.exec(this);
       if (match) {
               var num = parseInt(match[1]) + 1;
               return this.replace(numberRegExp," ("+num+")");
       }
       else {
               return this + " (1)";
       }
}

config.macros.newTiddler.checkForUnsaved = function(newName) {
	var r = false;
	story.forEachTiddler(function(title,element) {
		if (title == newName)
			r = true;
	});
	return r;
}

config.macros.newTiddler.getName = function(newName) {
       while (store.getTiddler(newName) || config.macros.newTiddler.checkForUnsaved(newName))
               newName = newName.getNextFreeName();
       return newName;
}


config.macros.newTiddler.onClickNewTiddler = function()
{
	var title = this.getAttribute("newTitle");
	if(this.getAttribute("isJournal") == "true") {
		title = new Date().formatString(title.trim());
	}

	// ---- these three lines should be the only difference between this and the core onClickNewTiddler
	if (config.newMeansNewForJournalsToo || this.getAttribute("isJournal") != "true")
		title = config.macros.newTiddler.getName(title);

	var params = this.getAttribute("params");
	var tags = params ? params.split("|") : [];
	var focus = this.getAttribute("newFocus");
	var template = this.getAttribute("newTemplate");
	var customFields = this.getAttribute("customFields");
	if(!customFields && !store.isShadowTiddler(title))
		customFields = String.encodeHashMap(config.defaultCustomFields);
	story.displayTiddler(null,title,template,false,null,null);
	var tiddlerElem = story.getTiddler(title);
	if(customFields)
		story.addCustomFields(tiddlerElem,customFields);
	var text = this.getAttribute("newText");
	if(typeof text == "string")
		story.getTiddlerField(title,"text").value = text.format([title]);
	for(var t=0;t<tags.length;t++)
		story.setTiddlerTag(title,tags[t],+1);
	story.focusTiddler(title,focus);
	return false;
};

//}}}

In [[Banner - Moodle LMB List Update|http://groups.google.com/group/banner-moodle/browse_thread/thread/e0ab21cf35fbada]] Eric Merrill writes:
<<<
Something else that I haven't really put out publicly yet, but has been in the works for more than a year - we are working on a Moodle-to-Banner grade exporter, which will be an extension of the LMB module.
<<<
@@WOOF@@
MPTW is now using the new theme framework from TW 2.3. It's pretty new and not well documented so I will make some notes here for those who want to customise their MPTW. 

Take a look at the tiddlers tagged with <<tag systemTheme>>. The slices there specify the templates and stylesheets used by that theme. Notice also that you can use the new Tiddler##Section notation to use a section of a tiddler.

If you want to customise your templates make a new systemTheme copied from MptwTheme then modify that as required.
Due to demand (Kevin Miles, Marya Bower) add the OUBlog.
!!OUBlog
@[[modules and plugins|http://moodle.org/mod/data/view.php?d=13&rid=1820]]
+++[Description]>
An alternative blog system for Moodle. Can be used in place of, or in addition to, the standard Moodle blog system.
* Provides user blogs (similar to Moodle ones; everyone has their own blog) and course blogs (add an instance of the module to a course, and students in the course can all contribute to a shared blog).
* Full support for comments. Comments can be turned off for a particular blog or post, but otherwise people can leave comments in both user and course blogs. In order to avoid spam, you currently have to be a logged-in user in order to leave comments, even if the post itself is open to the public.
* Access control levels: private (user only), course members, logged-in users, or worldwide.
* Group support for course blogs (so you can have per-group blogs).
* Blog-specific tags. Tags are not connected to the Moodle tag system but apply only within the blog. You click on a tag to see all posts in the current blog with that tag.
* User display options - change the name of your blog (from My Name's Blog to whatever you like) and add a description.
* Standard Moodle 1.9 role/permission support (eg if you want to make it so students can't post to course blogs, etc).
* Post and comment management. You can edit or delete posts and delete comments, but deleted or previous text remains available to administrator users. (This is necessary in various circumstances.)
* RSS and Atom feeds.
* Automatically integrates with the OU search system (if that is installed) to provide fulltext search of blog posts.
There is no connection between this system and standard Moodle blog; installing this system doesn't do anything to your existing Moodle blogs. If you want to move over to this system entirely, you would use the Moodle admin option that lets you disable its internal blog feature.
=== 
* [[discussion forum|http://moodle.org/mod/forum/discuss.php?d=107215]] and [[Add Personal comment in OuBlog|http://moodle.org/mod/forum/discuss.php?d=114510]]
* [[documentation|http://docs.moodle.org/en/OU_blog]]
* [[tracker issues|http://tracker.moodle.org/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=10033&sorter/order=DESC&sorter/field=priority&resolution=-1&component=10340]]
!!!Note:
>If you want to access the user blog, there isn't a link to it by default. You need to manually create a link to it, eg on your site homepage. The URL is just:
>>{{{yoursite/mod/oublog/view.php}}}
Get the source from CVS:
{{{moo-plugins]$ cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle login}}}
{{{moo-plugins]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P -r MOODLE_19_STABLE contrib/plugins/mod/oublog}}}
+++[cvs checkout:]>
 Updating contrib/plugins/mod/oublog
U contrib/plugins/mod/oublog/.sams
U contrib/plugins/mod/oublog/allposts.php
U contrib/plugins/mod/oublog/atomlib.php
U contrib/plugins/mod/oublog/backuplib.php
U contrib/plugins/mod/oublog/bloglogin.php
U contrib/plugins/mod/oublog/comment_form.php
U contrib/plugins/mod/oublog/deletecomment.php
U contrib/plugins/mod/oublog/deletelink.php
U contrib/plugins/mod/oublog/deletepost.php
U contrib/plugins/mod/oublog/editcomment.php
U contrib/plugins/mod/oublog/editinstance.php
U contrib/plugins/mod/oublog/editlink.php
U contrib/plugins/mod/oublog/editpost.php
U contrib/plugins/mod/oublog/feed.php
U contrib/plugins/mod/oublog/icon.gif
U contrib/plugins/mod/oublog/index.php
U contrib/plugins/mod/oublog/lib.php
U contrib/plugins/mod/oublog/link_form.php
U contrib/plugins/mod/oublog/locallib.php
U contrib/plugins/mod/oublog/mod_form.php
U contrib/plugins/mod/oublog/movelink.php
U contrib/plugins/mod/oublog/null_transaction_wrapper.php
U contrib/plugins/mod/oublog/pagelib.php
U contrib/plugins/mod/oublog/post_form.php
U contrib/plugins/mod/oublog/restorelib.php
U contrib/plugins/mod/oublog/search.php
U contrib/plugins/mod/oublog/settings.php
U contrib/plugins/mod/oublog/styles.php
U contrib/plugins/mod/oublog/version.php
U contrib/plugins/mod/oublog/view.php
U contrib/plugins/mod/oublog/viewedit.php
U contrib/plugins/mod/oublog/viewpost.php
cvs checkout: Updating contrib/plugins/mod/oublog/db
U contrib/plugins/mod/oublog/db/access.php
U contrib/plugins/mod/oublog/db/install.xml
U contrib/plugins/mod/oublog/db/upgrade.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ca_utf8
U contrib/plugins/mod/oublog/lang/ca_utf8/oublog.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ca_utf8/help
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog
U contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog/allowcomments.html
U contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog/completion.html
U contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog/feed.html
U contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog/tags.html
U contrib/plugins/mod/oublog/lang/ca_utf8/help/oublog/visibility.html
cvs checkout: Updating contrib/plugins/mod/oublog/lang/de_utf8
U contrib/plugins/mod/oublog/lang/de_utf8/oublog.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang/de_utf8/help
cvs checkout: Updating contrib/plugins/mod/oublog/lang/de_utf8/help/oublog
U contrib/plugins/mod/oublog/lang/de_utf8/help/oublog/allowcomments.html
U contrib/plugins/mod/oublog/lang/de_utf8/help/oublog/completion.html
U contrib/plugins/mod/oublog/lang/de_utf8/help/oublog/feeds.html
U contrib/plugins/mod/oublog/lang/de_utf8/help/oublog/tags.html
U contrib/plugins/mod/oublog/lang/de_utf8/help/oublog/visibility.html
cvs checkout: Updating contrib/plugins/mod/oublog/lang/en_utf8
U contrib/plugins/mod/oublog/lang/en_utf8/oublog.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang/en_utf8/help
cvs checkout: Updating contrib/plugins/mod/oublog/lang/en_utf8/help/oublog
U contrib/plugins/mod/oublog/lang/en_utf8/help/oublog/allowcomments.html
U contrib/plugins/mod/oublog/lang/en_utf8/help/oublog/completion.html
U contrib/plugins/mod/oublog/lang/en_utf8/help/oublog/feed.html
U contrib/plugins/mod/oublog/lang/en_utf8/help/oublog/tags.html
U contrib/plugins/mod/oublog/lang/en_utf8/help/oublog/visibility.html
cvs checkout: Updating contrib/plugins/mod/oublog/lang/es_utf8
U contrib/plugins/mod/oublog/lang/es_utf8/oublog.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang/es_utf8/help
cvs checkout: Updating contrib/plugins/mod/oublog/lang/es_utf8/help/oublog
U contrib/plugins/mod/oublog/lang/es_utf8/help/oublog/allowcomments.html
U contrib/plugins/mod/oublog/lang/es_utf8/help/oublog/completion.html
U contrib/plugins/mod/oublog/lang/es_utf8/help/oublog/feed.html
U contrib/plugins/mod/oublog/lang/es_utf8/help/oublog/tags.html
U contrib/plugins/mod/oublog/lang/es_utf8/help/oublog/visibility.html
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ja_utf8
U contrib/plugins/mod/oublog/lang/ja_utf8/oublog.php
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ja_utf8/help
cvs checkout: Updating contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog
U contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog/allowcomments.html
U contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog/completion.html
U contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog/feed.html
U contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog/tags.html
U contrib/plugins/mod/oublog/lang/ja_utf8/help/oublog/visibility.html
=== 
* Now copy into correct location {{{/moo-plugins/contrib/plugins/mod]$ cp -r oublog ~/public_html/LAE-199/mod}}}
!~OUwiki loses data
Post to the moodle tracker : http://tracker.moodle.org/browse/CONTRIB-3123
<<<
I have just encountered problems with an updated version of Ouwiki. Last year I was using moodle 1.9.9 and a version of ouwiki that I downloaded from cvs on 19th July 2010 (version.php does not give useful information about the actual module version unfortunately). As part of a general upgrade of the system to v1.9.12 I downloaded ouwiki.2.5.zip from the googledocs site and installed this into moodle/mod. I loaded the 1.9.9 database and all seemed to be well but I neglected to check that the user pages created by ouwiki were still present -- after all I had done other moodle version updates and Ouwiki updates in the past without any hitches, and the forumng updated fine. However, now that the code is in production I find that not only have all the existing Ouwiki activities lost their data but an attempted restore from a course backup of only Ouwiki activities succeeds nominally but fails to restore any information. The same backup restored into a system using the previous year's code works fine. Has anyone else come across this problem?  Is there a workaround? Short of jettisoning the v2.5 code and returning to the old code base I cannot think of a solution.
<<<
Even recreating pages and saving does not work.
Go to http://rublev.lly.earlham.edu/~markp/chemix-12/mod/ouwiki/view.php?id=21994 and click [Wiki changes]
you can View previous pages but not restore them because //the history tab is not present//.
Perhaps copying a previous page and then pasting in to Create page might work? No -- you can paste the text into the editor but then [Save changes] does not save and just returns to the blank front page.
+++[followup comment]>
OK, after some probing I find that clicking on [wiki changes] a list of pages is produced which, apart from the top page on the list, will give sensible content upon View. However, there is no 'History' tab and so none of these changed pages can be 'reverted'. Moreover, when I try selecting, and copying this content and then pasting into the Edit screen produced by [Create page] on the entry screen the content does paste as expected but upon [Save changes] nothing is saved and the screen reverts to 
'This wiki's start page has not yet been created.
Would you like to create it?'
My next test will be to see what happens when a course with OUwiki content is restored into a blank moodle system.
=== 
!!Problems with enrolment in old courses
I got this email from a teaching faculty recently:
<<<
Some of my students seem to somehow be signed in to an out of date Moodle page from POLS/LGST260.  I don’t have access to this page when I sign in, but they have described things that aren’t on the current page but were on last semesters page.
<<<
It turned out that 8 students had signed up for last year's course accidentally. 6 of these were also enrolled in the running course but two were not. The Prof was not enrolled as a teacher in last year's course.
* What procedures can we put in place to prevent this from happening?
* What needs to happen is for //students// but not //teachers// to be unenrolled from the previous semester's course. If we could do this automatically (and I'm not sure how this would work) at what point after the end of the semester would this happen? After final grades due? But what about courses that have students with an extension?
* Hide last year / semester courses?
----
A related issue is whether to rename courses that are the same from year to year rather than duplicating. One faculty's view:
<<<
Actually, I like the way it is now I think.  I think for some classes/people things remain the same and others don't.  I really like the idea that there's an "archive" of stuff.  So, if I decide it's REALLY important that I retrieve some moodle thing I did from 3 years ago, it can be done.
<<<
And we ''really'' need to tackle the issue of how long we keep live courses up and where and how we keep course archives.

<<notes heading:"Remarks" tag:"NoteTiddlers" suffix:"Notes">>
From [[Ross MacKenzie's blog|http://learn.open.ac.uk/mod/oublog/view.php?user=27287]]:
> "we are going to stick with Moodle, and we are planning to use Moodle 2 very significantly closer to its ‘out of the box’ form."

>Our plan, at this point, is to have a fairly complete new OUVLE in place in March 2011.  This will be based on Moodle 2 and will have most (but probably not all) of the major OU contribs we developed for Moodle 1.x migrated to run in Moodle 2.
This means that my OU modules will get updated:
* OUWiki
* OUBlog
* NGForum
!!Statistics
>At the moment our Moodle 1.9 installation is seeing something like ''1,000,000 transactions'' (from 50,000 users) a day and these numbers are both still increasing.
[[Moodle at the OU|http://www.slideshare.net/ram65/moodle-at-the-ou-moodle-moot-2010]] is an interesting presentation.
Slide 25 has this:
<<<
* 5330 sites on main VLE, 579 currently active
* 648,000 users in database, 169,000 currently active
* In 24 hr period 35,000 - 50,000 unique users
* Concurrency? maybe 2,000 - 2,500
<<<
<html>
<div style="width:425px" id="__ss_3709975"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ram65/moodle-at-the-ou-moodle-moot-2010" title="Moodle at the ou   moodle moot 2010">Moodle at the ou   moodle moot 2010</a></strong><object id="__sse3709975" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=moodleattheou-moodlemoot2010-100413091346-phpapp01&stripped_title=moodle-at-the-ou-moodle-moot-2010&userName=ram65" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse3709975" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=moodleattheou-moodlemoot2010-100413091346-phpapp01&stripped_title=moodle-at-the-ou-moodle-moot-2010&userName=ram65" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ram65">Ross Mackenzie</a>.</div></div>
</html>


Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see [[AdvancedOptions]]
!!Conversation with Amy
Talking with Amy about how to organize the 2010-11 courses. Currently I have moved all the departments into a Category 2010-11 which is hidden.
;Advantages:
: Faculty don't see last year's courses in their ~MyMoodle and therefore cannot re-use them. ''But'' they can still use Admin:import to import the contents.
: Keeps MyMoodle less cluttered
;Disadvantage
: If you want to check out your last year's course you cannot get to it from the //myCourses// block either
!!Amy's solution
Create a duplicate Teacher role with the capability to view hidden categories. Is this possible? Answer -yes!
* Capability : See hidden categories -- default setting ''not set'', change to ''Allow''
* Capability : View hidden courses -- default setting ''allow''. This means that I can leave courses 'hidden' until unhidden by Luminis.
So we could just switch roles for a teacher when he/she needs to check out an old course.
This is a solution to [[Course hiding and MyMoodle]]
----
Agreed:
* keep departmental organization since it helps with finding way around.


!!Fix Ouwiki:
In Chemix-12:
# Test to check whether Ouwiki works in current system. Use Chemix12
** Ouwiki does ''not'' create pages!
** Preview works. Save page does not!
** Comment system is +++[different]>

[img[graphics/ouwiki-config-old.png]]

[img[graphics/ouwiki-config-new.png]]|
=== 

In {{{test-12}}}
# restore {{{backup-comm-irc-2011-20110819-Ouwiki.zip}}} to Dummy 8 course and check that it's screwed. @@yes@@ Still does not work
# Drop tables //using the Moodle interface// 
** Site Admin : Modules : Activities : Manage -- Ouwiki -- Delete +++[warning]>
Success
All data associated with the module 'OU wiki' has been deleted from the database. To complete the deletion (and prevent the module re-installing itself), you should now delete this directory from your server: /usr/home/markp/public_html/test-12/mod/ouwiki
Now rebuild by going to Site Admin : Notifications
+++[tables created]>
(mysql): CREATE TABLE mdl_ouwiki ( id BIGINT(10) unsigned NOT NULL auto_increment, course BIGINT(10) unsigned NOT NULL, name VARCHAR(255) NOT NULL DEFAULT , subwikis TINYINT(1) unsigned NOT NULL DEFAULT 0, timeout INT(9) DEFAULT NULL, template VARCHAR(255) DEFAULT NULL, summary MEDIUMTEXT, editbegin BIGINT(10) unsigned DEFAULT NULL, editend BIGINT(10) unsigned DEFAULT NULL, completionpages INT(9) unsigned NOT NULL DEFAULT 0, completionedits INT(9) unsigned NOT NULL DEFAULT 0, commenting VARCHAR(20) DEFAULT 'default', CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki COMMENT='Main table for OU wiki'  
Success
(mysql): CREATE INDEX mdl_ouwi_cou_ix ON mdl_ouwiki (course)  
Success
(mysql): CREATE TABLE mdl_ouwiki_subwikis ( id BIGINT(10) unsigned NOT NULL auto_increment, wikiid BIGINT(10) unsigned NOT NULL, groupid BIGINT(10) unsigned DEFAULT NULL, userid BIGINT(10) unsigned DEFAULT NULL, magic BIGINT(16) unsigned NOT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_subwikis COMMENT='Contains a row for each subwiki. A subwiki is an independent'  
Success
(mysql): CREATE INDEX mdl_ouwisubw_wik_ix ON mdl_ouwiki_subwikis (wikiid)  
Success
(mysql): CREATE INDEX mdl_ouwisubw_gro_ix ON mdl_ouwiki_subwikis (groupid)  
Success
(mysql): CREATE INDEX mdl_ouwisubw_use_ix ON mdl_ouwiki_subwikis (userid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_pages ( id BIGINT(10) unsigned NOT NULL auto_increment, subwikiid BIGINT(10) unsigned NOT NULL, title VARCHAR(255) DEFAULT NULL, currentversionid BIGINT(10) unsigned DEFAULT NULL, locked TINYINT(1) NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_pages COMMENT='Single pages inside a subwiki. If a page has multiple versio'  
Success
(mysql): CREATE INDEX mdl_ouwipage_cur_ix ON mdl_ouwiki_pages (currentversionid)  
Success
(mysql): CREATE INDEX mdl_ouwipage_sub_ix ON mdl_ouwiki_pages (subwikiid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_versions ( id BIGINT(10) unsigned NOT NULL auto_increment, pageid BIGINT(10) unsigned NOT NULL, xhtml LONGTEXT NOT NULL, timecreated BIGINT(10) unsigned NOT NULL, userid BIGINT(10) unsigned DEFAULT NULL, changestart INT(9) unsigned DEFAULT NULL, changesize INT(9) unsigned DEFAULT NULL, changeprevsize INT(9) unsigned DEFAULT NULL, deletedat BIGINT(10) unsigned DEFAULT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_versions COMMENT='Each row here is a version of the content on a particular su'  
Success
(mysql): CREATE INDEX mdl_ouwivers_pag_ix ON mdl_ouwiki_versions (pageid)  
Success
(mysql): CREATE INDEX mdl_ouwivers_use_ix ON mdl_ouwiki_versions (userid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_links ( id BIGINT(10) unsigned NOT NULL auto_increment, fromversionid BIGINT(10) unsigned NOT NULL, topageid BIGINT(10) unsigned DEFAULT NULL, tomissingpage VARCHAR(255) DEFAULT NULL, tourl VARCHAR(255) DEFAULT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_links COMMENT='Keeps record of all wiki-links (links within the wiki that w'  
Success
(mysql): CREATE INDEX mdl_ouwilink_fro_ix ON mdl_ouwiki_links (fromversionid)  
Success
(mysql): CREATE INDEX mdl_ouwilink_top_ix ON mdl_ouwiki_links (topageid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_locks ( id BIGINT(10) unsigned NOT NULL auto_increment, pageid BIGINT(10) unsigned NOT NULL, userid BIGINT(10) unsigned NOT NULL, versionid BIGINT(10) unsigned DEFAULT NULL, sectionstart INT(9) unsigned DEFAULT NULL, sectionsize INT(9) unsigned DEFAULT NULL, lockedat BIGINT(10) unsigned NOT NULL, expiresat BIGINT(10) unsigned DEFAULT NULL, seenat BIGINT(10) unsigned DEFAULT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_locks COMMENT='When people are editing a subwiki page or section, that info'  
Success
(mysql): CREATE INDEX mdl_ouwilock_pag_ix ON mdl_ouwiki_locks (pageid)  
Success
(mysql): CREATE INDEX mdl_ouwilock_use_ix ON mdl_ouwiki_locks (userid)  
Success
(mysql): CREATE INDEX mdl_ouwilock_ver_ix ON mdl_ouwiki_locks (versionid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_sections ( id BIGINT(10) unsigned NOT NULL auto_increment, pageid BIGINT(10) unsigned NOT NULL, xhtmlid VARCHAR(255) DEFAULT NULL, title VARCHAR(255) DEFAULT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_sections COMMENT='Stores reference to sections (marked by headings) within pag'  
Success
(mysql): CREATE INDEX mdl_ouwisect_pag_ix ON mdl_ouwiki_sections (pageid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_comments ( id BIGINT(10) unsigned NOT NULL auto_increment, sectionid BIGINT(10) unsigned NOT NULL, title VARCHAR(255) DEFAULT NULL, xhtml MEDIUMTEXT NOT NULL, userid BIGINT(10) unsigned DEFAULT NULL, timeposted BIGINT(10) unsigned NOT NULL, deleted TINYINT(1) unsigned NOT NULL DEFAULT 0, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_comments COMMENT='Stores user comments on wiki pages.'  
Success
(mysql): CREATE INDEX mdl_ouwicomm_sec_ix ON mdl_ouwiki_comments (sectionid)  
Success
(mysql): CREATE INDEX mdl_ouwicomm_use_ix ON mdl_ouwiki_comments (userid)  
Success
(mysql): CREATE TABLE mdl_ouwiki_annotations ( id BIGINT(10) unsigned NOT NULL auto_increment, pageid BIGINT(10) unsigned NOT NULL, userid BIGINT(10) unsigned DEFAULT NULL, timemodified BIGINT(10) unsigned NOT NULL, content MEDIUMTEXT NOT NULL, CONSTRAINT PRIMARY KEY (id) )  
Success
(mysql): ALTER TABLE mdl_ouwiki_annotations COMMENT='Holds the inline comments for the commenting system called A'  
Success
ouwiki tables have been set up correctly
=== 
=== 
# rebuild tables with Notifications -- @@success@@
# Check to make sure that new pages can be created -- new wikis @@can@@ be created. Cool annotation system!
# restore {{{backup-comm-irc-2011-20110819-Ouwiki.zip}}} to Dummy 8 course again and check it works :-) @@''YES''@@
** repeat with {{{backup-misc-is_201110_-_librarians-20110819-OUWiki.zip}}}
** If this fails revert code to old ouwiki code and retest with test-12
>  Repeat on {{{chemix-12}}} just to make sure. Also test [[fix simple file upload|Simple file upload]] as well.
> +++[fix simple file upload]>
mysql> SELECT * FROM mdl_resource WHERE type = 'fileupload';
Empty set (0.00 sec)
mysql> SELECT * FROM mdl_resource WHERE type = 'file';
12514 rows in set (0.07 sec)
Sussed!
=== Check with {{{THEA132:201120}}} and all resources are now accessible!
> +++[rebuild ouwiki database]
>You are about to completely delete the module 'OU wiki'. This will completely delete everything in the database associated with this activity module. Are you SURE you want to continue? ''Y''
Hit [Notifications] to rebuild database.
@@Success@@
=== 

If this works then on Production:
# make a dump of all courses using Ouwiki -- @@done@@
# Figure out which ones to preserve and do course backups for these. @@Done@@
# Then do the above.

<<notes>>
Ouwiki version id in Site Admin : Modules : Activities : Manage
{{{2010042201}}}
!New Settings - OU Wiki
>Roles included in reports : ''5,3'' (Student, Teacher). May want to change
This is another module from Michael de Raadt: [[Peer Review Assignment Type|http://www.sci.usq.edu.au/staff/deraadt/peerReview.html]]
<<<
* The Peer Review Assignment Type allows students to submit documents then review the work of other students.
* It can be used in classes of 5 or more (usually large classes) and can be used to streamline a series of assignments in a course.
* It manages the relationships between students without teacher intervention, but with teacher oversight through moderation.
!!!!Features
Compared to other Peer Review systems, this system allows...
* Single deadline
** Single step submit-review
** Working ahead / falling behind
* Simple, objective binary criteria
* Flagging bad reviews
* Tracking moderations
* Reusable instructor comments
<<<
The extensive screenshots show that it's comparatively simple to use and the workflow seems straightforward. The deal is to create an assignment that has a detailed rubric along with it.
Discussion [[here|http://moodle.org/mod/forum/discuss.php?d=143554]]
Demo at the Large Classes Workshop?
Playing a music clip in a Moodle course can be as simple as uploading an MP3 file and linking to it as a 'resource'. But quite often more is necessary. Dan Graves' music courses generally use music from two sources:
# [[Earlham's NAXOS music library|http://earlham.libguides.com/content.php?pid=12786&sid=88765]]
# MP3 music files
We use the [[Wimpy flash player|http://www.wimpyplayer.com/]] to play through a playlist of mp3 tracks. This is by far the most user friendly way to play music since:
# the elapsed playing time is displayed (important to note 'where you are' in the music)
# allows tracks to run into each other. This is especially useful when a single movement ha been chopped into pieces.
# It is very difficult to download the mp3 file since it is never directly referenced.
!!Resources
This is best done in a blitz, so:
# Obtain a detailed class and assignment schedule for the semester so that you can designed the course outline. I have used weekly and topics course formats, but now I prefer the 'collapsed topics' format.
# Assemble all the MP3 files. These might be on a series of CDs. Try and get the original ripped files rather than an audio disk of burned files. I once ended up ripping a dozen audio disks to created files which had originally been in iTunes!
@@Important note@@ The titles of the MP3s will often have non-ascii characters such as accent marks and therefore will generate filename the same. These characters cause a lot of problems -- fix by substituting a non-accented char.

!!Workflow
It's important to do things in the following order to make the least amount of hassle.
Basically, you want to:
# upload all the MP3s
# create all the playlists and players
# decide on the course outline format
# for each section create a moodle resource 
# after resources created, add the descriptive references in a label or the section summary.
** It's really important to create the resources ''first'' so that the automatic linking from description to resource will work. If you add the summary and then create the resource the auto linking usually does not work. 
+++[Details]
# Make a new 'home' directory. Don't attempt to use an existing one.
** Copy each CD into a separate sub-directory.
** download the class and assignment schedule into the 'home' dir
# Examine each CD and fix any filenames with accented characters.
# zip each CD directory separately.
** Upload into the Moodle course's Files area.
** Unzip and corresponding folders will be created.
# Upload the wimpy player and unzip
# Create all the playlists and players
# Upload them into the base Files are of your Moodle course
** @@test each one@@
# Create the 
=== 
~TiddlyWiki becomes a chameleon when you add plgins to enhance it's functionality.
!Plugins I cannot do without
|!Plugin|!Description|!Source URL|
|~TiddlyLightBox|popup graphic display. Brilliant for screenshots or other images|http://tw.lewcid.org/|
|Nested Sliders|Conceal and display content via a button|http://www.tiddlytools.com/#NestedSlidersPlugin|

!!Plugin Sites
|!Site|!Details|
|[[Lewcid TW|http://tw.lewcid.org/]]|~TiddlyLightBox, ~TableSorting, etc|
|[[abegoExtensions|http://tiddlywiki.abego-software.de/]]|Use ~FormTiddler / ~DataTiddler to implement data form & simple database, Intellitagger for tag input & management, ~YourSearch for sophisticated searching|
|[[Tiddly Tools|http://www.tiddlytools.com/]]|Simply the biggest collection of plugins out|
|[[Tiddly Vault|http://tiddlyvault.tiddlyspot.com/]]|good place to find different kinds of plugins|
!!!Installing a plugin
# Figure out which plugin + documentation you want to add to your ~TiddlyWiki. Use the Plugin sites above.
# Click Backstage -> Import and type in the URL of the plugin site [[screenshot|graphics/import_tiddlers_1.png]]<<imagebox>>
# The tricky part!. From the list, check the tiddlers you want to import. 
# Now click import and then see what you've imported -- [[screenshot|graphics/import_tiddlers_2.png]]<<imagebox>>
# Save and reload the page
# check backstage -> plugins
!!!!To delete a plugin:
<<<
* go to backstage -> plugins
* check box next to the plugin name
* click @@[delete]@@
<<<
!!!!Check the operation of a plugin:
<<<
* go to backstage -> plugins
* click on the plugin //name//
* close plugins
* examine examples
* close tiddler
<<<
Confirm that the CLAMP LAE 1.1 from [[here|http://www.clamp-it.org/code/moodle-1-9-9lae-v1-1/]] is the same as the version from svn. +++[Code]>
{{{
/markp/clamp-LAE]$ cd 1.9.9-LAE1.0dev/
$ svn -update
$ cd ..
markp/clamp-LAE]$ wget http://www.clamp-it.org/wp-content/uploads/2010/06/1.9.9-LAE1.1-release.tar.gz
markp/clamp-LAE]$ diff -qr 1.9.9-LAE1.0dev/ 1.9.9-LAE1.1-release | grep -v .svn
}}}
No output, so no differences. Proceed with the downloaded version
=== 
As before, have one pre-production install and one test install.
!!Non-core modules installed:
|!Module|!in EC production|!new for 2011|!Install?|!Comments|!Updated?|
|attforblock| Y | | Y |Attendance|[[Update Attendance]]|
|bim| | Y | N |track blog posts. Leave this out?| N|
|enhancedfile| | Y | N |Enhanced file upload. Already have simple file upload baked in. May cause confusion| N|
|feedback| Y | | Y |Yes|[[Update Feedback]]|
|forumng| | Y | ? |OU's enhanced forum activity. Consult with Neal/Wes/Anne|[[Update Forumng]]|
|ouwiki| Y | | Y |OU wiki activity. Popular.|[[Update OUwiki]]|
|questionnaire| N | Y | Y |replace feedback? -- N|[[New Questionnaire]]|

!!Blocks:
|!Block|!in EC production|!new for 2011|!Install?|!Comments|!Updated?|
|attendance| Y | | Y |used a lot|[[Update Attendance]]|
|myCourses| Y | | Y |popular|[[Update MyCourses]]|
|progress| | Y | Y |Progress bar -- hot hot hot|[[Update Progress]]|
|sharing cart| Y | | Y |could be more used|[[Update Sharing Cart]]|
|yui_menu| Y | | Y |presents the Courses list. Essential|[[Update YUI_Menu]]|

!!Themes to install:
* 0-facebooky
* 0-leatherbound
* 0-parchment (had problems with forumng as I recall)
* 0-serenity
* anomaly
* Zebra

!! Hacks
* [[MyMoodle remake]] -- use this as is.
* Upload course -- in moo-plugins/uploadcourse.php
Also refer to :
* [[2010 Modules and Blocks]]
* [[2010 Modules and blocks : modules]]
# [[Course File Area|http://moodle.org/plugins/view.php?plugin=repository_coursefilearea]] +++[Details]>
This repository plugin provides a course file storage area within Moodle 2.x which is similar in function to the Course Files functionality in Moodle 1.x, using the same numbered directories within the moodle data directory.

This repository is capable of operating as both an internal and external files repository,
although the internal capability is disabled by default. If the internal files capability
is enabled on a normal Moodle system then any files used will be copied into the new Moodle 2.x
file structure.

You will also need to install the "Repository File Manager" on your Moodle to make use of this plugin.
=== Downloaded as {{{repository_coursefilearea_moodle21_2011101001.zip}}}
** [[Repository File Management Block for Moodle 2.x|http://www.autotrain.org/misc/source/moodle2/repofileman/]] downloaded as {{{repo_filemanager-block-2011101101.zip}}} (Release Candidate 2 -- will expect a final release)
# [[Ouwiki|http://moodle.org/plugins/view.php?plugin=mod_ouwiki]] +++[Details]>
It does not replace the standard wiki, and operates alongside it. The key
intention of this wiki is to provide a simple teaching tool suitable for
student use with minimal required training. It is in no way intended to be a full-fledged wiki like MediaWiki. For example, there is no wiki syntax except for links with two square brackets.
=== Downloaded as {{{mod_ouwiki_moodle21_2011031800.zip}}} and {{{moodleou-moodle-mod_ouwiki-77da396.tar.gz}}} (latest)
# [[Oublog|http://moodle.org/plugins/view.php?plugin=mod_oublog]] +++[Details]>
There are two modes of use:

1) As a course activity. In this case you can use it the same way as any other module. You can have course-wide blogs (everyone in the course posts to the same blog), group blogs, or individual blogs; the latter are useful for assessed activities (where the student is supposed to keep a journal which only they and their tutor can read).
   
2) As a replacement for standard Moodle personal blogs. In this case it would be a good idea to turn off the standard Moodle blog system, or it'll bevery confusing. You then need to MANUALLY provide students with a link to mod/oublog/view.php which will automatically take them to their personal blog.

When using for personal blogs, one feature of interest may be moderated public comments; when you allow comments from people who are not logged in, all such comments are moderated. 
=== Downloaded as {{{mod_oublog_moodle21_2011032200.zip}}} and {{{moodleou-moodle-mod_oublog-fb7a6b5.tar.gz}}} (latest)
# [[ForumNG|http://moodle.org/plugins/view.php?plugin=mod_forumng]] +++[Details]>
It does not replace the standard forum, and operates alongside it. You can copy forums from the standard forum into ForumNG format if you like (...and if it works; this hasn't been tested lately).
=== Downloaded as {{{mod_forumng_moodle21_2011012800.zip}}} or {{{moodleou-moodle-mod_forumng-2b6a95d.tar.gz}}}
# [[Collapsed Topics|http://moodle.org/plugins/view.php?plugin=format_topcoll]] @@course format@@ +++[Details]>
A topic based format that solves the issue of the 'Scroll of Death' when a course has many topics. All topics except zero have a toggle that displays that topic. One or more topics can be displayed at any given time. Toggles are persistent on a per browser session per course basis but can be made to persist longer by a small code change. Full installation instructions, code adaptions and credits are included in the 'readme.txt' file.
=== Downloaded as {{{format_topcoll_moodle21_2011101114.zip}}} version 1.3.1 and {{{gjb2048-moodle-format_topcoll-6456715.tar.gz}}}
# [[Collapsed weeks course format|http://moodle.org/plugins/view.php?plugin=format_weekcoll]]  +++[Details]>
A week based format that solves the issue of the 'Scroll of Death' when a course has many weeks. All weeks have a toggle that displays that week. The current week is displayed by default. One or more weeks can be displayed at any given time. Toggles are persistent on a per browser session per course basis but can be made to persist longer by a small code change. Full installation instructions, code adaptions and credits are included in the 'readme.txt' file.
=== [[Collapsed weeks format|http://docs.moodle.org/20/en/Collapsed_Weeks_course_format]] Download as {{{format_weekcoll_moodle21_2011101114.zip}}} and {{{gjb2048-moodle-format_weekcoll-ecb4dff.tar.gz}}}
# [[Ousearch|http://moodle.org/plugins/view.php?plugin=local_ousearch]] +++[Details]>
This is a cross-database indexed text-search facility. It does not do anything on its own, but if you install it alongside ForumNG, OU blog, or OU wiki then it will provide full text search for those modules.

It could also be used by other module developers who require indexed full-text search.
=== Downloaded as {{{local_ousearch_moodle21_2010120300.zip}}} and {{{moodleou-moodle-local_ousearch-58abafb.tar.gz}}}

!Themes
Download some themes and play.
* [[Krystle2|http://moodle.org/plugins/pluginversions.php?plugin=theme_krystle2]] Downloaded as {{{theme_krystle2_moodle21_2011091300.zip}}}
* [[Education book|http://moodle.org/plugins/view.php?plugin=theme_educationbook]] Downloaded as {{{theme_educationbook_moodle21_2011092100.zip}}}
* [[Mandarin|http://moodle.org/plugins/view.php?plugin=theme_mandarin]] Downloaded as {{{theme_mandarin_moodle21_1.0.zip}}}
* [[All Content|http://moodle.org/plugins/view.php?plugin=theme_allc]] Downloaded as {{{theme_allc_moodle21_2011091600.zip}}}

!Blocks
[[See here|http://moodle.org/plugins/browse.php?list=category&id=2&p=1]]
* [[Ajax Marking block|http://moodle.org/plugins/view.php?plugin=block_ajax_marking]] We used to have this. Try it out and see how it goes. +++[Details]>
The aim of this block is to avoid having to search through each of your courses to find out whether there is anything that needs marking.

When placed on the front page, it shows teachers how many pieces of work need to be attended to, broken down by course, or by cohort. The list then expands when clicked to show individual modules and students. When you click on a student, a pop-up opens, allowing the work to be marked and saved, then the block updates itself to show one less item in need of attention.
=== 
* [[Drag and drop file upload|http://moodle.org/plugins/view.php?plugin=block_dndupload]] Looks interesting.
* [[Flickr Image carousel|http://moodle.org/plugins/view.php?plugin=block_flickr_image_carousel]]
* [[Mass actions block|http://moodle.org/plugins/view.php?plugin=block_massaction]]
* [[Progress Bar|http://moodle.org/plugins/view.php?plugin=block_progress]] [[documentation|http://docs.moodle.org/20/en/Progress_Bar_block]]. Note that Michael has added a screen where Teachers can view the progress of the students. Downlaoded as {{{block_progress_2011081201.zip}}}
* [[Quickmail|http://moodle.org/plugins/view.php?plugin=block_quickmail]] Downloaded as {{{block_quickmail_moodle21_2011021812.zip}}}

From the [[discussion forum|http://moodle.org/mod/forum/discuss.php?d=146996]]
<<<
The purpose of the Presentation Activity Module for Moodle is to create presentation activities based on rich media such as streaming video, audio and pictures.

The rich media elements are combined into presentation chapters according to a layout. The navigation feature lets the user play through the chapters automatically or choose a specific chapter.
<<<
* [[Moodledocs documentation|http://docs.moodle.org/en/PresenterModule]] [[schematic graphics|http://docs.moodle.org/en/images_en/7/79/IntroImage.gif]]<<imagebox>>
* download module from [[here|http://moodle.org/mod/data/view.php?d=13&rid=3638]]
* do php streaming with [[yamdi|http://yamdi.sourceforge.net/]] -- supported on FreeBSD!
[[Listing Styles CSS template]] -- these were a part of every preset and the style definitions were used by the View List template code.
[[Economic Downturn preset]]
[[Audience Demographic preset]]
[[History preset]]
[[Future preset]]
!Course backup restore fail

Try on [[Moodletest|http://moodletest.earlham.edu]]
# Set Site Administration : Server : Debugging : ''ALL'' Show reasonable php debug messages
# Front page : Site Files : backupdata : restore  backup-mus484_201020-20100402-1421.zip	
** restore with users to retain user data.
** Now completely blank page. No content
Course restore exits ''before'' database activity restored:
Reload page and try again. +++[Errors on screen]>
* Creating new course
** MUS-TST:201020 -- Live Music in Richmond copy 1 (MUS-TST:201020_1)
** Category: Miscellaneous (MISC)
* Creating the Restorelog.html in the course backup folder
* Creating users
. . . (New: 0, Existing: 11)
** Students: 0
** Teachers: 0
* Creating sections
* Creating categories and questions
* Copying user files
* Copying course files
Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289
.
Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289
.
Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

Warning: chmod() [function.chmod]: Operation not permitted in /data/moodle197/backup/lib.php on line 289

** Files/folders: 5
* Creating scales
* Creating events
* Creating course modules
''Fatal error'': Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in /data/moodle197/lib/xmlize.php on line 53
=== and course is not created
!Fix
I discovered that {{{134217728 bytes}}} = 128Mb. This tells me that it's a php problem and a quick Google search confirms this. Basically, the memory limit needs to be upped (on Rublev I have {{{memory_limit = 192M      ; Maximum amount of memory a script may consume (128MB)}}} in the /usr/local/etc/php.ini. After some to-ing and fro-ing Aaron reset the parameter for the site {{{https://moodle-admin.earlham.edu:8080}}} and then the restore worked! @@Phew@@

Everything seemed to be hunky dory, but now I'm finding some problems.
There seems to be a discrepancy in the number of courses created.
So for chemix-12 Even though there are ''808'' courses listed with CRN %.201210 in {{{mdl_course}}} only ''446'' are present in the categories.
Betsy said that there should be about ''737'' courses.
Could this be a problem with departmental categories?
Run import again with test-12 and blank database.
So, thinking that it may have something to do with creating Semester / Dept categories I fire up test-12, drop all tables, load in a copy of the production database and then fire up. After updating all the tables, then create a new Category {{{ }}} and get LMB import to deposit all courses into this. ''But'' still only 441 courses created. And >800 listed as having shorname with 201210. Where are the extra courses?
Two explanations:
# Virtually //every// crosslisted course is also present as an individual course as well! So {{{ECON.PAGS.INST.MGMT101:201210 -- Introduction To Macroeconomics}}} will be listed as separate {{{ECON101}}}, {{{PAGS101}}} etc courses but only 1 will be created.
# Courses with a zero in front of the course number are place holders for courses taught //off campus// according to Julie Stout. Though these courses appear in the mdl-course search they do not seem to appear in moodle.  The behaviour of Moodle in this case is puzzling. For example, take:
|~POLS0340-2:201210 — Political Ecology N the Sonora| POLS0340-2:201210 | 11537.201210|
This course does ''not'' appear in a Search and I have not found any way to discover it's presence. ''But'' if you try to create a course with shortname = {{{POLS0340-2:201210}}} it comes up with [[This error|graphics/short-name-clash.png]]<<imagebox>>. Since there are quite a few of such instances these will also affect the number of visible courses created.
I implemented the Progress Bar in Dan Graves' MUS150 Beethoven course. Most of the assignments were offline listening assignments. The progress bar cells did __not__ register green for students having visited the offline assignment. I confirmed this by checking the Report Log to cross check whether the student had opened the assignment.
Reported to the Tracker [[Progress bar display does not respond to Offline Assignment|http://tracker.moodle.org/browse/CONTRIB-2548]]
<<<
Music course consisting of listening assignments set up as Offline Assignment Activities. When checking student's Progress Bar status I noticed that for all the students all the blocks bar one were red. This struck me as strange since I figured that they would be doing at least some of the work. Upon further probing it emerged that all the red blocks corresponded to Offline Assignments (and the green one to a Resource). Cross checking the access logs showed that students who had accessed an Offline assignment were still showing the associated Progress Bar block as red. A bug methinks.
<<<
Here's what the Progress bar looks like in action:

|! Current item -- done |! What's up next -- not done yet |! What have I got next week? |! Woops -- missed the due date for this |
|[img[graphics/progress-bar_display_1.png]]|[img[graphics/progress-bar_display_2.png]]|[img[graphics/progress-bar_display_3.png]]|[img[graphics/progress-bar_display_4.png]]|

Wouldn't it be great if the progress bar went into ~MyMoodle instead of [[what's there now|graphics/my-moodle_display.png]]<<imagebox>>.

Another project methinks.
How to add Forum NG and OU Wiki to the Progress bar.
Look at {{{blocks/progress]$ less block_progress.php}}}
{{{
76       $moduleInstance = get_coursemodule_from_instance($module, $event->id, $COURSE->id);
77
78       // Check if the user has attempted the module
79       if($module == 'forum') {
80               $attempted = record_exists_sql('SELECT id FROM '.$CFG->prefix.'forum_posts WHERE
80  userid=\''.$USER->id.'\' AND discussion IN (SELECT id FROM '.$CFG->prefix.'forum_discussions WHERE forum=\''.$event->id.'\')');
81       }
82       else if($module == 'resource' || $module == 'book' || $module == 'data' || $module == 'glossary' || $module == 'wiki') {
83               $attempted = record_exists_select('log','course=\''.$this->instance->pageid.'\' AND module=\''.$module.'\' AND action=\'view\' AND cmid=\''.$moduleInstance->id.'\' AND userid=\''.$USER->id.'\'');
84       }
85       else if ($module == 'choice' || $module == 'lesson' || $module == 'scorm' || $module == 'chat' ) {
86               $attempted = record_exists_select($details['actionTable'],$module.'id=\''.$event ->id.'\' AND userid=\''.$USER->id.'\'');
87       }
88       else {
89               $attempted = record_exists_select($details['actionTable'],$module.'=\''.$event->     89 id.'\' AND userid=\''.$USER->id.'\'');
90       }
}}}
From this it can be seen that every activity has it's own appropriate way of setting {{{$attempted}}}. Basically, I'd have to figure out how that should work with ForumNG & OU Wiki. A student project methinks
!!Description
From [[Course format: Project|http://tracker.moodle.org/browse/CONTRIB/component/10372]] and [[documentation|http://docs.moodle.org/en/Project_Course_Format]]
<<<
!!!Description:  
This is an optional course format for handling projects and other learning units with a variety of activities. A course format changes the layout and operations of the main center column of a Moodle course. Inside a course, you can select the format of a course by clicking on Admin >> Course Settings. Typically, Topics format or Weekly format is used. This format is like Topics format, except that each section of a course can be "packaged" separately. It has a separate directory and it can be backed up separately with all resources and activities together. The import function allows a teacher to share and move the section (project) anywhere on the site. Fast resource creation and bulk media file upload are also possible. This format is ideal for creating an in-house repository of learning packages and promoting teacher-to-teacher sharing of materials. 
!!!Features 
* section directory 
* section backup 
* section import across site with auto-regeneration of media file links 
* quick resource creator 
* bulk file uploader 
<<<
Download from CVS:
{{{~/moo-plugins]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P contrib/plugins/course/format/project}}}
And copy into place:
{{{~/moo-plugins/contrib/plugins/course/format]$ cp -r project ~/public_html/moo-2011t/course/format/}}}
Hit Site Administration : Notifications and tables created correctly.
!!Configuration
[img[graphics/project-course_section-outline.png]]

Need to create the HTML files ......
Use Project Course Format & Sharing Cart to create a repository site for users on Moodle. 

A couple of interesting responses to [[Questionnaire and Moodle 2.0|http://moodle.org/mod/forum/discuss.php?d=159553]] posting on moodle.org:
Tim Hunt +++[writes:]>
Basically, there are issues with the design and code of both feedback and questionnaire. Then there is the core survey module that is very rarely used. The plan is to replace all three of these with one new module in Moodle 2.1 (with, I think, automatic upgrade from all three.)

feedback was added to Moodle core, before the design problems were identified. Since it is now going to be replaced with something else, it was disabled in 2.0, but left in the codebase.

[[Roadmap to 2.0|http://docs.moodle.org/en/Roadmap]]:
<<<
One big one will be a new one that combines the best of questionnaire and feedback and survey into an upgrade for the survey module. 
<<<
=== 
More info from the [[Czech Hackfest 2009|http://docs.moodle.org/en/Development:Czech_Hackfest_2009_notes#Feedback_vs_Questionnaire]] +++[details]>
!!Feedback vs Questionnaire
Both of these modules are still popular. Questionnaire is the most-downloaded 3rd party module we have, and Feedback was previously selected as a "standard" module and so is also heavily used by people expecting an upgrade path.
For consistency we need to try and bring these users together in one upgrade path. The final result needs to support the features of both.
!!!Feedback has problems
* Andreas Grabs (the author) is not able to maintain it in future
* There are some database structure issues that need to be fixed.
* There are some interface issues and string issues needing to be fixed. 
!!!Questionnaire has problems
* There are some database structure issues that need to be fixed.
* There are some security issues that need to be fixed.
* There are some cross-course features that need to be redesigned. 
!!!Survey has problems
>People expect to be able to create their own surveys in it and are dissapointed when they can't. The existing survey instruments are powerful and translated into 70+ languages but under-used. Real shame because the pedgagogical benefits of using COLLES every week (for example) are huge.
!!!What we will do for 2.0
Martin voted for Feedback to have necessary work done and go into 2.0, because people are crying out for a standard user-survey tool, and then be upgraded to a new super-Survey module in 2.1.
Almost everyone else at the hackfest disagreed and thought none of them should go into 2.0, so that we would avoid un-necessary maintenance headaches in future. Feedback and Questionnaire would continue in contrib.
Mike Churchward volunteered to come up with a proposal for a new version of Questionnaire that fixed the problems and also added all Feedback features, as well as templates that utilise lang strings so that we could merge Survey as well.
Martin would like that new module to be called Survey and replace the core Survey in 2.1, converting all existing questionnaire and feedback instances into "survey" instances. This would fix the awkward naming of these modules once and for all. 
=== 
+++[Anthony Borrow writes]>
Stephen - Just to be clear, there were various changes to the coding style and various APIs with Moodle 2.0 that requires all CONTRIB modules to be updated to work in 2.0. I have created [[CONTRIB-1988|http://tracker.moodle.org/browse/CONTRIB-1988]] to monitor the major ones that folks seem to use most. Hopefully Joseph and others will be able to get these readied reasonably quickly. In terms of upgrading your site to 2.0, without the code in /mod/questionnaire the upgrade should work fine and simply ignore your existing questionnaire data. Once the updated 2.0 questionnaire activity module is ready, then installing that should be able to pick up and use the data. If you are actively using questionnaire, then you likely will want to hold off upgrading to 2.0 until the updated questionnaire is ready. The hope is that by Moodle 2.1 there will be the new activity module that combines feedback and questionnaire with plans to import existing data from both of those into the new activity module although I have no idea when that may actually take place. The goal is to provide the best of both questionnaire and feedback modules. Do not hesitate to let me know if there are any questions and please feel free to watch, vote for, and/or comment on [[CONTRIB-2004|http://tracker.moodle.org/browse/CONTRIB-2004]] which is for the updated 2.0 version of the questionnaire activity module. Peace - Anthony
=== 

[[Migrating questionnaire to 2.0|http://tracker.moodle.org/browse/CONTRIB-2004]]
{{ts{11/02/11 15:41}}}
Now available for v2.0 [[modules & blocks|http://moodle.org/mod/data/view.php?d=13&rid=84]]
Not there by default so download from CVS:
{{{
2moo/plugins]$ cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle login
Logging in to :pserver:anonymous@us2.cvs.moodle.org:2401/cvsroot/moodle
[markp@rublev /usr/home/markp/2moo/plugins]$ cvs -z3 -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co -P -r 
MOODLE_21_STABLE contrib/plugins/mod/questionnaire
}}}
Tar it up and copy to MAMP on Macbook:
{{{
2moo/plugins/contrib/plugins/mod]$ tar -cvzf questionnaire-21.tgz --exclude CVS questionnaire
$ scp questionnaire-21.tgz markp@ec1081.lly.earlham.edu:Documents/mamp
}}}
# What's the situation with 1.9.10+ update to LAE 1.1? Is there a patch I can apply?
(replace HTML Purifer subdir). 
# Remove [[Simple file upload]] from the Resource pull-down. I have a better solution -- [[Enhanced File Module]]
# Scheduler ?
# What's the situation with regard to course enrollment via Banner?

/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

	miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tagged = store.getTaggedTiddlers(tiddler.title);
		if (tagged.length > 0) {
			var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                        	config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
			theTag.setAttribute("tag",tiddler.title);
			theTag.className = "miniTag";
		}
	},

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags(params[0]);
		var filter = params[1]; // new feature
		var ul = createTiddlyElement(place,"ul");
		if(tags.length == 0)
			createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
		for(var t=0; t<tags.length; t++) {
			var title = tags[t][0];
			if (!filter || (title.match(new RegExp('^'+filter)))) {
				var info = getTiddlyLinkInfo(title);
				var theListItem =createTiddlyElement(ul,"li");
				var theLink = createTiddlyLink(theListItem,tags[t][0],true);
				var theCount = " (" + tags[t][1] + ")";
				theLink.appendChild(document.createTextNode(theCount));
				var theDropDownBtn = createTiddlyButton(theListItem," " +
					config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
				theDropDownBtn.setAttribute("tag",tags[t][0]);
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
"	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}

So Julie May has completed the first quiz of ART210 History of Craft
* 65 total questions
* 4 questions have zero grade (could not remove them from the quiz), so total graded questions = 61
* 59 questions worth 1 point each, an essay question worth 10 points, and a match question worth 9 points.
* Total points available 78
However, in the Results overview display we see a different grade allocated for the non single point questions.
|!Question|!Allocated points out of|!Displayed points out of|!Comment|
| Essay | /10 | /13 | [[screenshot|graphics/quiz--grade-mismatch.png]]<<imagebox>> |
| Match | /9 | /12 | [[screenshot|graphics/quiz--grade-mismatch2.png]]<<imagebox>> |

I downloaded the results table as an Excel spreadsheet and recalculated the grades allocated to these two questions (using VLOOKUP function). Then I added up all the corrected grades and divided by 78; lo and behold the final % comes out to almost exactly the same! [[screenshot|graphics/ART210-grades(moodle-recalculated).png]]<<imagebox>>
+++[Excel stuff]>

|!#16C	|!#20 C	|!#60 C		|!Total / 78	|!Recalc grade|
| 10	| 9	| 1		| 58	| 74.4%|
!!!Formulae
#16C =VLOOKUP(S2,$S$54:$T$59,2,FALSE)
|! |!S|!T|
|!54| 13| 10|
|!55| 12| 9|
|!56| 10| 8|
|!57| 9| 7|
|!58| 8| 6|
|!59| 0| 0|

#20C =VLOOKUP(W2,$V$54:$W$60,2,FALSE)
|! |!W|!V|
|!54| 12| 9|
|!55| 10| 8|
|!56| 9| 7|
|!57| 8| 6|
|!58| 6| 5|
|!59| 4| 3|
|!60| 0| 0|

#60C =VLOOKUP(BK2,$Y$54:$Z$55,2,FALSE)
|! |!Y|!Z|
|!54| 3| 1|
|!55| 0| 0|

Total/78 =SUM(D2:R2)+SUM(T2:V2)+SUM(X2:BJ2)+SUM(BL2:BS2)
Recalc grade =BU2/78
=== 
At Modules and Plugins : [[Drag-and-drop matching question type|http://moodle.org/mod/data/view.php?d=13&rid=975&filter=1]]
<<<
Question Type: Drag-and-drop matching question type
Type: Question Type
Requires: Moodle 1.9 or later
Status:
Maintainer(s): Adriane Boyd

A drag-and-drop version of the core match question type with a non-javascript fallback identical to the match question type.
<<<
[[Download|http://download.moodle.org/download.php/plugins/question/type/ddmatch.zip]]
!!Hack to fix:
<<<
Correction: this Drag-and-Drop Matching question type *does* show correct/incorrect answers in certain browsers,In Safari and IE. In Firefox for Mac 3.0.8 it does not, thus my previous report of a problem. , it works. To correct this bug, our programmer changed the following code:

there was:
[363] if ($options->readonly and $options->correct_responses) {

But i needs to be like this:
if ($options->readonly) { / and $options->correct_responses
<<<
!!Server
+++[System paths]>
* Path to zip : {{{/usr/local/bin/zip}}}
* Path to unzip {{{/usr/local/bin/unzip}}}
* Path to du : {{{/usr/bin/du}}}
=== 
More interesting OU work. [[References and Bibliographic management within Moodle|http://www.slideshare.net/guest354b520/ou-jp-reftelstarukmoot]]
[[Telstar on Google|http://code.google.com/p/telstar/downloads/list]]
[[Telstar blog|http://www.open.ac.uk/blogs/telstar/]] with Owen Stephens
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}

* Each Teaching Faculty has a personal Moodle site with course format [[Project|Project Course Format]].
* They create Project sections based on their interests / academic areas.
* Copy resources / activities into each section with Sharing Cart
* Backup sections independently. Can restore as a whole into new course. Easy way to seed a new course
Test this out with MST:2011. 
Create a personal site and 2 collections. Restore one into new course and then //change the course format to weekly//
Instead of a solid block of colour across the page -- make the background white and a thick ( 2 / 4 px) border of the appropriate colour.
Should not be too difficult to do. But will need to adjust dimensions.
{{ts{31/01/11 17:50}}} Artem Andreev and Luis Lopez have been working hard on a new version of Attendance.
In [[this posting|http://moodle.org/mod/forum/discuss.php?d=162960#p713954]] Luis lists his intended updates:
<<<
   1. Today sessions. When you list the available sessions in the activity it's annoying having to scroll to the present day. I'd like to show those sessions in the first place. (Already done!)
   2. Grid view. For the people who are not good at matching faces with names, like me. It is also better for touchscreen devices like the iPad or a smartphone. (Already done!, just giving the finishing touches...)
   3. @@Allow more than one attendance activity per course@@. I grade the attendance on each quarter, and I'd like to have independent grades in the gradebook for each one.
   4. Copying attendance data from other sessions. In some subjects I teach more than 1 hour a day but I must take attendance in a hourly manner. This feature would allow me to easily copy the attedance data from the hour before and then modify it.
   5. Fast session switching. It would be nice to have a quick way to switch from one session to another, especially if they are in the same day.
<<<
On 18-Jan Luis reported that all the intended features had been  implemented.
27-Jan Luis reported:
<<<
You can download the latest v2.3 beta version from this URL: (ZIP package)
https://github.com/andreev-artem/moodle_mod_attforblock/zipball/v2.3
You should decompress the archive on the mod/ folder of your Moodle setup and browse to admin/index.php for installing or upgrading the database.
From that point, you can add Attendance activities in any course you want.
<<<
!!Testing
<<<
I think the less tested areas are backup/restore and groups with multiple instances of the activity in the same course. Anyway, any suggestion about improving usability or optimizing the workflow will be welcome.
<<<
<<notes>>

Also [[Package: Attendance - migrate to 2.0|http://tracker.moodle.org/browse/CONTRIB-2196]]
{{ts{7/02/11 17:46}}} installed into moo-2011t. Removed old mod/attforblock and copied over:
{{{moo-plugins/att-new-version]$ cp -r andreev-artem-moodle_mod_attforblock-77fed6a ~/public_html/moo-2011t/mod/attforblock}}}
+++[module tables set up]>
{{{
No warnings - Scroll to the continue button
attforblock module needs upgrading
(mysql): ALTER TABLE mdl_attendance_sessions ADD groupid BIGINT(10) unsigned NOT NULL DEFAULT 0 after courseid  
Success
(mysql): SHOW TABLES   (mysql): SHOW INDEX FROM mdl_attendance_sessions   (mysql): CREATE INDEX mdl_attesess_gro_ix ON mdl_attendance_sessions (groupid)  
Success
(mysql): ALTER TABLE mdl_attendance_sessions ADD attendanceid BIGINT(10) unsigned NOT NULL DEFAULT 0 after groupid  
Success
(mysql): SHOW TABLES   (mysql): SHOW INDEX FROM mdl_attendance_sessions   (mysql): CREATE INDEX mdl_attesess_att_ix ON mdl_attendance_sessions (attendanceid)  
Success
(mysql): UPDATE mdl_attendance_sessions AS ses,mdl_attforblock AS att SET ses.attendanceid=att.id WHERE att.course=ses.courseid  
Success
(mysql): ALTER TABLE mdl_attendance_statuses ADD attendanceid BIGINT(10) unsigned NOT NULL DEFAULT 0 after courseid  
Success
(mysql): SHOW TABLES   (mysql): SHOW INDEX FROM mdl_attendance_statuses   (mysql): CREATE INDEX mdl_attestat_att_ix ON mdl_attendance_statuses (attendanceid)  
Success
(mysql): UPDATE mdl_attendance_statuses AS sta,mdl_attforblock AS att SET sta.attendanceid=att.id WHERE att.course=sta.courseid  
Success
attforblock tables have been set up correctly
}}}
=== might be useful to check out with table fields get added.



{{ts{1/02/11 14:51}}}
Idea for revised Course Category arrangement for next academic year:

[img[graphics/course-categories-new.png]]

Also [[this screenshot|graphics/course-categories-parchment.png]]<<imagebox "Revised layout of Course Categories with Parchment theme">>
Posted [[discussion to MAID forum|https://moodle.earlham.edu/mod/forumng/discuss.php?d=21]]
Set up Librarian Moodle Support role as a copy of the same function in Moodle 1.9.7. Gave it Assign Teacher / non-edit Teacher and Student capability.
!!Assign Roles in system
* Site Admin : Users : Permissions : Assign system role. 
* Create user //refneal// and //refamy// and assign to Librarian Moodle Support throughout the system.
* Check the so-called 'hidden assignment' box when doing this. Hopefully this will prevent emails swamping these accounts.
See also [[Access Site Files]]
/***
|Name:|SaveCloseTiddlerPlugin|
|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Version:|3.0 ($Rev: 5502 $)|
|Date:|$Date: 2008-06-10 23:31:39 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your EditTemplate
***/
//{{{
merge(config.commands,{

	saveCloseTiddler: {
		text: 'done/close',
		tooltip: 'Save changes to this tiddler and close it',
		handler: function(ev,src,title) {
			var closeTitle = title;
			var newTitle = story.saveTiddler(title,ev.shiftKey);
			if (newTitle)
				closeTitle = newTitle;
			return config.commands.closeTiddler.handler(ev,src,closeTitle);
		}
	},

	cancelCloseTiddler: {
		text: 'cancel/close',
		tooltip: 'Undo changes to this tiddler and close it',
		handler: function(ev,src,title) {
			// the same as closeTiddler now actually
			return config.commands.closeTiddler.handler(ev,src,title);
		}
	}

});

//}}}

This looks increasingly popular, but there is one disturbing feature.
Course backups made with scheduler and data do not seem to restore successfully. The restore process does not complete -- the database field gets made but no actual course. I'm going to try again without the scheduler.

Dawn ~Grimes-MacLellan sent me +++[this email]>
Mark,
Is it possible within moodle for me to set up a schedule of available
meeting times on a weekly basis in which my students could go to to sign
up for a meeting with me, and subsequent students would see what's still
open and what's not -- and then I could also check on this electronically
from outside of Earlham.

Am I making sense?  In other words, instead of posting a paper schedule on
my door where students come to handwrite their meeting time, I want to set
this up electronically.  I know I can do this in google but that document
wouldn't be secure, etc.
=== on Oct 22 2010.In a subsequent phone conversation she expressed a desire to have a single scheduler for all her courses. So, let's experiment with a scheduler a single meta course which inherits all the users.
# [[Download Scheduler|http://moodle.org/mod/data/view.php?d=13&rid=2732&filter=1]]. @@Done@@. Not using CVS just now, in case it's 2.0 code. +++[Fix 'not found' issue]>
From [[the schedule forum|http://moodle.org/mod/forum/discuss.php?d=157690]]:
<<<
the e-mail-templates were not available for all languages. Your just have to copy the en_utf8-Folder to en_us_utf8 (in /nfs/html/mod/scheduler/mails).
<<<
So 
{{{
scheduler/mails]$ cp -r en_utf8 en_us_utf8
scheduler/mails]$ ls -lh
total 8
drwxr-xr-x  2 markp  admins   512B Oct 25 18:46 en_us_utf8
drwxr-xr-x  2 markp  admins   512B Feb 18  2008 en_utf8
drwxr-xr-x  2 markp  admins   512B Feb 18  2008 es_utf8
drwxr-xr-x  2 markp  admins   512B Feb 18  2008 fr_utf8
}}}
=== 
# Backup her 3 courses and transfer them to the Moodle test data/backup. @@done@@.
# Do a DB backup just in case. +++[code]>
{{{$ mysqldump -u moodlebackup -p -C -Q -e moo2011t >moo2011t-database-oct25.sql}}}
=== 
# Install Scheduler -- done
# Create a new category and restore courses -- done
# Create a meta course and link to courses. Check that all the users are inherited. -- yes, this works
# Install scheduler and see whether it works -- yes, and email gets sent too!
# Demo to Dawn -- to be scheduled
# Put onto install list.

<<notes heading:"Scheduler comments" tag:"scheduler">>
* The power of Scheduler is that not only can it act as a place where students chose a slot to meet with faculty, it can also work where faculty //allocate// a student to a slot. An email reminder gets sent to the student.
* Each appointment schedule will be a separate instance of the Scheduler.
* Note that the scheduler is not a calendar so with multiple instances the user needs to make sure that the dates don't overlap.
* The meta-course implementation whereby all students taught by a single teacher can be aggregated into a single place is a powerful tool. Individual class schedules can go into the course and overall schedule into the meta course.
!!Problem concepts
I don't understand the terms //reuse guard time// //volatile slots// and //mode//. Need a concrete example of each.
So, how does one search through pdf files on Moodle? Problem is that the built-in search will only search files that are linked as Resources but since none of the files in Community Documents are that way, the Moodle search is no use for us.

Adobe has [[Searching the Contents of PDF Files on a Web Site|http://kb2.adobe.com/cps/321/321627.html]] which is of no use whatsoever but does link to the somewhat dated [[Searching PDF Files|http://www.searchtools.com/info/pdf.html]] on [[SearchTools.com|http://www.searchtools.com]]. Trawling through the links here we find [[mnoGoSearch|http://mnogosearch.org/products.html]] which has Windows (paid) and Unix (free!) versions. Moreover:
<<<
It is known to work on a wide variety of the modern Unix operating systems including Linux, @@~FreeBSD@@, Mac OSX, Solaris and others.
<<<
!!Other approaches
Another approach I found via ((GIYF(Google Is Your Friend))) is [[WrenSoft Zoom Search engine|http://www.wrensoft.com/index.html]]. Despite it's tacky name this does work by trawling the given website and doing the indexing //locally// on a Windoze box. You then upload the index and display it using the supplied php file and html template. They do address searching pdfs in Moodle directly with [[How to create a search engine for your Moodle site |http://www.wrensoft.com/zoom/support/tutorial_moodle.html]] and the [[FAQ|http://www.wrensoft.com/zoom/support/faq_plugins.html]] explicitly claims that pdf documents get indexed at the word level.
!!!Advantages
* Can implement and operate independently of ECS. Getting a Unix based search engine going would require skilled ECS intervention and given the current priority climate this ain't going to happen.
* The html template gives control over how the output is displayed.
!!!Disadvantages
* Have to run the indexer manually after every pdf upload.
* Not convinced that it will pick up pdfs exposed from the Directory resource type that Community Documents uses to expose all of it's uploaded documents. Can it trawl through this type of URL? If not, then we'd have to download a local copy of all the pdfs and index them on the local hard drive. This could be done with the zipper but there again it's more end user effort.
* To test it out with pdfs we would have to purchase the [[$99 Professional edition|http://www.wrensoft.com/sales.html]] since the free version does not index pdf documents.
[[Global Search|http://docs.moodle.org/en/Global_Search]] can allegedly be used to search through course content. The [[configuration|http://docs.moodle.org/en/Global_Search_set-up]] of the system is vital. Basically, an index is created by using format converters [[xpdf|http://www.freshports.org/graphics/xpdf/]] (pdf to text) and [[antiword|http://www.freshports.org/textproc/antiword/]] (doc to text), and additional converters handle Powerpoint and HTML files.
!!Search scope
Searches through supported modules in courses where the //user is enrolled//. ''Only linked documents are indexed'', therefore directories of documents (eg Community Documents) and are not indexed (could this be changed?).

<<notes>>
This is something to try out on my sandbox server
Query from Amy:
<<<
Did you do any testing with sections? For example, Catherine Griffith and Sarah Emmer want to use the same single Moodle instance for two sections of a group--
<<<
!!Sections as Crosslisted courses
Some courses seem to be multiple sections amalgamated as a crosslisted course. For example, {{{ART.ART.ART325:201210 -- Painting II}}} has the following groups:
* ~ART325-0:201210 Painting II
* ~ART425-0:201210 Painting III
* ~ART426-0:201210 Painting IV
Apart from the somewhat bizarre title I can think of no drawback to this.
!!Multiple Sections
In most cases however, multiple sections are separate courses. This is the case with Eco Bio where there are 4 sections ~BIOL111-1 -- ~BIOL111-4. The approach to this is to create a Meta course //BIOL111:201210 - Ecological Biology// with all the sections as 'children'. Then hide the individual sections so that students don't see them [[screenshot|graphics/mymoodle-outline.png]]<<imagebox>>
The drawback with this compared to crosslisting is that the students don't appear in separate groups according to the child section.
Got this message from Moodle Central yesterday:
<<<
I'm writing to give you some advance notice of two minor new releases - Moodle 1.9.6 and Moodle 1.8.10 - which will be announced publically at the end of this week. Since there are some security fixes we recommend that you upgrade your Moodle site as soon as you can to keep your sites safe.
<<<

[[Release notes|http://docs.moodle.org/en/Moodle_1.9.6_release_notes]]

+++[Security fixes]

MSA-09-0019: SQL injection in update_record

Topic: SQL injection in update_record
Severity: Critical
Versions affected: <1.9.6, <1.8.10, 1.7.x
Reported by: Georg-Christian Pranschke
Issue no.: MDL-20309
Solution: upgrade to latest weekly builds or 1.8.10 or 1.9.6
Workaround: none

Description: Georg-Christian Pranschke discovered a serious problem in the
update_record function. This problem may allow any registered user to exploit
several different scripts.

----

MSA-09-0015: Customised PhpMyAdmin upgraded to 2.11.9.6

Topic: Customised PhpMyAdmin upgraded to 2.11.9.6
Severity: Major
Versions affected: all
Reported by: upstream - PMASA-2009-6; CVE-2009-3696 and CVE-2009-3697
Issue no.: MDL-20553
Solution: Install latest package from
http://moodle.org/mod/data/view.php?d=13&rid=448 or cvs
Workaround: delete admin/mysql/*

See details at http://www.phpmyadmin.net/home_page/security/PMASA-2009-6.php

----

MSA-09-0016: Email not properly escaped on user edit page

Topic: Email not properly escaped on user edit page
Severity: Minor
Versions affected: <1.9.6
Reported by: Alan Trick
Issue no.: MDL-20295
Solution: upgrade to latest weekly build or 1.8.10 or 1.9.6
Workaround: disable email change confirmation (not recommended)

Description: Alan Trick discovered that the email change confirmation code does
not escape the email addresses properly. This problem is marked as minor
because the email address is validated and can not contain an arbitrary text.

----

MSA-09-0017: Upgrade code 1.9 does not escape tags properly

Topic: Upgrade to 1.9 from earlier versions does not escape tags properly
Severity: Minor
Versions affected: <1.9.6
Reported by: Matt Oquist
Issue no.: MDL-19709
Solution: do not use 1.9.0-1.9.5 when upgrading from any previous version

Description: The upgrade code does not properly escape tags properly when
upgrading from any version before 1.9.0.

----

MSA-09-0018: Incorrect escaping when updating first post in a single simple
discussion forum type

Topic: Incorrect escaping when updating first post in a single simple
discussion forum type
Severity: Minor
Versions affected: <1.9.6, <1.8.10
Reported by: Nicola Vitacolonna
Issue no.: MDL-20555
Solution: upgrade to latest weekly builds or 1.8.10 or 1.9.6
Workaround: none

Description: Nicola Vitacolonna discovered forum introduction is incorrectly
escaped when editing the first post of a single simple discussion forum. This
can potentially lead to SQL injection attacks by teachers. Students can not
exploit this problem.

----

MSA-09-0020: Teachers can view students' grades in all courses in the overview
report

Topic: Teachers can view students' grades in all courses in the overview report
Severity: Minor
Versions affected: <1.9.6
Reported by: Ratana Lim
Issue no.: MDL-20355
Solution: upgrade to latest weekly builds or 1.9.6
Workaround: remove the overview report link - see
http://docs.moodle.org/en/Simplifying_the_gradebook

Description: Teachers could view students' grades in all courses, including
courses for which they do not have teacher rights, in the overview report.

===
Yes.

    Hi Mark:

     

    At the moment, students in my Politics of Modernist Art course are responsible for a Daily paragraph that must be submitted before the class period.  As you can imagine, I have some good hearted well meaning stragglersJ.  

Or alternately, students who can't be bothered to do the assignment on time :-)

     

    My question, is there a way that I can set up a timed paper or quiz submission so that they can:

     

       1. Submit a paragraph to a page long response via moodle
       2. . Do this in such a way that the system closes by 10:30 am on Tuesday and Thursday
       3. . Such that Amanda or my TA can pull them off of the site and paste them into a document that can then be sent to me via attachment?

For each week in the Course outline :

   1. Create an Online text assignment activity (Add an Activity -> Online text)
         1. Set due date for Tuesday of that week and 10:30 (the system uses a 24 hour clock rather than am/pm.)
         2. Set Prevent late submissions : yes
   2. Repeat for Thursday of the same week adjusting the due date accordingly.
   3. You can use the Sharing Cart (click the link) to duplicate these activities (see especially item 5: duplicate item within a course)
   4. Tedious : have TA copy / paste each student's submission into a document and then send via email. Problem is at what point in the week you need this to happen.
   5. Easier : go to the Moodle course,
         1. open Course Menu : Assignments
         2. open the appropriate assignment
         3. click


     

    I’m looking for a quick and easy way to resolve this situation and any help you can offer would be lovely.  I will continue to celebrate you as master moodle MarkJ sincerely.  Americans don’t understand irony remember?

A certain student, Eliza Hudson, came to my office enquiring whether it would be possible for her to review the content of all the Biology courses on Moodle that she has taken. This is actually quite simple to enable (+++[here's how]>
# For graduation years 2011 & 2012 add the student's name to the 'View hidden categories' role in hidden categories 'Year 2010 - 2011' and 'EC Fall Semester, 2011-12'. This allows here to see all courses from the last two years
# For years 2010 and 2009 she needs to login to [[moodle08-10|https://moodle08-10.earlham.edu:2443]]. The 2010 courses will be visible but all students have been unenrolled from 2009 courses. So simply add her name in the student role to category 2009/Biology. This will give her access to all the Biology courses from that year.
# Use the myCourses block to navigate!
=== )
I propose enabling Eliza to view her previous Biology courses on Moodle and also any other senior who may request (via email or an office visit) to do the same thing.

When trying to use Sharing Cart on emc get :
{{{
ERROR: Could not find or create a directory (/data/moodledata199-emc/user/0)
}}}
I suspect that this is a permissions error.
!!Copying from Sharing Cart to course
Error:
<<<
{{{
exception 'SharingCart_ModuleException' with message 'Course module record insertion failure' in 
/usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php:319 Stack trace: #0 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php(259): SharingCart_Restore->restoreSection() #1 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php(142): SharingCart_Restore->parseXml() #2 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/restore.php(44): SharingCart_Restore->execute() #3 {main}
}}}
<<<
!!Fix
Switch Site Administration : Miscellaneous : Experimental -> Experimental split course restore [off]
Reported error in [[Sharing cart fails if the experimental split restore function is enabled|http://tracker.moodle.org/browse/CONTRIB-1118]] which had last year's report as well. +++[text]>
I have installed the latest (20100308) version of Sharing cart into Moodle 1.9.9 and still getting this error:

exception 'SharingCart_ModuleException' with message 'Course module record insertion failure' in
/usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php:319 Stack trace: #0 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php(259): SharingCart_Restore->restoreSection() #1 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/shared/SharingCart_
Restore.php(142): SharingCart_Restore->parseXml() #2 /usr/home/markp/public_html/LAE-199/blocks/sharing_cart/restore.php(44): SharingCart_Restore->execute() #3 {main}

when attempting to copy from the Cart to the course.
It is still linked to Site Administration : Miscellaneous : Experimental -> Experimental split course restore
My understanding from elsewhere is that split course restore is no longer really "experimental" and, in fact, it is the only way that I can successfully restore course backups larger than 128Mb. So I really need this setting switched on for the site. On the other hand the Sharing cart is useless without being about to copy to course, in which case the Split course restore setting needs to be off.

Is there a version of Sharing Cart for Moodle 2.0 that is compatible with Split course restore that I could try backporting to 1.9.9?
=== 
Got this email today ({{ts{7/10/10 11:06}}}) from Don Hinkleman:
<<<
Dear Sharing Cart Users,
Just to inform you that Release 14 of the Sharing Cart 1.9 has been put in CVS for download (ver20100930).
http://download.moodle.org/download.php/plugins/blocks/sharing_cart.zip
This fixes a minor bug where the Sharing Cart would strip the Grade Category (in Common Module Settings) when copying a Quiz or other graded activity. Now the Grade Category remains throughout the process.
Note, you can always check the version of your Sharing Cart by clicking on the yellow question mark when the block is "on" in your course.
Our thanks to Mr. Tomonori Maruyama of Version2 web development for his constant upgrading of this block.  We also thank you for reporting bugs and requesting features.  
Next month, we are beginning work to create Sharing Cart 2.0.  As this will be a major new version of the block, this is the time to make suggestions on the features and interface of this new block.  We hope to release it by
April 1st (start of Japan's school year) or sooner.
Please send me your ideas by email or watch for a topic in the moodle.org Developer's Forum.  Also, please vote to include this block (or similar functionality) in standard Moodle code.
http://tracker.moodle.org/browse/CONTRIB-907
and for the Project Course Format...
http://tracker.moodle.org/browse/CONTRIB-906
With regards,
Don Hinkelman
Sapporo Gakuin University
<<<
Does it address [[Sharing Cart issue]] whereby 'Split restore' interferes? +++[Email Don Hinkleman]>
Great news. And thanks to you and your cohorts for continuing to develop this valuable feature.
One question : has Contrib 1118 (Sharing cart fails if the experimental split restore function is enabled) been resolved? My guess is that resolving this would be important prior step to porting the code to moodle 2.0 since I think in 2.0 the Split Restore feature is no longer 'experimental' but part of the core.
===  to find out.

<<notes heading:"Sharing Cart followup" tag:"[[Sharing Cart]]" suffix:"followup">>
[[Test new version Sharing Cart]] shows that the clash with Split Restore bug has not been fixed.
/***
|Name|ShowUpdatesPlugin|
|Created by|SaqImtiaz|
|Version|0.2 |
|Requires|~TW2.x|
!!!Description:
Allows you to list tiddlers that have changed since the users last visit. You can list only all changed tiddlers, or filter them to only show tiddlers that have or do not have a specific tag. By default a simple list of the titles of changed tiddlers is created. However, using an extremely versatile syntax you can provide a custom template for the generated text.

!!!Examples: 
[[ShowUpdatesDocs]]

!!!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.

!!!Syntax:
{{{<<showUpdates>>}}}
additional optional params:
{{{<showUpdates excludeTag:TagToExclude onlyTag:TagToList maxEntries:10 write:CustomWriteParameter >>}}}
excludeTag: ~TagToExclude
onlyTag: ~TagToList
maxEntries: max number of entries displayed when there are no updates. (default is 10, which can be changed in the config.macros.showUpdates.settings part of the code)
write: if a write parameter is not provided, an un-numbered list of the updates is generated. Alternatively, you can specify a custom 'template' for the text generated. The syntax for the write parameter is identical to that of the forEachTiddler macro. Additonal documentation on this syntax will be provided soon.
Some of the variables available in the write parameter are 'index', 'count' and 'lastVisit' where lastVisit is the date of the last visit in the format YYYYMMDDHHMM. Also areUpdates is a boolean that is true if there are new updates since the users last visit.

!!!To Do:
*refactor code to facilitate translations
*a streamlined version without the custom write parameter


!!!Code
***/
//{{{
window.lewcidLastVisit = '';
window.old_lewcid_whatsnew_restart = window.restart;
window.restart = function()
{
        if(config.options.txtLastVisit)
                 lewcidLastVisit= config.options.txtLastVisit;
        config.options.txtLastVisit = (new Date()).convertToYYYYMMDDHHMM();
        saveOptionCookie('txtLastVisit');
        window.old_lewcid_whatsnew_restart();
}

TiddlyWiki.prototype.lewcidGetTiddlers = function(field,excludeTag,includeTag,updatesOnly)
{
              var results = [];
              this.forEachTiddler(function(title,tiddler)
                      {
                      if(excludeTag == undefined || !tiddler.isTagged(excludeTag))
                                    if(includeTag == undefined ||  tiddler.isTagged(includeTag))
                                            if ( updatesOnly == false || tiddler.modified.convertToYYYYMMDDHHMM()>lewcidLastVisit)
                                                  results.push(tiddler);
                      });
              if(field)
                  results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
              return results;
}

config.macros.showUpdates={};
config.macros.showUpdates.settings =
{
         maxEntries: 10  //max items to show, if there are no updates since last visit
}

config.macros.showUpdates.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
          var args = paramString.parseParams("list",null,true);
          var write = getParam(args, "write", undefined);
          var onlyTag = getParam(args, "onlyTag", undefined);
          var excludeTag = getParam(args, "excludeTag", undefined);
          var sortBy = "modified";
          var maxEntries = getParam(args,"maxEntries",this.settings.maxEntries);

          if (lewcidLastVisit) 
                {var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,true);
                 var areUpdates = tiddlers.length>0? true:false;}

          if (!lewcidLastVisit)
               {var countLine = "!!Recent Updates:";
               var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);
               var areUpdates = false;}
          else if (tiddlers.length == 0)
               {var countLine = "!!@@color:red;No new updates@@ since your last visit. @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@\n!!Recent Updates:";
               var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);}
          else
               {var countLine ="!!@@color:red;"+ tiddlers.length + "@@ new " + (tiddlers.length==1?"update":"updates") + " since your last visit: @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@";}

          tiddlers = tiddlers.reverse();
          var lastVisit = lewcidLastVisit? lewcidLastVisit:undefined;
          var count = areUpdates == true? tiddlers.length : maxEntries;
          var sp = createTiddlyElement(place,"span","showUpdates");
          if (write==undefined)
                 {
                  wikify(countLine,sp);
                  var list = createTiddlyElement(sp,"ul");
                  for (var i = 0; i < count; i++)
                          {
                           var tiddler = tiddlers[i];
                           createTiddlyLink(createTiddlyElement(list,"li"), tiddler.title, true);
                          }
                 }
          else
                {
                 var list = '';
                 for (var index = 0; index < count; index++) {
                 var tiddler = tiddlers[index];
                 list += eval(write); }
                 wikify(list, sp);
                }
}
//}}}
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
There are a few operational issues with Resource -> File upload that makes me leery of making this available:

# For ''every'' other activity on Moodle that involves uploading file the user executes and Browse and then Upload. Not so here. I was left wondering what to do next with the long path shown in the Attachment box. Pressing [Save] thus does two things, it uploads the file and then saves the resource. If the file is not found for some reason the save will fail. 
# Faculty will often want to update resources, especially syllabi. But when you update an "Upload file" resource you cannot see what file the resource is referring to [[screenshot|graphics/resource_file-upload-update.png]]<<imagebox>>. In fact, it's impossible to discover what file the resource links to.
# This is important because faculty will often "tidy up" their files by deleting ones they think they no longer need. I have configured Earlham Moodle with Site admin : Modules : Activity : Resource : Block deleting of referenced file -> Yes. When someone tries to delete a file linked to a resource they get [[this screen|graphics/resource_attempt-delete.png]]<<imagebox>>. But files used as "Upload file" resources are not blocked from deletion and thus can be deleted even when linked to a resource. Moreover, the user may not be aware of the problem since clicking on the resource in course outline will bring up a local cached copy.

Is there any way that I can disable the display of [Upload a file] from the resource list?
<<notes>>
!!Fix Simple file upload
Bob Puffer suggested that I could remove it by:
<<<
Replace all mdl_resource records whose type field is set to "fileupload" to "file" and you can remove the "fileupload" from the mod/resource/type directory.
<<<
* Backup database first in the usual way.
* Fix the database:
<<<
{{{
$ mysql -u root -p -D <database name>
mysql> SELECT * FROM mdl_resource WHERE type = 'fileupload';
82 rows in set
mysql> UPDATE mdl_resource SET type='file' WHERE type= 'fileupload';
Query OK, 82 rows affected (0.00 sec)
Rows matched: 82  Changed: 82  Warnings: 0
mysql> SELECT * FROM mdl_resource WHERE type = 'fileupload';
Empty set (0.00 sec)
mysql> SELECT * FROM mdl_resource WHERE type = 'file';
175 rows in set (0.00 sec)
}}}
<<<
* Delete the offending folder:
>{{{mod/resource/type]$ rm -r fileupload/}}}
@@worked@@
!!General settings
;Show submitted date for hidden grades
: ''yes''
; Navigation method :
: ''Tabs''
; Unlimited Grades +++[details]>
By default grades are limited by the maximum and minimum values of the grade item. Enabling this setting removes this limit, and allows grades of over 100% to be entered directly in the gradebook.
=== 
: ''yes''
!!Grade category settings
; Available aggregation types
: ''leave out'' median and mode
@@Think about@@
;Aggregate including subcategories :
: yes
!!Grade Item settings
;Grade display type :
: ''Percentage (letter)''
; Overall decimal points :
: ''1''
; Advanced grade item options (Select all elements that should be displayed as advanced when editing grade items. -- all others are in the 'simple' interface)
: Item info, ID number, Grade to pass, Multiplicator, Grade display type, Overall decimal points, hidden until, lock after
!!Scales
@@get rid of 'standard Earlham alphabetic' and 'Complete/not complete' since these are heretical@@
@@But@@ already there courses restored that are using these.
But see [[Improving Scales in the Gradebook|http://moodle.org/mod/forum/discuss.php?d=140907#p615285]]
<<<
It seems there is also a need for a page linked to from the scales administration page that shows the current usage of a given scale.

There are a lot of forums posts from people wanting to delete scales that have previously been used (see 73806, 110784, 134118, 135232 for a few examples). Understandably any scale that is currently attached to a course/activity etc, should not be deletable. However, finding the list of where a scale is used, so you can unlink that scale and ultimately delete it, is exceedingly time consuming without an understanding of SQL and direct access to the database.

This issue could be quite easily solved with a new page, linked to from the “Used” column in the scales administration page, which shows every context in which a scale is used.
<<<
This is what I need to do.
And Tracker issue [[Custom non-numeric scales to have assigned numeric value in gradebook|http://tracker.moodle.org/browse/MDL-17258]]
!!!{{ts{5/08/10 15:31}}}
Sent +++[this message]>
Mark Pearson [5/08/10, 15:23]: In the forum discussion Improving Scales in the Gradebook you made this comment:
>However, finding the list of where a scale is used, so you can unlink that scale and ultimately delete it, is exceedingly time consuming without an understanding of SQL and direct access to the database.

OK. This is exactly what I need to do. What is happening is that I am restoring courses that have used scales that are plain bad or just wrong and I want to get rid of these scales so that they don't accidentally get used again.
I do have some understanding of SQL and access to a sandbox moodle database and can follow complex instructions. I'm hoping that it's not too difficult to generate a list of courses/activities where certain scales have been used.
Thanks for any help you can offer. My email address is markp@earlham.edu
===  to Evan Irving-Pease on moodle.org messages.

Also [[Development:Scales|http://docs.moodle.org/en/Development:Scales]]

!! Report Settings
Changing the Site defaults here can simplify the most common quiz configurations:
;Time Limit
: -> Advanced setting
; Shuffle questions:
: ''yes'' (change of default)
; Suffle within questions:
: yes
; Attempts allowed:
: ''1 attempt''
; Each attempt builds on last
: -> Advanced setting
; Adaptive mode:
: ''No'' (since only 1 attempt this is irrelevant) -> Advanced setting
; Apply penalties :
: ''No'' (only used with adaptive mode) -> Advanced setting
; decimal digits:
: ''0''
; students may review:
: everything after the quiz is closed.
; Browser security, time delays, other requirements
: move to -> Advanced settings
;Frame size:
: ''150'' pixels +++[details]>
When a web page or an uploaded file is displayed within a frame, this value is the size (in pixels) of the top frame (which contains the navigation).
=== 
!!! Popup windows
; show menu bar
: ''no''
; show toolbar
: ''no''
; default window width x height
: 640 x 480
@@Note these two settings defaulted to ''yes''@@
;Update link if file renamed
: Automatically update references to files and directories when renamed in file manager.
; Block deleting of referenced files
: Block deleting of files and directories referenced by resources.
Moodle Mark's machinations
Millenial Moodle Issues
http://www.earlham.edu/markp/millmiss/
!!Moodle Reminders
* Your new courses will have the label ''201220'' for academic year 2012 and spring semester. //They may not be located at the top of the ~MyMoodle list//. You may want to move them up to the top. [[Here's how|http://legacy.earlham.edu/~markp/moodledocs/index.html#MyMoodle_new_features]].
* [>img[http://legacy.earlham.edu/~markp/millmiss/graphics/myCourses-hidden.png]] A better way to view courses is to use the myCourses block Click the blue square to see visible courses and the grey square to see hidden courses.
* ''All courses from last semester will be hidden this afternoon (Jan 10th)''. Students are still enrolled in these and it gets very confusing if they are still visible. If you need to access a course from last semester (or any previous year) please complete [[Course access and restore request|https://moodle.earlham.edu/mod/questionnaire/view.php?id=35151]] form.
**  We don't create for-credit courses -- this is done automatically by the Banner/LMB system.
**  We don't enroll teachers or students -- again, that is done automatically by the Banner/LMB system.
*** ''Except'' for Administrative Assistants where //you, the teacher in the course// can enroll your assistant (Administration block : Enrollments)
*  Your new courses with all enrolled students will be present. If there are any problems with enrollments please contact Julie Stout (//stoutju@earlham.edu//) in the Regstrar's Office (with a CC: to markp if you want him to know what's going on).
* Retrieving previous course content from 2010-11:
** Use [[course import|http://legacy.earlham.edu/~markp/moodledocs/#ImportCourse]] (you don't need to see this on your myMoodle list to import it).
** [[Request access to previous courses|https://moodle.earlham.edu/mod/questionnaire/view.php?id=35151]] and then use the [[Sharing Cart|http://legacy.earlham.edu/~markp/moodledocs/#%5b%5bSharing%20Cart%5d%5d]]
See also [[Moodle 2012 FAQ|http://legacy.earlham.edu/~markp/moodledocs/#Moodle2012-FAQ]]
I have just realised that the default start date for all the courses created by Luminis is //Aug 24th// -- a wednesday, whereas what I need for Moodle is Aug 21st! Let's see whether we can change the database and then see whether the change sticks!
|!Start Date|!Database startdate|
| Aug 24 2011| 1314144000 |
| Aug 21 2011| 1313884800 |
SQL:
{{{SELECT * FROM `mdl_course` WHERE `startdate` =1314144000}}}
This gets 794 rows
Now what we want is to update. How about:
{{{UPDATE mdl_course SET startdate=1313884800 WHERE startdate =1314144000}}}
* Backup first {{{moo-archives/summer-11]$ mysqldump -u moodlebackup -p -C -Q -e chemix12 >chemix12-aug5-predatechange.sql}}}
{{{
$ mysql -u root -p -D chemix12
mysql> UPDATE mdl_course SET startdate=1313884800 WHERE startdate =1314144000;
Query OK, 794 rows affected (0.03 sec)
Rows matched: 794  Changed: 794  Warnings: 0
}}}
Worked!
{{ts{11/08/11 11:57}}}
Problem is that the Start dates do not seem to 'stick' -- they get changed back after every LMB run.
Here's where it's set:
{{{
                <description>
                        <short>10224</short>
                        <long>JPNS-488-0</long>
                        <full>Senior Capstone Experience</full>
                </description>

                <timeframe>
                        <begin restrict="0">2011-08-24</begin>
                        <end restrict="0">2011-12-15</end>
                </timeframe>
}}}
{{ts{11/08/11 12:10}}}
Test by setting ~JNLM115-2 and ~INST359-0 to Aug 21 start date manually. Yes, both get reverted to Aug 24.
{{ts{11/08/11 12:30}}}
Did a mass substitute in {{{icgorldi_606595.xml}}} to change all occurrences of {{{2011-08-24}}} to {{{2011-08-21}}} and then rerun LMB import with new log file just in case. I have no idea what this may do to other things since this date is probably used elsewhere than for course starting.
This //seems// to have worked. But more anon.

Students want to be able to unenrol themselves from a course. Instructions [[here|http://docs.moodle.org/en/Unenrol]]:
+++[From the Docs page:]>
To enable students to unenrol themselves from a particular course:
   1. Follow the Assign roles link in the course administration block.
   2.  click the "Override permissions" tab
   3. Select the Student role.
   4. Set the capability moodle/role:unassignself to allow.
   5. Click the "Save changes" button at the bottom of the page. 
=== 
Provide students with capability to unenrol site wide:
# Site Admin : Users : Permissions : Define roles -> Student : edit
# Set @@Unassign own roles@@ to permission : Allow
# [Save changes]
Done {{ts{8/09/10 10:50}}}
/*{{{*/
body {font-size:.75em; font-family:verdana,arial,helvetica; margin:0; padding:0;}
.title {
	font-size: 225%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: Eurostile, 'Trebuchet MS', sans-serif;
}
.headerForeground, .headerShadow {
	font-family: Eurostile, 'Trebuchet MS', sans-serif;
	font-weight:bold;
}
.downloadLink {
	font-size:110%;
	padding-left:2em;
}
.downloadLink a {
	border:2px solid #ddd;
	padding:0.5em;
}
/*}}}*/
We want to have a dashed line around the quickfeedback box as on the regular grader report.
# Establish the style class to use -- employ Firefox Web developer toolbar -> display element information. [[screenshot|graphics/lae-grader-report-style.png]]<<imagebox>>
# discover where the styles file is located : {{{/grade/report/laegrader/styles.php}}}
# edit to add laegrader style:
<<<
{{{

.grade-report-grader table#user-grades .quickfeedback {
border:#000 1px dashed;
}

.grade-report-laegrader table#user-grades .quickfeedback {
border:#000 1px dashed;
}
}}}
<<<
@@SUSSED@@

[img[graphics/lae-grader-report-style-dashed.png]]
!Reasons to be cheerful -- part 1
Propose setting up new moodle server to use over the summer. Make it clear that it's beta and that changes / bug fixes will happen. Roll these in to an end of July version. Use LAE moodle 1.9.7
* old database
** word junk
* new database
** fix problems associated with faculty accounts, eg Monteze, Vince P
** drop book
** remove broken scales
** fix librarian roles
** change capabilities fro teacher to add 'backup users'
* LAE version
** baked in TinyMCE -- how does this help pasting Word?

!Fall Moodle session
* new faculty
* TA's doing Moodle support -- offer personal tuition

Amy's support issues:
* End of the semester maintenance with Faculty and Moodle - I recall that last year there were some issues that Neal was stuck handling because we were in Turkey. What should procedure be this year to make things easier for all?
* Moodle support for the Fall. Who's doing what, especially with sabbaticals, etc.
* Automatic course creation based on Banner info. We did in the past, can we try again?  Pros/Cons?
** We've never had 'automatic' course creation. +++[What actually happens]>
I beg for a slice of Ben's time; he runs a script which pulls out a list of courses and teachers from Webdb which he sends to me. I clean up the data, test it by uploading into a test Moodle version and then upload it into the production Moodle instance. Many of the course records have the teacher 'TBA' and therefore these have to be manually allocated to teachers when they become known. Still a labour intensive task.
=== We ''could'' implement automatic course creation but this would need to go on ECS's priority list.
** Course Creation form to go inside Moodle?
* Does the "Moodle Support" team need more support? How can we document stuff for ourselves most efficiently?
* Change  Course Request procedure -- make it a Feedback activity in a Moodle course. @@Advantages:@@
## Users login to the system and so their account will be created via LDAP
## Track user requests
## Easier to modify and change with our experience of use
## Can still use a permanent URL
!Configuration settings for new Moodle systems
;Allow teachers to add other users as teachers in a course
: Site Administration : Users : Permissions : define roles -- T allow role assignments T -- Teacher -- check Teacher , check Course Assistant
; Q: should Auto-login Guests be checked [yes] 
: Should visitors be logged in as guests automatically when entering courses with guest access? -- in Site Admin : Users : Permissions : User policies. I think this would imply that setting a course to Guest access without key and then linking to it would ''not'' make a user have to login as Guest in order to access.
;Important
: @@grant teachers capability of backing up with users@@
Use Legacy role : Teacher (editing) rather than Administrator)
@@ Go over these capabilities carefully@@
<<list all>>
<<allTags excludeLists>>
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
<<timeline>>
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row 
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}

!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |£122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |£9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |€3300.30 |5554 |+5 |4Kb |05/22/1995 |

***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
	
	darrow: "\u2193",
	
	uarrow: "\u2191",
	
	getText : function (o) {
		var p = o.cells[SORT_INDEX];
		return p.innerText || p.textContent || '';
	},
	
	sortTable : function (o,rev) {
		SORT_INDEX = o.getAttribute("index");
		var c = config.tableSorting;
		var T = findRelated(o.parentNode,"TABLE");
		if(T.tBodies[0].rows.length<=1) 
			return;
		var itm = "";
		var i = 0;
		while (itm == "" && i < T.tBodies[0].rows.length) {
			itm = c.getText(T.tBodies[0].rows[i]).trim();
			i++;
		}
		if (itm == "") 
			return; 	
		var r = [];
		var S = o.getElementsByTagName("span")[0];		
		c.fn = c.sortAlpha; 
		if(!isNaN(Date.parse(itm)))
			c.fn = c.sortDate; 
		else if(itm.match(/^[$|£|€|\+|\-]{0,1}\d*\.{0,1}\d+$/)) 
			c.fn = c.sortNumber; 
		else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/)) 
			c.fn = c.sortFile; 
		for(i=0; i<T.tBodies[0].rows.length; i++) {
			 r[i]=T.tBodies[0].rows[i]; 
		} 
		r.sort(c.reSort);
		if(S.firstChild.nodeValue==c.darrow || rev) {
			r.reverse();
			S.firstChild.nodeValue=c.uarrow;
		} 
		else 
			S.firstChild.nodeValue=c.darrow;
		var thead = T.getElementsByTagName('thead')[0]; 
		var headers = thead.rows[thead.rows.length-1].cells;
		for(var k=0; k<headers.length; k++) {
			if(!hasClass(headers[k],"nosort"))
				addClass(headers[k].getElementsByTagName("span")[0],"hidden");
		}
		removeClass(S,"hidden");
		for(i=0; i<r.length; i++) { 
			T.tBodies[0].appendChild(r[i]);
			c.stripe(r[i],i);
			for(var j=0; j<r[i].cells.length;j++){
				removeClass(r[i].cells[j],"sortedCol");
			}
			addClass(r[i].cells[SORT_INDEX],"sortedCol");
		}
	},
	
	stripe : function (e,i){
		var cl = ["oddRow","evenRow"];
		i&1? cl.reverse() : cl;
		removeClass(e,cl[1]);
		addClass(e,cl[0]);
	},
	
	sortNumber : function(v) {
		var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
		return isNaN(x)? 0: x;
	},
	
	sortDate : function(v) {
		return Date.parse(this.getText(v));
	},

	sortAlpha : function(v) {
		return this.getText(v).toLowerCase();
	},
	
	sortFile : function(v) { 		
		var j, q = config.messages.sizeTemplates, s = this.getText(v);
		for (var i=0; i<q.length; i++) {
			if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
				return q[i].unit * s.substr(0,j);
		}
		return parseFloat(s);
	},
	
	reSort : function(a,b){
		var c = config.tableSorting;
		var aa = c.fn(a);
		var bb = c.fn(b);
		return ((aa==bb)? 0 : ((aa<bb)? -1:1));
	}
};

Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
	var elem = this.tSort_refreshTiddler.apply(this,arguments);
	if(elem){
		var tables = elem.getElementsByTagName("TABLE");
		var c = config.tableSorting;
		for(var i=0; i<tables.length; i++){
			if(hasClass(tables[i],"sortable")){
				var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
				for (var j=0; j<headers.length; j++){
					var h = headers[j];
					if (hasClass(h,"nosort"))
						continue;
					h.setAttribute("index",j);
					h.onclick = function(){c.sortTable(this); return false;};
					h.ondblclick = stopEvent;
					if(h.getElementsByTagName("span").length == 0)
						createTiddlyElement(h,"span",null,"hidden",c.uarrow); 
					if(!x && hasClass(h,"autosort")) {
						x = j;
						rev = hasClass(h,"reverse");
					}
				}
				if(x)
					c.sortTable(headers[x],rev);		
			}
		}
	}
	return elem; 
};

setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
	"table.sortable thead {cursor:pointer;}\n"+
	"table.sortable .nosort {cursor:default;}\n"+
	"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");

function stopEvent(e){
	var ev = e? e : window.event;
	ev.cancelBubble = true;
	if (ev.stopPropagation) ev.stopPropagation();
	return false;	
}	

config.macros.nosort={
	handler : function(place){
		addClass(place,"nosort");
	}	
};

config.macros.autosort={
	handler : function(place,m,p,w,pS){
		addClass(place,"autosort"+" "+pS);		
	}	
};
//!END-PLUGIN-CODE
// %/
Note, this stuff is a bit old and in need of redrafting in some places. Apologies.

!Chapter 1
Early versions of TiddlyWiki didn't have tagging. A couple of smart TiddlyWiki hackers realised that being able to tag your data in TiddlyWiki would be really good and (as is often the case with TiddlyWiki) they were inspired to have a go at adding it themselves. The result was two TiddlyWiki adaptations that implemented tagging, one called TagglyWiki created by Jody Foo, and one called TiddlyTagWiki by Johnny ~LeRoy. 

TiddlyTagWiki used a 'tags as separate things' philosophy, space separated tags and popup menus when you click on a tag. TagglyWiki (and there was also a GTDTagglyWiki) had a 'tiddler is a tag is a tiddler' philosophy, had comma separated tags and introduced the concept of tiddlers displaying a list of their tagged tiddlers.

When Jeremy added tagging to the official TiddlyWiki version he considered both approaches and decided on the TiddlyTagWiki implementation. Jody Foo stopped maintaining TagglyWiki at around that time so TagglyWiki fans like me were forced to stick with their aging [[TagglyWiki]]s, missing out on numerous upgrades and cool new features as each revision of TiddlyWiki came out, until eventually they couldn't take it any more and started wondering what they could do to get hold of an up-to-date TiddlyWiki with TagglyWiki style tagging. (Okay, maybe that last part was just me!)

So when TiddlyWiki began to support enhancements via systemConfig plugins I decided to try to write a version of TagglyWiki style tagging as a plugin. It turned out to be easier than I thought. I managed to get it working and created MonkeyPirateTiddlyWiki (see [[Ancient Stuff]]) to share it (and my other plugins). Since then there have been a few enhancements like dynamic updating of tagged lists and the new sort controls.

TiddlyTagWiki has continued to be maintained by Johnny and now contains some interesting new plugins.

!Chapter 2
In TiddlyWiki version 2.0 Jeremy incorporated the "tiddler is a tag is a tiddler" concept into TiddlyWiki and introduced the "tagging" list, the other central component of TagglyTagging. Some of the main reasons for TagglyTagging's existence had vanished! But instead of disappearing TagglyTagging became the set of tools it is now, an enhanced tagging list with sort controls, some layout changes and a few other simple tools (NewHerePlugin, QuickOpenTagPlugin and RenameTagsPlugin) that facilitate using tags in the powerful TagglyTagging way.

!Chapter 3
After the TiddlyWiki 2.1 release TagglyTaggingPlugin was completely rewritten. Some new features were added like site map mode and better support for columns. Also support for the new refresh mechanism was added which greatly improved the efficiency of dynamically updating the tagging lists.
You can do this right here and now. Maybe you should print this out so it's easy to follow while working on screen. I presume you have some familiarity with TiddlyWiki basics. If you are having trouble following this then try this [[excellent tutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]] first.

!Getting started: Create some content
* First hit "close others" to clear up your screen
* Click "new tiddler" from the main menu.
* Name the tiddler "~MyStuff" by typing into the title box.
* Add some contents to the contents box, for example "This is my stuff"
* Click the Done button to save the new tiddler. (We will return to this one later).
* Let's say you just returned from a meeting and want to enter a couple of notes about it
** Click "new tiddler"
** Enter tiddler title as "Meeting with Leo - 12 Oct"
** Add some meeting notes in the content box
** Don't click Done just yet...

!Tagging your content
* Before you save the "Meeting with Leo..." tiddler let's add some tags
** It's a meeting so let's give it a tag called "Meetings". Type Meetings in the tags box.
** The meeting was with Leo so let's give it a tag called Leo. Type Leo in the tags box.
** Let's say the meeting was about budget planning for example. Type Budget in the tags box.
** So your tags box should look like this: {{{Meetings Leo Budget}}}
*Now save the tiddler by clicking the Done button.

!Using the tags
*No big deal so far, right? Now we start to get into TagglyTagging territory.
*Notice the tags appear above the title. They are italicised to indicate they don't exist yet (just like any other tiddler that doesn't exist yet).
*Click on the Leo tag. You will open an empty tiddler called Leo.
**Give it some content like "Leo Runcible, ext 1234. Likes cats". Or whatever.
**Leo's a person so give him a tag of "People" by typing People in the tags box.
**Save it by clicking Done.

!Lets pick up the pace
*Go back to your "Meeting with Leo..." tiddler.
** Click on Meetings. Give Meetings a tag of ~MyStuff and save it.
** Click on People. Give People a tag of ~MyStuff and save it.
** Click on Budget. Give Budget a tag of Projects. Type something about the Budget project in the tiddler contents if you want. Save it.
** Now above the Budget title click on the Projects tag. Give Projects a tag of ~MyStuff. Save that.
* Now find your ~MyStuff tiddler. Look at the tagged tiddler list which appears at the bottom of the tiddler. It should be a list containing Meetings, People and Projects.
* Close a few tiddlers and try navigating to your meeting tiddler from ~MyStuff using the tagged tiddler lists.

That's a quick look at the basics of TagglyTagging. Hopefully by now you have some idea about what TagglyTagging can do. Play around with it a little more if you like. Then continue to...

!The New Here Button
* Click on People.
* Do you know any other people?
* If so click, "new here" in the People tiddler
** Notice that the tags box already contains the tag People. (This is what the new here button does. It creates a new tiddler with the tag already filled in).
** Type someone's name and some notes on that person. Click Done to Save.
* Add a couple more people for fun
** Notice what happens to the "tagged tiddler" list at the bottom of the People tiddler.

!Changing the structure of your data
Let's look at how easy it is to change your structure. Suppose you decide that you want to have different types of Projects: Ongoing, Current and Future
* Go to your Budget tiddler. Edit it and change the Projects tag to OngoingProjects. Save.
* Click the OngoingProjects tag. Give that a tag of "Projects".
* That's it. You're done. Well actually you haven't added the Ongoing and Future Projects but you can see that's not hard. Maybe click "new here" at the Projects tiddler. Or maybe just tag a project as Future Projects and do it from the bottom up.

!Another example
* Suppose your original meeting had an action item for you. Type it into the meeting notes as a wiki word or {{{[[}}}Do Something{{{]]}}}.
* Now click on it and give it a tag of Todo. Type any extra information about how you're going to do it when it's due by etc into the contents. Put a reminder in there if you have ReminderPlugin installed.
* Now make sure you can get to your Todos by tagging Todo tiddler as MyStuff.
* For convenience let's put a link to MyStuff in your MainMenu. This will put all your new organised information at your fingertips at all times.

!Sort Controls and Columns
* If you mouse over a tagged tiddler list you should see some buttons. Try them out. Note that if you save it remembers your choice.

!Wrapup
Hopefully you can see that TagglyTagging gives you a powerful way to organise and structure your information. Don't forget that you can still use conventional wiki links to navigate around your tiddlers. TagglyTagging just gives you another way to do cool stuff with your TiddlyWiki.


~~This tutorial is a draft. Feedback is welcome. Please [[contact|Contact]] me with comments and suggestions.~~
See [[TagglyTagging FAQ]].
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.3.1 ($Rev: 9828 $)|
|Date:|$Date: 2009-06-03 21:38:41 +1000 (Wed, 03 Jun 2009) $|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{

merge(String.prototype,{

	parseTagExpr: function(debug) {

		if (this.trim() == "")
			return "(true)";

		var anyLogicOp = /(!|&&|\|\||\(|\))/g;
		var singleLogicOp = /^(!|&&|\|\||\(|\))$/;

		var spaced = this.
			// because square brackets in templates are no good
			// this means you can use [(With Spaces)] instead of [[With Spaces]]
			replace(/\[\(/g," [[").
			replace(/\)\]/g,"]] "). 
			// space things out so we can use readBracketedList. tricky eh?
			replace(anyLogicOp," $1 ");

		var expr = "";

		var tokens = spaced.readBracketedList(false); // false means don't uniq the list. nice one JR!

		for (var i=0;i<tokens.length;i++)
			if (tokens[i].match(singleLogicOp))
				expr += tokens[i];
			else
				expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); // fix single quote bug. still have round bracket bug i think

		if (debug)
			alert(expr);

		return '('+expr+')';
	}

});

merge(TiddlyWiki.prototype,{
	getTiddlersByTagExpr: function(tagExpr,sortField) {

		var result = [];

		var expr = tagExpr.parseTagExpr();

		store.forEachTiddler(function(title,tiddler) {
			if (eval(expr))
				result.push(tiddler);
		});

		if(!sortField)
			sortField = "title";

		result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
		
		return result;
	}
});

config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			exprLabel:  "Matching tag expression '%0':",
			excerpts:   "excerpts",
			descr:      "descr",
			slices:     "slices",
			contents:   "contents",
			sliders:    "sliders",
			noexcerpts: "title only",
			noneFound:  "(none)"
		},

		tooltips: {
			title:      "Click to sort by title",
			modified:   "Click to sort by modified date",
			created:    "Click to sort by created date",
			show:       "Click to show tagging list",
			hide:       "Click to hide tagging list",
			normal:     "Click to show a normal ungrouped list",
			group:      "Click to show list grouped by tag",
			sitemap:    "Click to show a sitemap style list",
			commas:     "Click to show a comma separated list",
			numCols:    "Click to change number of columns",
			excerpts:   "Click to show excerpts",
			descr:      "Click to show the description slice",
			slices:     "Click to show all slices",
			contents:   "Click to show entire tiddler contents",
			sliders:    "Click to show tiddler contents in sliders",
			noexcerpts: "Click to show entire title only"
		},

		tooDeepMessage: "* //sitemap too deep...//"
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts","descr","slices","contents","sliders"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeLists","excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/",
		siteMapDepthLimit: 25
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		// create it silently if it doesn't exist
		if (!store.tiddlerExists(title)) {
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");

			// <<tagglyTagging expr:"...">> creates a tiddler to store its display settings
			// Make those tiddlers less noticeable by tagging as excludeSearch and excludeLists
			// Because we don't want to hide real tags, check that they aren't actually tags before doing so
			// Also tag them as tagglyExpression for manageability
			// (contributed by RA)
			if (!store.getTaggedTiddlers(title).length) {
				store.setTiddlerTag(title,true,"excludeSearch");
				store.setTiddlerTag(title,true,"excludeLists");
				store.setTiddlerTag(title,true,"tagglyExpression");
			}
		}

		// if value is default then remove it to save space
		return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// supposed to automagically don't let cols cycle up past the number of items
		// currently broken in some situations, eg when using an expression
		// lets fix it later when we rewrite for jquery
		// the columns thing should be jquery table manipulation probably
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

		if (colSize != Math.floor(colSize)) {
			// it's not an exact fit so..
			upperColsize = Math.floor(colSize) + 1;
			lowerColsize = Math.floor(colSize);
		}

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title,isTagExpr) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title,isTagExpr); break;
			case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
			case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;
		}
	},

	getTaggingCount: function(title,isTagExpr) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
		return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);
	},

	getExcerpt: function(inTiddlerTitle,title,indent) {
		if (!indent)
			indent = 1;

		var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
		var t = store.getTiddler(title);

		if (t && displayMode == "excerpts") {
			var text = t.text.replace(/\n/," ");
			var marker = text.indexOf(this.config.excerptMarker);
			if (marker != -1) {
				return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
			}
			else if (text.length < this.config.excerptSize) {
				return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
			}
			else {
				return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
			}
		}
		else if (t && displayMode == "contents") {
			return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
		}
		else if (t && displayMode == "sliders") {
			return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
		}
		else if (t && displayMode == "descr") {
			var descr = store.getTiddlerSlice(title,'Description');
			return descr ? " {{excerpt{" + descr  + "}}}" : "";
		}
		else if (t && displayMode == "slices") {
			var result = "";
			var slices = store.calcAllSlices(title);
			for (var s in slices)
				result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
			return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas,isTagExpr) {

		var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title,isTagExpr) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

		if (sortOrder == "desc")
			list = list.reverse();

		var leftOvers = []
		for (var i=0;i<list.length;i++)
			leftOvers.push(list[i].title);

		var allTagsHolder = {};
		for (var i=0;i<list.length;i++) {
			for (var j=0;j<list[i].tags.length;j++) {

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

		var allTags = [];
		for (var t in allTagsHolder)
			allTags.push(t);

		var sortHelper = function(a,b) {
			if (a == b) return 0;
			if (a < b) return -1;
			return 1;
		};

		allTags.sort(function(a,b) {
			var tidA = store.getTiddler(a);
			var tidB = store.getTiddler(b);
			if (sortBy == "title") return sortHelper(a,b);
			else if (!tidA && !tidB) return 0;
			else if (!tidA) return -1;
			else if (!tidB) return +1;
			else return sortHelper(tidA[sortBy],tidB[sortBy]);
		});

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {

		var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

		if (sortOrder == "desc")
			list.reverse();

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";

		if (depth > this.config.siteMapDepthLimit)
			childOutput += indent + this.lingo.tooDeepMessage;
		else
			for (var i=0;i<list.length;i++)
				if (list[i].title != title)
					if (this.notHidden(list[i].title,this.config.inTiddler))
						childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title,isTagExpr) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var parsedParams = paramString.parseParams("tag",null,true);
				var refreshContainer = createTiddlyElement(place,"div");

				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);

				var tag = getParam(parsedParams,"tag");
				var expr = getParam(parsedParams,"expr");

				if (expr) {
					refreshContainer.setAttribute("isTagExpr","true");
					refreshContainer.setAttribute("title",expr);
					refreshContainer.setAttribute("showEmpty","true");
				}
				else {
					refreshContainer.setAttribute("isTagExpr","false");
					if (tag) {
        				refreshContainer.setAttribute("title",tag);
						refreshContainer.setAttribute("showEmpty","true");
					}
					else {
        				refreshContainer.setAttribute("title",tiddler.title);
						refreshContainer.setAttribute("showEmpty","false");
					}
				}
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				var isTagExpr = place.getAttribute("isTagExpr") == "true";
				var showEmpty = place.getAttribute("showEmpty") == "true";
				removeChildren(place);
				addClass(place,"tagglyTagging");
				var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
				if (countFound > 0 || showEmpty) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",
								isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title,isTagExpr);
						if (countFound == 0 && showEmpty)
							createTiddlyElement(place,"div",null,"tagglyNoneFound",lingo.labels.noneFound);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}

/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin

// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed

***/
//{{{
config.formatters.unshift( {
	name: "inlinesliders",
	// match: "\\+\\+\\+\\+|\\<slider",
	match: "\\<slider",
	// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
	lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
	handler: function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
			var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
			var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
			panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
			wikify(lookaheadMatch[3],panel);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
   },
   onClickSlider : function(e) {
		if(!e) var e = window.event;
		var n = this.nextSibling;
		n.style.display = (n.style.display=="none") ? "block" : "none";
		return false;
	}
});

//}}}

See [[TagglyTagging Tutorial]].
Given the latest missive from Don Hinkleman (in [[Sharing Cart update]]) I'll test the new Sharing Cart on my [[moodle test site|http://rublev.lly.earlham.edu/~markp/moo-2011t/]]
* Update the CVS: {{{~/moo-plugins/contrib/plugins/blocks/sharing_cart]$ cvs update -dP}}} +++[Output]>
{{{
cvs update: Updating .
cvs update: v20100308.txt is no longer in the repository
U v20100930.txt
cvs update: Updating db
cvs update: Updating lang
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/sharing_cart
P lang/en_utf8/help/sharing_cart/sharing_cart.html
cvs update: Updating lang/es_utf8
cvs update: Updating lang/es_utf8/help
cvs update: Updating lang/es_utf8/help/sharing_cart
cvs update: Updating lang/ja_utf8
cvs update: Updating lang/ja_utf8/help
cvs update: Updating lang/ja_utf8/help/sharing_cart
P lang/ja_utf8/help/sharing_cart/sharing_cart.html
cvs update: Updating lib
cvs update: Updating lib/course
cvs update: Updating lib/form
cvs update: Updating pix
cvs update: Updating plugins
cvs update: Updating plugins/repository
cvs update: Updating plugins/repository/Form
cvs update: Updating plugins/repository/lang
cvs update: Updating plugins/repository/lang/en_utf8
cvs update: Updating plugins/repository/lang/en_utf8/help
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart/plugins
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart/plugins/repository
cvs update: Updating plugins/repository/lang/ja_utf8
cvs update: Updating plugins/repository/lang/ja_utf8/help
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart/plugins
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart/plugins/repository
cvs update: Updating plugins/repository/lib
cvs update: Updating plugins/repository/pix
cvs update: Updating shared
U shared/SharingCart_Backup.php
U shared/SharingCart_BackupRestoreBase.php
U shared/SharingCart_Restore.php
cvs update: Updating shared/qtype
}}}
=== 
>Old version {{{v20100308.txt}}} -- new version {{{v20100930.txt}}}
* Delete the old version : {{{~/public_html/moo-2011t/blocks]$ rm -r sharing_cart/}}}
* Copy new version : {{{~/moo-plugins/contrib/plugins/blocks]$ cp -r sharing_cart ~/public_html/moo-2011t/blocks}}}
* Same bug with clash with Experimental : split restore +++[output]>
{{{
exception 'SharingCart_ModuleException' with message 'Course module record insertion failure' in 
/usr/home/markp/public_html/moo-2011t/blocks/sharing_cart/shared/SharingCart_Restore.php:323 
Stack trace: #0 /usr/home/markp/public_html/moo-2011t/blocks/sharing_cart/shared/SharingCart_Restore.php(259): SharingCart_Restore->restoreSection() 
#1 /usr/home/markp/public_html/moo-2011t/blocks/sharing_cart/shared/SharingCart_Restore.php(142): SharingCart_Restore->parseXml() 
#2 /usr/home/markp/public_html/moo-2011t/blocks/sharing_cart/restore.php(44): SharingCart_Restore->execute() 
#3 {main}
}}}
=== 
{{ts{14/04/10 10:58}}} download the latest build of 1.9.8+ and use to test:
* [[ForumNG]] @@yes@@
* [[Mediabird Study Notes]] @@No@@
* [[BIM -- mark blog feeds|BIM – Feed Aggregation Management and Marking]] -- still to test
* [[Enhanced File Module]] -- @@Yes@@
* [[Time Management Tool]] -- @@yes@@
* [[Jmol]] ?
!!Comments:
* Use http://rublev.lly.earlham.edu/~markp/clamp-LAE/
* Manual account creation insists on password with number and no-alphanumeric char. Can this be overridden by LDAP? I sincerely hope so!
;Update {{ts{22/04/10 14:38}}}
: After conversation with Aaron copied over LDAP settings from production moodle server https://moodle.earlham.edu and configured LDAP for clamp-LAE. @@It worked@@. I logged in as 'markp' and created a new account. No password changes needed!
!Course upload Spring 2010
I decided to test the course upload on my sandbox moo-195 on Rublev. Good job. I have php error reporting switched on and it's giving some disconcerting Warnings/Notices. So, running admin/courseupload.php we get:
{{{
Notice: Undefined variable: course in /usr/home/markp/public_html/moo-195/admin/uploadcourse.php on line 944
}}}
When it's run and the following when the file is uploaded:
{{{
Notice: Undefined variable: coursetopics in /usr/home/markp/public_html/moo-195/admin/uploadcourse.php on line 730
print_header() was called more than once - this should not happen. Please check the code for this page closely. 
Note: error() and redirect() are now safe to call after print_header().
* line 2471 of lib/weblib.php: call to debugging()
* line 75 of admin/uploadcourse.php: call to print_header()
* line 257 of admin/uploadcourse.php: call to csverror()
* line 723 of admin/uploadcourse.php: call to validateas()
}}}
The 'Undefined variable: coursetopics' error gets produced for every line processed on the input file.
The relevant section of the php file looks like +++[this]
{{{
    718                 foreach ($line as $key => $value) { // Validate each value
    719                     $cf = $header[$key];
    720                     if (preg_match(TOPIC_FIELD,$cf,$matches)) {
    721                       $coursetopics[$matches[2]] = validateas($value,$matches[1], $lineno, $cf);
    722                     } elseif (preg_match(TEACHER_FIELD,$cf,$matches)) {
    723                       $tmp=validateas($value,$matches[1].$matches[3], $lineno, $cf);
    724                       (isset($tmp)&&($tmp!='')) and
    725                           ($courseteachers[$matches[2]][$matches[3]] = $tmp);
    726                     } else {
    727                         $coursetocreate[$cf] = validateas($value, $cf, $lineno); // Accept value if     727 it passed validation
    728                     }
    729                 }
    730                 $coursetocreate['topics'] = $coursetopics;
}}}
=== I wish I could have some student programming talent to fix things like this.
Finally got the upload working by adding missing users cumulatively.
Then, we get:
<<<
Parsed 208 course(s) from CSV
{{{Notice: Undefined offset: 1 in /usr/home/markp/public_html/moo-195/admin/uploadcourse.php on line 414}}}
(Above error repeated for each course created.)
Created 206 course(s) out of 208
2 course(s) were skipped (duplicate ShortName)
1 new category(ies) were created
You may wish to manually Re-Sort the categories
Re-Sorted courses
ANALYZE Database Tables OK
OPTIMIZE Database Tables OK
Total Execution Time: 5.16 s
<<<
!CLAMP Liberal Art Edition test
I want to test out the 1.9.7 LAE version with my addons. If TinyMCE is operational then this will be sh1t hot.
# get the sauce with svn +++[code]
{{{
/usr/home/markp/clamp-LAE]$ svn co svn+ssh://markp@clamp-it.org/var/svn/moodle/trunk moodleLAE
}}}
=== 
# set up site at http://rublev.lly.earlham.edu/~markp/clamp-LAE
** copy over themes
** install [[ForumNG]]
** upload course backup from [[Testing 2010]] and restore with user (Amy Bryant)
# Install [[Mediabird Study Notes]] +++[code]>
{{{
markp/public_html/clamp-LAE/theme]$ cp -r ~/2010-test-mods/mediabird/theme/standardmediabird .
markp/public_html/clamp-LAE/mod]$ cp -r ~/2010-test-mods/mediabird/mod/studynotes .}}}
}}}
Tables set up correctly
=== 
# apply theme patch
** Failed -- remove!

!To Do
!!!Global Search
In Site Administration : Modules : Blocks : Global Search
do a make pdftotext -- in {{{/usr/ports/graphics/xpdf}}}
default command line : {{{lib/xpdf/linux/pdftotext -enc UTF-8 -eol unix -q}}}
Tried applying patch from [[Bulk user upload force password change when auth=POP3|http://tracker.moodle.org/browse/MDL-21559]]
Window 1 {{{public_html/LAE-199]$ less 20100312_MDL-21559_HEAD_add_edit.patch}}}
Window 2 {{{/LAE-199/admin]$ less -N uploaduser.php.orig}}}
Figure out changes in line numbers and adjust the patch file accordingly.
Line 157 -> line 154
Insert {{{+    $authcache = array(); // authentication cache}}} @ line 157
line 211 -> line 200 {{{foreach ($line as $key => $value) {}}}
!!!{{ts{5/08/10 10:08}}}
<<<
;Rossiani Wijaya added a comment - 05/Aug/10 01:36 PM
:Hi Mark,
:Thank you for testing the issue. The patch was created for 2.0 distribution, therefore it won't suitable for 1.9.9 version.
:Also, 2.0 distribution has been modified tremendously since March and the patch might not valid to be applied successfully.
:I'm going to take a look the issue and create a new patch for this.
:Rosie
----
;Mark Pearson added a comment - 05/Aug/10 10:00 PM
:Thanks. Although the 'fix version' above says 1.9.10 so I figured it may work on 1.9.9.
:I may try backporting to 1.9.9 – right now I'm swamped with user demands (including uploading new users!)
:Cheers
:Mark
<<<
{{ts{31/03/11 17:11}}} Email to Ben Johnson:
<<<
Thanks for meeting with me this morning. It seems that we have the skeleton of what we need.
I have talked with Aaron about testing and he will setup the firewall on my sandox server (rublev) to allow to the open port (1521?) on the database server (paco? roj?) So I need to know the server name (and ip address) and the port number.
I think we need to handle things in the following order:
# Create list of users with spriden ids to load into the new system. (This will have to be run at intervals over the summer as new students are admitted and new faculty come on board). Question for me -- can the new user info update the current record with Spriden Id rather than replace it.
# Create list of courses (you have the SQL to do that already). Remove and teacher names. Upload these.
# Test the database enrollment plugin for courses that we know have Teachers.
<<<
Aaron told me (phone conversation) that we can test this stuff out on Rublev and he'll adjust the firewall rules to allow access to the database server via port 1521 (or whatever it is).

On Moodle test.
The new {{{icgorldi}}} file now ({{ts{4/01/12 12:34}}}) has the spring termcode ''201220''
!!!Before test run
@@EC Spring Semester, 2011-12@@
|Theatre Arts| 34|
|Japanese Lang and Linguistics| 9|
|Philosophy| 4|
|Physics| 12|
|Psychology| 17|
|Religion| 5|
|Sociology/Anthropology| 7|
|Spanish and Hispanic Studies| 12|
|TESOL| |
|Women's Studies| 6|
|Art| 34|
|Biology| 17|
|Chemistry| 12|
|Classical Studies| 5|
|Economics| 5|
|English| 12|
|French & Francophone Studies| 6|
|Geosciences| 4|
|German Language & Literature| 5|
|Hum Dev & Social Relations| 4|
|History| 11|
|Japanese Studies| 4|
|Journalism| 5|
|Mathematics| 11|
|Peace & Global Studies| 4|
|Politics| 9|
|African&AfricanAmericanStudies| 3|
|Education| 3|
|Comp Lang & Linguistics| 2|
|Computer Science| 11|
|Legal Studies| |
|Jewish Studies| |
|Latin American Studies| |
|Business & Non-Profit| 4|
|Athletics| 55|
|Music| 74|
|Off Campus Programs| 20|
|Interdepartmental| 17|
|Language| 1|
|Environmental Studies| 6|
|Chinese Language & Literature| |
|International Studies| 1|
|Undeclared Department| |
|Interpretive Practices| 12|
|Film Studies| |
|Arabic| 5|
|Environmental Science| 1|
|Business&Non-Profit Management| |
|Museum Studies| 1|
|Crosslisted| 54|
!Issues with Database Activity
;Moodle versions:
:1.9.5+, 1.9.7+
; HTML editor:
: ~HTMLArea
;Browsers affected :
: Firefox 3.5 (Win XP), Internet Exploder 8 (Win XP), FireFox 2.0 (Mac)
!!Disappearing text box
To input more than one line of text into a field in a Database Activity you use the Textarea field definition. This allows you to set the width (in columns) and height (in rows) of the text input box desired. When you use a small number such as 2 or 4 for the height in rows the input box is lost completely. 5 rows is the minimum required to display a single line of text. In my naivety I assumed that 1 'row' meant 1 line of text input inside the box. Apparently not.
!!!Effect in different browsers
Textarea field 75 columns, 2 or 4 rows.
* [[Firefox 3.5 (Win XP)|graphics/database_activity_textarea_glitch.png]]<<imagebox>>
* [[Internet Explorer 8 (Win XP)|graphics/database_activity_textarea-IE8.png]]<<imagebox>>
* [[Safari (Mac OSX 11.5)|graphics/database_textarea_safari-1.png]]<<imagebox>>
* [[Firefox 2 (Mac OSX 11.5)|graphics/database_textarea_ff2-mac-1.png]]<<imagebox>>
Only the Safari browser displays as I would expect.
!!Workaround
By trial and error I found that increasing the number of rows to ''7'' in the Textarea field definition allows 2 lines of text to be inserted before scrolling.
@@border:solid 1px black;display:block;padding:1em 2em 2em;background:#ffe;margin:1em;
Copyright (c) 2007-2008, Simon Baird
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name Simon Baird nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@
!! Anomaly
Firefox error warnings

!! theme issues with ForumNG
Parchment, 

email "Patrick Malley" <ptrkmkl@newschoollearning.com>

Themes from [[newschool learning|http://newschoollearning.com/theme/]]:
# Anomaly. --Has not changed since last time.-- Not true +++[Anomaly NB]>
{{ts{21/07/10 16:57}}}
[[29 December 2009 Update Anomaly]] shows that I have screwed around with anomaly. I have established that //~/moo-plugins/themes/ecs_anomaly// is what I want to use and that the updated //pix// from /usr/home/markp/public_html/moo-p97/pix is now in //themes/pix//
I __may__ have to fool around with the settings to prevent moodlecode/pix from overriding the local theme pix. So:
{{{
public_html/LAE-199/theme]$ rm -r anomaly/
moo-plugins/themes]$ cp -r anomaly_ecs ~/public_html/LAE-199/theme/anomaly
moo-plugins/themes]$ cp -r pix ~/public_html/LAE-199/pix
}}}
=== 
# leatherbound
# facebooky
# serenity
# parchment
# autumn
+++[code]
{{{
~/moo-plugins/themes]$ cp -r anomaly_ecs /usr/home/markp/public_html/LAE-199/theme/anomaly
[markp@rublev ~/moo-plugins/themes]$ cp -r leatherbound /usr/home/markp/public_html/LAE-199/theme/0-leatherbound
[markp@rublev ~/moo-plugins/themes]$ cp -r Facebooky /usr/home/markp/public_html/LAE-199/theme/0-facebooky
[markp@rublev ~/moo-plugins/themes]$ cp -r serenity /usr/home/markp/public_html/LAE-199/theme/0-serenity
~/moo-plugins/themes]$ cp -r parchment /usr/home/markp/public_html/LAE-199/theme/0-parchment
[markp@rublev ~/moo-plugins/themes]$ cp -r autumn /usr/home/markp/public_html/LAE-199/theme/0-autumn
}}}
=== 
!! New ones:
# simplicity
# Stealth
# ingeneous
# zebra
+++[code]
{{{
~/moo-plugins/themes]$ cp -r stealth /usr/home/markp/public_html/LAE-199/theme/0-stealth
[markp@rublev ~/moo-plugins/themes]$ cp -r ingenuous /usr/home/markp/public_html/LAE-199/theme/0-ingeneous
 ~/moo-plugins/themes]$ cp -r simplicity /usr/home/markp/public_html/LAE-199/theme/0-simplicity
[markp@rublev ~/moo-plugins/themes]$ cp -r zebra /usr/home/markp/public_html/LAE-199/theme/zebra
}}}
=== 
Also, think about adding the old ecs_standard for backwards compatibility?
/***
|''Name:''|TiddlerNotesPlugin|
|''Description:''|Add notes to tiddlers without modifying the original content|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TiddlerNotesPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|26/10/07|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|

!!Concept:
*The TiddlerNotesPlugin allows you to add notes to tiddlers, without needing to edit the original tiddler. This means that your original content will remain unaltered, and if you update it in the future, you won’t lose your notes. Notes are stored in separate tiddlers, but can be viewed and edited from within the original tiddler.
*For a tiddler titled "~MySlide", the notes are by default saved in a tiddler titled "~MySlide-Notes" and is given a tag of "Notes". The suffix and tags of the notes tiddlers are customizable. You can have one or multiple notes per tiddlers. So it is possible to have for example, teacher's notes and student's notes in the same file.
*Notes can be configured to start off blank, or pre-filled with the contents of the original tiddler.

!!Usage:
*{{{<<notes>>}}} is the simplest usage form.
* additional optional parameters include:
**{{{heading:}}} the heading to use for the notes box
**{{{tag:}}} the tag to be given to the notes tiddler
**{{{suffix:}}} the suffix to be used when naming the notes tiddler
* a full macro call could look like: {{{<<notes heading:"My Notes" tag:"NoteTiddlers" suffix:"Comments">>}}}
* To avoid adding {{{<<notes>>}}} to each tiddler you want notes for, you could add the macro call to the ViewTemplate
** below the line {{{<div class='viewer' macro='view text wikified'></div>}}} add the following line: <br> {{{<div class='viewer' macro='notes'></div>}}}
** Used in combination with the ~HideWhenPlugin or ~PublisherPlugin, you could have notes be shown only for tiddlers with specific tags. The ~PublisherPlugin would allow you for instance to only have the ~TeachersNotes visible to the teacher, and the ~StudentsNotes for the same tiddler visible to the Student.

!!Configuration
*<<option chkPrefillNotes>> Enable to pre-fill notes with the original tiddler's contents

!!Demo:
* [[MySlide]]

***/
// /%
//!BEGIN-PLUGIN-CODE

if (!config.options.chkPrefillNotes)
	config.options.chkPrefillNotes = false;
	
function createTiddlyElement(theParent,theElement,theID,theClass,theText,attribs)
{
	var e = document.createElement(theElement);
	if(theClass != null)
		e.className = theClass;
	if(theID != null)
		e.setAttribute("id",theID);
	if(theText != null)
		e.appendChild(document.createTextNode(theText));
	if(attribs){
		for(var n in attribs){
			e.setAttribute(n,attribs[n]);
		}
	}
	if(theParent != null)
		theParent.appendChild(e);
	return e;
}

function createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey,attribs)
{
	var theButton = document.createElement("a");
	if(theAction) {
		theButton.onclick = theAction;
		theButton.setAttribute("href","javascript:;");
	}
	if(theTooltip)
		theButton.setAttribute("title",theTooltip);
	if(theText)
		theButton.appendChild(document.createTextNode(theText));
	if(theClass)
		theButton.className = theClass;
	else
		theButton.className = "button";
	if(theId)
		theButton.id = theId;
	if(attribs){
		for(var n in attribs){
			e.setAttribute(n,attribs[n]);
		}
	}
	if(theParent)
		theParent.appendChild(theButton);
	if(theAccessKey)
		theButton.setAttribute("accessKey",theAccessKey);
	return theButton;
}

config.macros.notes={
	
	cancelWarning: "Are you sure you want to abandon changes to your notes for '%0'?",
	editLabel: "edit notes",
	editTitle: "double click to edit",
	saveLabel: "save notes",
	saveTitle: "double click to save",
	cancelLabel: "cancel",
	heading: "Notes",
	suffix: "Notes",
	tag: "Notes",
	
	saveNotes: function(ev){
		e = ev? ev : window.event;
		var theTarget = resolveTarget(e);
		if (theTarget.nodeName.toLowerCase() == "textarea")
			return false;
		var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
		story.setDirty(title,false);
		var box = document.getElementById("notesContainer"+title);
		var textarea = document.getElementById("notesTextArea"+title);
		if(textarea.getAttribute("oldText")!=textarea.value && !hasClass(theTarget,"cancelNotesButton")){
			var suffix = box.getAttribute("suffix");
			var t = store.getTiddler(title+"-"+suffix);
			store.saveTiddler(title+"-"+suffix,title+"-"+suffix,textarea.value,config.options.txtUserName,new Date(),t?t.tags:box.getAttribute("tag"),t?t.fields:{});
		}
		story.refreshTiddler(title,1,true);
		autoSaveChanges(true);
		return false;
	},
	
	editNotes: function(box,tiddler){
		removeChildren(box);
		story.setDirty(tiddler,true);
		box.title = this.saveTitle;
		box.ondblclick = this.saveNotes;
		createTiddlyButton(box,this.cancelLabel,this.cancelLabel,this.saveNotes,"cancelNotesButton");
		createTiddlyButton(box,this.saveLabel,this.saveLabel,this.saveNotes,"saveNotesButton");
		wikify("!!"+box.getAttribute("heading")+"\n",box);
		addClass(box,"editor");
		var wrapper1 = createTiddlyElement(null,"fieldset",null,"fieldsetFix");
		var wrapper2 = createTiddlyElement(wrapper1,"div");
		var e = createTiddlyElement(wrapper2,"textarea","notesTextArea"+tiddler);
		var v = store.getValue(tiddler+"-"+box.getAttribute("suffix"),"text");
		if(!v) 
			v = config.options.chkPrefillNotes? store.getValue(tiddler,"text"):'';
		e.value = v;
		e.setAttribute("oldText",v);
		var rows = 10;
		var lines = v.match(/\n/mg);
		var maxLines = Math.max(parseInt(config.options.txtMaxEditRows),5);
		if(lines != null && lines.length > rows)
			rows = lines.length + 5;
		rows = Math.min(rows,maxLines);
		e.setAttribute("rows",rows);
		box.appendChild(wrapper1);
	},
	
	editNotesButtonOnclick: function(e){
		var title = story.findContainingTiddler(this).getAttribute("tiddler");
		var box = document.getElementById("notesContainer"+title);
		config.macros.notes.editNotes(box,title);
		return false;
	},
	
	ondblclick : function(ev){
		e = ev? ev : window.event;
		var theTarget = resolveTarget(e);
		var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
		var box = document.getElementById("notesContainer"+title);
		config.macros.notes.editNotes(box,title);
		e.cancelBubble = true;
		if(e.stopPropagation) e.stopPropagation();
		return false;
	},
	
	handler : function(place,macroName,params,wikifier,paramString,tiddler){
		
		params = paramString.parseParams("anon",null,true,false,false);
		var heading = getParam(params,"heading",this.heading);
		var tag = getParam(params,"tag",this.tag);
		var suffix = getParam(params,"suffix",this.suffix);
		var box = createTiddlyElement(place,"div","notesContainer"+tiddler.title,"TiddlerNotes",null,{"source":tiddler.title,params:paramString,heading:heading,tag:tag,suffix:suffix});
		createTiddlyButton(box,this.editLabel,this.editLabel,this.editNotesButtonOnclick,"editNotesButton");
		wikify("!!"+heading+"\n",box);
		box.title=this.editTitle;
		box.ondblclick = this.ondblclick;
		wikify("<<tiddler [["+tiddler.title+"-"+suffix+"]]>>",box);
	}		
};

Story.prototype.old_notes_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler = function(title,animate,unused){
	if(story.isDirty(title)) {
		if(!confirm(config.macros.notes.cancelWarning.format([title])))
			return false;
	}
	return this.old_notes_closeTiddler.apply(this,arguments);
}

setStylesheet(".TiddlerNotes {\n"+ " background:#eee;\n"+ " border:1px solid #ccc;\n"+ " padding:10px;\n"+ " margin:15px;\n"+ "}\n"+ "\n"+ ".cancelNotesButton,.editNotesButton, .saveNotesButton {\n"+ " float:right;\n"+ " border:1px solid #ccc;\n"+ " padding:2px 5px;\n"+ "}\n"+ "\n"+ ".saveNotesButton{\n"+ " margin-right:0.5em;\n"+ "}\n"+ "\n"+ ".TiddlerNotes.editor textarea{\n"+ " border:1px solid #ccc;\n"+ "}","NotesPluginStyles");
//!END-PLUGIN-CODE
// %/
!Documentation for TiddlyLightBoxPlugin
''Credits:''
This lightbox implementation is a derivative of Bob Denny's [[DC3.LightBox|http://solo.dc3.com/tw/index.html]] library optimized for a ~TiddlyWiki environment, with an emphasis on ease of use. It also uses some code and ideas from [[LightBox Gone Wild|http://particletree.com/features/lightbox-gone-wild/]] and [[Ibox|http://www.ibegin.com/ibox/]]. For a more feature rich and versatile option, you can't beat the ~DC3 library.


''Concept:''
I needed a light weight lightbox implementation for [[TiddlyThemes|http://tiddlythemes.googlepages.com/index.html]] but none of the existing options fit the bill. The ~DC3 library came closest, so I set out to rewrite it. I believe the result is a quite versatile ~TW plugin. Some of the bells and whistles have been removed though since I find them annoying (animations), and there are some features yet to be implemented, as you can read further on this document. Almost the entire library has been rewritten.


''Installation:''
Copy the TiddlyLightBoxPlugin tiddler to your TW, tag it with systemConfig, save and reload your TW file. You will also need to save [[this|indicator.gif]] 'loading' image to the same folder as your TW. Or you can choose one of many [[here|http://www.ajaxload.info/]]. That's it, you are ready to create some lightboxes!


''Usage:''
There are 3 macros provide to facilitate setting up macros.
1. ''{{{<<imagebox>>}}}''
The imagebox macro is designed to display images in the lightbox. The usage is very easy. Simply create a text or image link to an image using standard TW syntax, and follow it with {{{<<imagebox>>}}}.
Eg: {{{[img[cactus-thumb.jpg]cactus.jpg]]}}}

[img[cactus-thumb.jpg][cactus.jpg]]<<imagebox>>

Let's try a text link: {{{[[click me|triad.jpg]]<<imagebox>>}}}

[[click me|triad.jpg]]<<imagebox>>

This macro also accepts some optional parameters in this order:
2. description text
3. width ( as a number, like 500)
4. height (as a number, like 300)
Also, if width is passed as a word, like "bananas", then it is treated as a css class and the container for the image is given the class "bananas".

Let's try one more, with a title and a custom size:
{{{[img[cubicles-thumb.jpg][cubicles.jpg]]<<imagebox 'Office space' 300 300>>}}}

[img[cubicles-thumb.jpg][cubicles.jpg]]<<imagebox 'Office space' 300 300>>

----

2. ''{{{<<divbox>>}}}''
The divbox macro lets you put the html content of any inline div into a lightbox, you just need the id of the div in question. The idea being to create a hidden div using "display:none" and then displaying it on the click of a link/button.
You can create such a div in any tiddler by wrapping it in html tags, but using the MarkupPostBody tiddler might be the better option.

The macro can create the button for you, or you can use an existing element to launch the lightbox. To create a button, pass the label for the button as the first parameter. To use an existing element, pass the first parameter as ' ' and place the macro immediately after the element. Eg: {{{<<tiddlerbox label>> or <<tiddlerbox ''>>}}}

The next parameter is the id of the div to display: {{{<<tiddlerbox label theID>>}}}
These two parameters are a must for the divbox macro. There are also 3 more optional parameters, just like the imagebox macro:
3. description text
4. width ( as a number, like 500) OR className
5. height (as a number, like 300)
As an example, lets display this hidden div which I have written inline:
{{{<html><div id="testDiv" style="display:none;"><div style="text-align:center;"> Lightboxes have become very cliche, but they can still be useful!</div></div></html><<divbox "Click to see it" "testDiv" "This is a test div">>}}}
<html><div id="testDiv" style="display:none;"><div style="text-align:center"><br><br><br><br> Lightboxes have become very cliche, but they can still be useful!</div></div></html><<divbox "Click to see it" "testDiv" "This is a test div">>

----

3.''{{{<<tiddlerbox>>}}}''
This macro lets you put the wikified contents of any tiddler into a lightbox! So you can put your MainMenu and Sidebar into a lightbox for example, and have handy links to bring them up whenever you need them. (like in say the hovering menu provided by HoverMenuPlugin). It's also very useful for when you are working on something and want to refer to some reference material without having to loose your place in your work.
The parameters for this macro are the same as for the divbox macro, except instead of the id for the div, you use the title of the tiddler.
Let's give it a go:
{{{<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>}}}
<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>
or
{{{<<tiddlerbox "menu" "Sidebar" "Thats my sidebar!" 300 500>>}}}
<<tiddlerbox "sidebar" "Sidebar" "Thats my sidebar!" 300 500>>

-----

''CSS Styling:''
The css rules for the lightbox and its contents are in the TiddlyLightBoxStyles folder. You can edit them to your liking, but I recommend not changing the rules for ~lightBoxOverlay and lightboxprogress. But don't worry, if you break anything, just delete the tiddler. It's a shadow tiddler!

I'll post a diagram showing the structure of the lightbox later, to faciliate css styling.

----

''Features comparison with ~DC3Lightbox:''
Missing:
* IE transparency filters
* ability to create own lightbox containers
*call back functions on closing lightbox

Added:
*macros for TW usage
*optimized for TW environment
*ability to display Tiddlers in lightboxes
*preloading of images, to avoid layout problems
*removed need for manually creating styles tiddler and adding html markup.
*fixed bug with regards to selects displaying over the lightbox!

----

''To Do''
* fixed positioning of lightbox so it scrolls with the page!
*possible light weight animation for images
* optional preloading of images
* resizing of images to fit the viewport when larger.
* optional automatic lightboxing of all links to images.
*grabbing description from image alt text.
* improved support for inline html content.

!!Images in a lightbox:
[img[cactus-thumb.jpg][cactus.jpg]]<<imagebox>>

Let's try a text link:

[[click me|triad.jpg]]<<imagebox>>

----
!Html div in a lightbox:

<html><div id="testDiv" style="display:none;"><div style="text-align:center"><br><br><br><br> Lightboxes have become very cliche, but they can still be useful!</div></div></html><<divbox "Click to see it" "testDiv" "This is a test div">>

----
!Tiddlers in a lightbox:

Let's give it a go:

<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>

<<tiddlerbox "sidebar" "Sidebar" "Thats my sidebar!" 300 500>>

----

[[Full Documentation|TiddlyLightBoxDoc]]
[[TiddlyLightBoxPlugin]]
/***
|''Name:''|TiddlyLightBox|
|''Date:''|Jan 1, 2006|
|''Version:''|1.0 beta|
|''Author:''|Saq Imtiaz|
|''Location:''|http://tw.lewcid.org/#TiddlyLightBoxPlugin|
|''Documentation:''|http://tw.lewcid.org/#TiddlyLightBoxDocs|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Based on:''|DC3.LightBox<br>Light Box Gone Wild <br>Ibox|

!!Code
***/
//{{{
config.macros.imagebox ={};
config.macros.imagebox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    var e = place.lastChild;
    e.onclick = function(){TiddlyLightBox.initBox('image',this,params[1],params[2],params[0]);return false;};
}

config.macros.divbox ={};
config.macros.divbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    if (params[0]!=".")
        createTiddlyButton(place,params[0],params[0],function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;});
    else
        {
        var e = place.lastChild;
        e.onclick = function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;};
        }
}

config.macros.tiddlerbox ={}
config.macros.tiddlerbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    config.macros.divbox.handler(place,macroName,[params[0],"tiddler:"+params[1],params[2],params[3],params[4]]);
    return false;
}

store.addNotification("TiddlyLightBoxStyles",refreshStyles);

if (!window.TiddlyLightBox)
    window.TiddlyLightBox = {};
    var loadingImage = "indicator.gif";
    window.TiddlyLightBox =
    {
    _curBox: null, // [sentinel]

    lightBoxHtml : '<div id="lightBoxOverlay" onclick="TiddlyLightBox.hideBox()" style="display:none"></div><div id="lightboxprogress" style="display:none;"><img src=\''+loadingImage+'\' alt=\'loading\' style="width:128px;height:128px;"></div><div class="lightBox" id="lightBox" style="display:none"><div id="lightBoxContent"></div><div id="lightBoxTitle">This is a title</div><div id="lightBoxClose"><a href:"#" onclick="TiddlyLightBox.hideBox();return false;">Click to close</a></div></div>',

    createBoxWrapper : function()
        {
        var wrapper = createTiddlyElement(document.getElementsByTagName("body")[0],"div","tiddlyLightBoxWrapper");
        wrapper.innerHTML = this.lightBoxHtml;
        },

    initBox : function(contentType,url,w,h,text)
        {
        if (this._curBox)
            return;
        this.showProgress();
        this.hideSelects("hidden");
        this.showBg();
        this._curBox = true;
        this.sizeTheBox(contentType,w,h);
        if (contentType == 'image')
            this.showImage(url,text);
        else if (contentType == 'html')
            this.showHtml(url,text);
        return false;
        },
        
    sizeTheBox : function(contentType,w,h)
        {
        var box = document.getElementById("lightBoxContent");
        if (w && isNaN(parseInt(w)))
            {
            addClass(box,w);
            }
        else if (w ||h || contentType == 'html')
            {
            box.style.width = w? w+ "px" : "450px";
            box.style.height = h? h+ "px" : "280px";
            if (contentType=='image')
                setStylesheet("#lightBoxContent img{height:100%;width:100%;}","lightBoxImageSizeHack");
            }
        },

    showProgress : function()
        {
        var progress = document.getElementById("lightboxprogress");
        progress.style.display='';
        this._center(progress);
        },
    
    hideProgress: function()
        {
        var progress = document.getElementById("lightboxprogress");
        progress.style.display='none';
        },

    //this function lifted from Lightbox Gone Wild
    hideSelects: function(visibility)
        {
        var selects = document.getElementsByTagName('select');
        for(i = 0; i < selects.length; i++)
            {
            selects[i].style.visibility = visibility;
            }
        },

    showBg: function()
        {
        var overlay = document.getElementById('lightBoxOverlay');
        if (config.browser.isIE)
            {
            overlay.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
            overlay.style.width = document.documentElement.scrollWidth;
            }
        overlay.style.display = 'block';
        },

    showImage: function (url,text)
        {
        imgPreloader = new Image();
        imgPreloader.onload = function ()
            {
            var lb = document.getElementById("lightBoxContent");
            lb.innerHTML = "<img src="+url+">";
            lb.onclick = function(){TiddlyLightBox.hideBox();return false;};
            TiddlyLightBox.posBox(text);
            };
        imgPreloader.src = url;
        },
        
    showHtml : function(theID,text)
        {
        var lb = document.getElementById("lightBoxContent");
        if (theID.indexOf("tiddler:")==-1)
             lb.innerHTML = document.getElementById(theID).innerHTML;
        else
            { 
             wikify(store.getTiddlerText(theID.replace("tiddler:","")),lb);
             lb.className='tiddler';
            }
        lb.style.overflow = "auto";
        this.posBox(text);
        },

    posBox: function(text)
       {
       this.setTitle(text);
       this.hideProgress();
       var lb = document.getElementById("lightBox");
       lb.style.display = "";
       lb.style.visibilty = "hidden";
       lb.style.position = "absolute";
       this._center(lb);
       if(!TiddlyLightBox._curBox) return;
       lb.style.visibility = "visible";
       lb.style.display = "block";
       },

     setTitle: function(text)
        {
        document.getElementById("lightBoxTitle").innerHTML=  (text==undefined)? '': text;
        },

    _center: function(lb)
       {
       var lbSize = new TiddlyLightBox.getElementSize(lb);
       lb.style.left = (Math.round(findWindowWidth()/2) - (lbSize.width /2) + findScrollX())+'px';
       lb.style.top = (Math.round(findWindowHeight()/2) - (lbSize.height /2) + findScrollY())+'px';
       },

    //this function lifted from Ibox
    getElementSize : function(elem)
       {
       this.width = elem.offsetWidth || elem.style.pixelWidth;
       this.height = elem.offsetHeight || elem.style.pixelHeight;
       },

     hideBox: function()
         {
         if(!this._curBox)
             return;
         document.getElementById("tiddlyLightBoxWrapper").innerHTML= this.lightBoxHtml;
         setStylesheet("","lightBoxImageSizeHack");
         this._curBox = null;
         return false;
         }
}

TiddlyLightBox.createBoxWrapper();

Story.prototype.findContainingTiddler = function(e)
{
    while(e && (!hasClass(e,"tiddler") || !e.getAttribute("tiddler")))
        e = e.parentNode;
    return(e);
}

config.shadowTiddlers.TiddlyLightBoxStyles="/*{{{*/\n#lightBoxOverlay {\n position:absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 90; \n background-color: #000;\n -moz-opacity: 0.75;\n opacity: .75;\n filter: alpha(opacity=75);\n}\n#lightBoxOverlay[id]{ \n position: fixed;\n}\n\n#lightboxprogress { \n margin:0;padding:0;\n position: absolute;\n z-index:95;\n}\n\ndiv.lightBox {\n background: #fff;\n color: #fff;\n border: 4px solid #525252;\npadding:20px 20px 25px 20px; position:absolute; z-index:99;\n}\n\n#lightBoxClose {text-align:right; color:#000; font-size:1.0em; position:absolute; bottom:6px; right:20px;}\n#lightBoxClose a{color:#666; border-bottom:1px solid #666;cursor:pointer;}\n#lightBoxClose a:hover {color:#111; border-bottom:1px solid #666; cursor:pointer; background:transparent;}\n\n#lightBoxContent {border:1px solid #525252;color:#000; background:#fff;}\n#lightBox .tiddler {background:#fff;}\n\n#lightBoxContent img {border:0;margin:0;padding:0;display:block;cursor:pointer;}\n\n#lightBoxTitle {padding:0px; font-weight:bold; position:absolute; left:20px;bottom:6px; font-size:1.1em; color:#000;}\n\n/*}}}*/";
//}}}
TiddlyWiki is a personal [[wiki|Wiki]] that runs in your web browswer. It is created and maintained by JeremyRuston. Try these links for more information:
*http://www.tiddlywiki.com/
*http://www.tiddlywiki.org/
*http://en.wikipedia.org/wiki/Tiddlywiki]]
!Inline Formatting
|!Option|!Syntax|!Output|
|bold font|{{{''bold''}}}|''bold''|
|italic type|{{{//italic//}}}|//italic//|
|underlined text|{{{__underlined__}}}|__underlined__|
|strikethrough text|{{{--strikethrough--}}}|--strikethrough--|
|superscript text|{{{^^super^^script}}}|^^super^^script|
|subscript text|{{{~~sub~~script}}}|~~sub~~script|
|highlighted text|{{{@@highlighted@@}}}|@@highlighted@@|
|preformatted text|<html><code>{{{preformatted}}}</code></html>|{{{preformatted}}}|
!Block Elements
!!Headings
{{{
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
}}}
<<<
!Heading 1
!!Heading 2
!!!Heading 3
!!!!Heading 4
!!!!!Heading 5
<<<
!!Lists
{{{
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
}}}
<<<
* unordered list, level 1
** unordered list, level 2
*** unordered list, level 3

# ordered list, level 1
## ordered list, level 2
### unordered list, level 3

; definition list, term
: definition list, description
<<<
!!Blockquotes
{{{
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

<<<
blockquote
<<<
}}}
<<<
> blockquote, level 1
>> blockquote, level 2
>>> blockquote, level 3

> blockquote
<<<
!!Preformatted Text
<html><pre>
{{{
preformatted (e.g. code)
}}}
</pre></html>
<<<
{{{
preformatted (e.g. code)
}}}
<<<
!!Tables
{{{
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
}}}
''Annotation:''
* The {{{>}}} marker creates a "colspan", causing the current cell to merge with the one to the right.
* The {{{~}}} marker creates a "rowspan", causing the current cell to merge with the one above.
<<<
|CssClass|k
|!heading column 1|!heading column 2|
|row 1, column 1|row 1, column 2|
|row 2, column 1|row 2, column 2|
|>|COLSPAN|
|ROWSPAN| … |
|~| … |
|CssProperty:value;…| … |
|caption|c
<<<
!!Images /% TODO %/
cf. [[TiddlyWiki.com|http://www.tiddlywiki.com/#EmbeddedImages]]
!Hyperlinks
* [[WikiWords|WikiWord]] are automatically transformed to hyperlinks to the respective tiddler
** the automatic transformation can be suppressed by preceding the respective WikiWord with a tilde ({{{~}}}): {{{~WikiWord}}}
* [[PrettyLinks]] are enclosed in square brackets and contain the desired tiddler name: {{{[[tiddler name]]}}}
** optionally, a custom title or description can be added, separated by a pipe character ({{{|}}}): {{{[[title|target]]}}}<br>'''N.B.:''' In this case, the target can also be any website (i.e. URL).
!Custom Styling
* {{{@@CssProperty:value;CssProperty:value;…@@}}}<br>''N.B.:'' CSS color definitions should use lowercase letters to prevent the inadvertent creation of WikiWords.
* <html><code>{{customCssClass{…}}}</code></html>
* raw HTML can be inserted by enclosing the respective code in HTML tags: {{{<html> … </html>}}}
!Special Markers
* {{{<br>}}} forces a manual line break
* {{{----}}} creates a horizontal ruler
* [[HTML entities|http://www.tiddlywiki.com/#HtmlEntities]]
* {{{<<macroName>>}}} calls the respective [[macro|Macros]]
* To hide text within a tiddler so that it is not displayed, it can be wrapped in {{{/%}}} and {{{%/}}}.<br/>This can be a useful trick for hiding drafts or annotating complex markup.
* To prevent wiki markup from taking effect for a particular section, that section can be enclosed in three double quotes: e.g. {{{"""WikiWord"""}}}.
!Tiddly Wiki: A Personal Wiki for Organizing Your Digital Life
!!What is ~TiddlyWiki
Basically it's a web site as a wiki in a single file which you can save virtually anywhere. It's powered by Javascript so all you need is a web browser (works best with ~FireFox); no wiki server is required. And since the wiki style markup gets rendered into HTML you don't need Dreamweaver to create a web page. Users create chunks of [[microcontent|http://en.wikipedia.org/wiki/Microcontent]] called @@tiddlers@@; changes are saved from within the ~TiddlyWiki (and ''not'' from the browser) and backup files can be automatically created. Tiddlers can link to each other and contain each other and can be tagged.
!!!like a standard wiki
* ~TiddlyWiki uses markup to format text.
!!!unlike a standard wiki
with ~TiddlyWiki :
* content in small chunks ('tiddlers') rather than whole pages
* each tiddler can be tagged with arbitrary tags
* automatic timeline records date/time of tiddler creation/modification
* total control -- all customization within single file.
* open as File to edit rather than a URL.
In short, ~TiddlyWiki @@edits and displays@@ in a single place.
Take a look at a ~TiddlyWiki : [[Instructional Tech Innovations|http://www.earlham.edu/markp/ITI_wiki]]
Major features:
** tiddlers
** timeline
** search
** tagging
<<tiddler [[Working with TiddlyWiki]]>>

!Progress Bar
Michael de Raadt's [[Progress Bar Moodle Block|http://www.sci.usq.edu.au/staff/deraadt/progressBar.html]] looks very interesting. To quote his site:
<<<
[>img[http://www.sci.usq.edu.au/staff/deraadt/research/progressBar/images/ProgressBar.gif]]
*  The Progress Bar is a time-management tool for students.
* It visually shows what activities/resources a student is supposed to interact with in a course.
* It is colour coded so students can quickly see what they have and have not completed/viewed.
* The teacher selects which pre-existing activities/resources are to be included in the Progress Bar and when they should be completed/viewed.
<<<

From the [[demo video|http://www.sci.usq.edu.au/staff/deraadt/research/progressBar/Demo/Demo.html]] I learned that @@students "felt compelled to make everything green"@@. How pedagogically powerful is that! The other powerful aspect is that since you can attach an 'expected by' date and time //to a resource// you can ensure that students know they have to read things by a certain date.

<<notes>>

Install {{ts{29/04/10 15:27}}} {{{/2010-test-mods/contrib/plugins/blocks]$ cp -r progress ~/public_html/clamp-LAE/blocks}}}
Tables set up correctly
* Install this for next version of Moodle!
download {{ts{27/04/10 14:37}}}
{{{~/2010-test-mods]$ cvs -d:pserver:anonymous@us2.cvs.moodle.org:/cvsroot/moodle co contrib/plugins/blocks/progress/}}}

Email from Kevin Miles:
<<<
Is there a way to post an exam on Moodle so that it appears at the time and day of an "exam day" (say, a Wednesday from 10-12) and can be posted so that Moodle records whether or not it was turned in on time the way it already lets me know if a student turned in a paper on time?
<<<
This feature has been requested for 4 years! See [[allow resources-activities to be hidden but available-active|http://tracker.moodle.org/browse/MDL-4782]] 
!New look for editor button bar
Simplified 2 row button bar to mirror ~HTMLArea functions:

[img[graphics/tinyMCE_simplified_buttonbar.png]]

Default ~HTMLArea appearance:

[img[graphics/html-area_default_buttons.png]]

Old look with three rows of buttons:

[img[graphics/tinyMCE_current_buttonbar.png]]

All the editor functionality seems to work -- [[screenshot|graphics/tinyMCE_functionality.png]]<<imagebox>>

+++[The code]>
{{{
    theme_advanced_buttons1: 
    "fontselect,fontsizeselect,formatselect,|,bold,italic,|,selectall,cut,copy,paste,pasteword,spellchecker,|,undo,redo",
    theme_advanced_buttons2:
"justifyleft,justifycenter,justifyright,|,bullist,numlist,outdent,indent,|,forecolor,backcolor,|,hr,link,unlink,|,image,table,|,code,fullscreen",
    theme_advanced_buttons3: "",

}}}
=== in {{{lib/editor/tinymce.js.php}}} that does the trick

<<notes>>
emailed Aaron moodle/lib/editor/tinymce.js.php. He installed it 08/09/2010
{{{chemix-12/lib/editor]$ vim tinymce.js.php}}}
Changes:
{{{
theme_advanced_buttons1:\"fontselect,fontsizeselect,formatselect\",
theme_advanced_buttons1_add: \"|,bold,italic,strikethrough,|,selectall,cut,pastetext,pasteword,spellchecker,|,undo,redo\",
theme_advanced_buttons2: \"justifyleft,justifycenter,justifyright,|,bullist,numlist,outdent,indent,|\",
theme_advanced_buttons2_add: \",forecolor,backcolor,|,hr,link,unlink,|,image,table,|,code,fullscreen\",
theme_advanced_buttons3: \"\",
}}}
!!Notes
the ''\'' is now used to 'quote' the ''"''
I found that missing off the comma at the end of :
>{{{theme_advanced_buttons2: \"justifyleft,justifycenter,justifyright,|,bullist,numlist,outdent,indent,|\"}}}@@'' , ''@@
caused the whole 3 lines of the button bar to disappear!
# [[Remove Remove ^M characters at end of lines|http://www.tech-recipes.com/rx/150/remove-m-characters-at-end-of-lines-in-vi/]] in the tinymce.js file +++[here's how]>
To remove the ^M characters at the end of all lines in vi, use:
{{{
:%s/^V^M//g
}}}
The ^v is a CONTROL-V character and ^m is a CONTROL-M. When you type this, it will look like this:
{{{
:%s/^M//g
}}}
In UNIX, you can escape a control character by preceeding it with a CONTROL-V. The :%s is a basic search and replace command in vi. It tells vi to replace the regular expression between the first and second slashes (^M) with the text between the second and third slashes (nothing in this case). The g at the end directs vi to search and replace globally (all occurrences).
=== 
# Email to Bob Puffer re +++[style selection ]>
In the TinyMCE editor, when you use the 'Create a link' button you have the option to set a style class. This is a pull-down menu and I'm not sure how it is generated. It occurs to me (rather late in the day I must confess) that it would be useful to have this as a general option from the editor. That is, highlight a piece of text and then a pulldown menu called 'class' (or something similar) would set a span element with the style class as an attribute. The classes could be added to the theme used.

The reason that this might be rather useful is that faculty often use colours to indicate important actions for the student -- readings, due dates, assignments etc are coloured differently. Yes, you can set these as explicit colors for each element, but choosing a style class from a pulldown would be a lot easier and more consistent. Is this feasible? I don't think it's something to roll out right now, but I may take a look over this semester to see how certain style classes might be picked up by the editor and displayed as a pulldown menu.
=== 
# test out [[new TinyMCE edit window configuration|http://redmine.clamp-it.org/boards/4/topics/show/539]]

* Run cron system to make sure it works!
* Time LMB import -- hope it's faster than 365 secs!
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.1.0 ($Rev: 4907 $)|
|Date:|$Date: 2008-05-13 03:15:46 +1000 (Tue, 13 May 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
* TouchMod flag - if non empty then touch the tiddlers mod date. Note, can set config.toggleTagAlwaysTouchModDate to always touch mod date
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{

if (config.toggleTagAlwaysTouchModDate == undefined) config.toggleTagAlwaysTouchModDate = false;

merge(config.macros,{

	toggleTag: {

		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tiddlerTitle = tiddler ? tiddler.title : '';
			var tag   = (params[0] && params[0] != '.') ? params[0] : "checked";
			var title = (params[1] && params[1] != '.') ? params[1] : tiddlerTitle;
			var defaultLabel = (title == tiddlerTitle ? this.shortLabel : this.longLabel);
			var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
			var touchMod = (params[3] && params[3] != '.') ? params[3] : "";
			label = (label == '-' ? '' : label); // dash means no label
			var theTiddler = (title == tiddlerTitle ? tiddler : store.getTiddler(title));
			var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
				if (!store.tiddlerExists(title)) {
					if (config.macros.toggleTag.createIfRequired) {
						var content = store.getTiddlerText(title); // just in case it's a shadow
						store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
					}
					else 
						return false;
				}
				if ((touchMod != "" || config.toggleTagAlwaysTouchModDate) && theTiddler)
						theTiddler.modified = new Date();
				store.setTiddlerTag(title,this.checked,tag);
				return true;
			});
		}
	}
});

//}}}

My friend ATW just introduced me to a new course format which is an improvement on Accordion (which I could never get to work) called Topcoll. 
* download from [[modules and plugins|http://moodle.org/mod/data/view.php?rid=2307&page=188]]
* discussion [[Collapsible Topic and Themes|http://moodle.org/mod/forum/discuss.php?d=148695]]
* Tracker [[Labels are not displayed when editing is turned off|http://tracker.moodle.org/browse/CONTRIB-2111]]. This is ''not'' a bug -- it's a feature
!!Install
Readme :
<<<
1. Copy 'topcoll' to /course/formats/.
2. If using a Unix based system, chmod 755 on config.php - I have not tested this but have been told that it needs to be done.
3. If desired, edit the colours of the topics_collapsed.css - which contains instructions on how to have per theme colours.
4. To change the arrow graphic you need to replace arrow_up.png and arrow_down.png.  Reuse the graphics
   if you want.  Created in Paint.Net.
<<<
Do it :
{{{
~/moo-plugins/course_format]$ cp -r topcoll ~/public_html/LAE-199/course/format
~/public_html/LAE-199/course/format/topcoll]$ chmod 755 config.php
}}}
* Change +++[default blocks]>
{{{
// The default blocks layout for this course format:
    $format['defaultblocks'] = 'participants,activity_modules,search_forums,'.
                               'admin,course_list:news_items,calendar_upcoming,'.
                               'recent_activity';
}}}
=== to match my system wide default. These blocks don't seem to be enforced. @@good@@
* +++[Customise to match theme]>
{{{
/* For setting unique theme based toggle colours, move the following 'tr.cps', 'tr.cps td a' and
   'tr.cps td a:hover' definitions from here and into all your themes, then customise.*/
/* Toggle row. */
tr.cps {
        background-color: #e2e2f2;
        color: #000000; /* 'Topic x' text colour */
}

/* Toggle text */
tr.cps td a {
        text-decoration: none;
        color: #000000;
}

/* -- What happens when a toggle is hovered over -- */
tr.cps td a:hover {
        background-color: #eeeeff;
}
}}}
=== See [[Anomaly + topcoll]]
* +++[Get rid of the "- Toggle" text:]>
In [[this discussion|http://moodle.org/mod/forum/discuss.php?d=148695]] Gareth Bernard writes:
<<<
To remove the '- Toggle' edit format.php line 238 to be:
{{{ echo '<td colspan="2"><a id="sectionatag-'.$section.'" href="#" onclick="toggle_topic(this,'.$section.'); return false;"><span>'.html_to_text($thissection->summary).'</span></a></td><td class="cps_centre">'.$topictext.'<br />'.$currenttext.$section.'</td>';}}}
<<<
In other words replace:
>{{{<span>'.html_to_text($thissection->summary).'</span> - '.$toggletext.'</a></td>}}}
with :
>{{{<span>'.html_to_text($thissection->summary).'</span></a></td>}}} 
by removing :
{{{ - '.$toggletext.'}}}
=== And +++[apply]>
{{{~/moo-plugins/course_format/topcoll]$ cp format.php ~/public_html/LAE-199/course/format/topcoll/format.php}}}
=== 

Revisited the Collapsed Topics course format.
I noticed that if the user had not edited the summary then the 'Toggle' thing was still there:
[img[graphics/collapsed-topics-prompts.png]]

In {{{topcoll/format.php}}} I found:
{{{
 $toggletext = get_string('topcolltoggle','format_topcoll'); // This is defined in lang/en_utf8 of the formats installation directory - basically, the word 'Toggle'.
}}}
So rather than faff about with editting the format.php why not just change the string in {{{lang/en_utf8/format_topcoll.php}}}?
How about 'Edit summary to change' ? This is the result:

[img[graphics/collapsed-topics-prompts-mod.png]]

Now, after you 'Edit the summary' the prompt disappears. Cool eh?
Modified files at {{{~/moo-plugins/course_format/topcoll}}} and {{{public_html/chemix-12/course_format/topcoll}}}
!!Changes to CSS
Changes to {{{topcoll/topics_collapsed.css}}}
{{{
/* -- The topic summary text -- */
tr.cps td span {
        font-size: 1.2em;
        font-style: bold;
        text-align: left;
}

/* -- For when no summary is entered */
tr.cps td a.cps_nosumm {
   text-align: center;
   font-style: italic;
}
}}}
But {{{font-style: bold;}}} is not applied. Result is not bad:

[img[graphics/course-format-topcoll-css.png]]

!!Topicstree Course Format

[img[http://moodle.org/file.php/1/moddata/data/13/48/1761/topicstree.png]]

<<<
This course format is one "clone" of the standard "topics" format. Its main (unique) difference is that, following the indentation in activities performed in edit mode, it displays the course in a tree way.

Specially well integrated with Moodle "standardXXX" themes, see README.txt for some customization possibilities.

Finally, note that the tree display is only available in non-edit mode. Edit mode (teachers) will display the course in standard topics format, in order to play with indentation and so on. No 100% intuitive, but it's beyond the objectives of the format.
<<<
* [[modules and plugins page|http://moodle.org/mod/data/view.php?d=13&rid=1761]]
@@NEW@@ (ish) {{ts{29/09/10 11:39}}}
I've been thinking about how to best keep track of problems-solutions, issues that arise, workarounds, etc. [[Here's a great approach|http://moodle.org/mod/data/view.php?d=13&rid=1124&filter=1]]:
!!Tracker Activity Module

[img[http://moodle.org/file.php/1/moddata/data/13/48/1124/buglist.jpg]]

<<<
The Tracker module provides a light but full-featured issue and task tracker, a ticketing system if you will, in Moodle. It is an activity module which can be used to operate a helpdesk, as a support and coordination tool for Moodle administration, as a task and project management tool within courses, as a bug tracking tool, and so forth.

It allows configuring customized issue recollection records and can cascade across the Moodle Network or to another tracker  instance for multilevel helpdesk constitution.
<<<
* [[this discussion|http://moodle.org/mod/forum/discuss.php?d=117609]]
* [[Download for 1.9|http://download.moodle.org/plugins19/mod/tracker.zip]]
Features from the +++[Readme file]>
It provides a complete bug tracker activity with following features :
* Customizable bug form submission
* Commentable issue records
* Bug assignation management
* Rich bug listing using flexible table
* Internet multicriteria search engine
* Search query personal memo
* Watch management
* Notification service (parametric)
* Full backup/restore implementation
=== 
There seems to be [[no documentation online|http://docs.moodle.org/en/Tracker_Module]] so here's an opportunity
* I found [[Valery Fremaux support site|http://www.valeisti.fr/course/view.php?id=18]] and registered my interest

<<notes heading:"Implementation Notes" suffix:"implement">>
* Downloaded from above link {{ts{29/09/10 11:56}}} and copied into place.
* tables set up correctly
* create a course in which to test this out
The initial setup is simple -- the administrator has to create a form using Administration : Manage elements. This is filled in etc. There doesn't seem to be a huge amount of documentation for how this works .........

BUT this is very flexible and we should give a lot of thought into how to set this up.
Links in to the Moodle moaning sessions .........
----
{{ts{29/09/10 13:53}}}
Downloaded updated version {{{tracker_R3_1_05_2009.zip}}} and copied over the code.
Error msge : {{{Version mismatch: tracker can't downgrade 2010082101 -> 2009042503 !}}} and blank page...
Go to Site Admin : modules : activities : Manage activities & delete Tracker. This deletes the database entries.
Now go back to Notifications to reset the tables. Still a blank display!
Got an update from [[Tracker doesn't work in Moodle 1.9.9+ (Build: 20100714)|http://tracker.moodle.org/browse/CONTRIB-2231]] but still blank page.
@@wrong@@ -- this was not the latest code. Revert to the previous! Done this. Still problematic.
----
{{ts{4/10/10 11:28}}}
{{{~/moo-plugins/tracker_1.9/}}} is the canonical code
Do {{{moo-2011t/mod]$ diff -qr tracker/ ~/moo-plugins/tracker_1.9/}}} and there are different files in mod/tracker. So:
# Backup the database : {{{$ mysqldump -u moodlebackup -p -C -Q -e moo2011t >moo2011t-db_pre-tracker.sql}}}
# Remove mod/tracker/* and delete the module database entries with Site Admin: Modules : Activities : Manage activities -- delete tracker
# Now copy correct code over again {{{~/moo-plugins]$ cp -r tracker_1.9 ~/public_html/moo-2011t/mod/tracker}}}
# And go to the Site Admin : Notifications page to rebuild the database.
# test create a Tracker activity and all is hunky dory!
You should get a handle on the capabilities feature of moodle -- it's very powerful. For example, you can allow students to upload photos /images into a folder in the Files area by adjusting the permissions.
Note the terminology:
;Role
:student, teacher, etc etc. A 'role' is merely a set of permissions
;Permission
:permission to do something on the moodle system. Set using the 'Permissions' tab
;capability
:these are the moodle functions for which permissions can be set.
;context
:what is the environment in which the permissions operate? Is it a course, a category, the whole site? Sometimes the context can be as fine grained as an individual assignment.
''{{ts{19/07/10 15:55}}}''
[[2010 Modules and blocks : modules]] showed that the attendance in the moodle plugins page was the newest.
Just for a giggle I did a {{{cvs update -dP}}} in {{{~/moo-plugins/contrib/plugins/mod/attforblock }}} and then:
{{{~/moo-plugins/attendance/July2010]$ diff -qr mod/attforblock/ ~/moo-plugins/contrib/plugins/mod/attforblock | grep -v CVS}}}
To see the differences in files minus the CVS files. +++[output]>
{{{
Only in mod/attforblock/: CHANGES
Files mod/attforblock/README.txt and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/README.txt differ
Files mod/attforblock/RELEASES.txt and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/RELEASES.txt differ
Files mod/attforblock/add_form.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/add_form.php differ
Files mod/attforblock/attendances.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/attendances.php differ
Files mod/attforblock/backuplib.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/backuplib.php differ
Files mod/attforblock/db/upgrade.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/db/upgrade.php differ
Files mod/attforblock/duration_form.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/duration_form.php differ
Files mod/attforblock/export.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/export.php differ
Files mod/attforblock/export_form.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/export_form.php differ
Files mod/attforblock/index.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/index.php differ
Only in mod/attforblock/lang: cs_utf8
Files mod/attforblock/lang/de/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/de/attforblock.php differ
Files mod/attforblock/lang/en_us_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/en_us_utf8/attforblock.php differ
Files mod/attforblock/lang/en_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/en_utf8/attforblock.php differ
Only in mod/attforblock/lang/en_utf8/help/attforblock: hiddensessions.html
Files mod/attforblock/lang/es_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/es_utf8/attforblock.php differ
Files mod/attforblock/lang/eu_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/eu_utf8/attforblock.php differ
Files mod/attforblock/lang/fr_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/fr_utf8/attforblock.php differ
Only in mod/attforblock/lang: hu_utf8
Files mod/attforblock/lang/it/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/it/attforblock.php differ
Files mod/attforblock/lang/ja_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/attforblock.php differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/createmultiplesessions.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/createmultiplesessions.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/createonesession.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/createonesession.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/defaultstatuses.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/defaultstatuses.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/display.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/display.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/export.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/export.html differ
Only in mod/attforblock/lang/ja_utf8/help/attforblock: hiddensessions.html
Files mod/attforblock/lang/ja_utf8/help/attforblock/myvariables.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/myvariables.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/report.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/report.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/sessions.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/sessions.html differ
Files mod/attforblock/lang/ja_utf8/help/attforblock/studentview.html and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ja_utf8/help/attforblock/studentview.html differ
Files mod/attforblock/lang/ru_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/ru_utf8/attforblock.php differ
Files mod/attforblock/lang/sk_utf8/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/sk_utf8/attforblock.php differ
Files mod/attforblock/lang/sv/attforblock.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lang/sv/attforblock.php differ
Files mod/attforblock/lib.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/lib.php differ
Files mod/attforblock/locallib.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/locallib.php differ
Files mod/attforblock/manage.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/manage.php differ
Files mod/attforblock/report.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/report.php differ
Files mod/attforblock/restorelib.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/restorelib.php differ
Files mod/attforblock/sessions.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/sessions.php differ
Files mod/attforblock/update_form.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/update_form.php differ
Files mod/attforblock/version.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/version.php differ
Files mod/attforblock/view.php and /home/markp/moo-plugins/contrib/plugins/mod/attforblock/view.php differ
}}}
=== 
The file RELEASES.txt that I just downloaded has the extra lines:
{{{
2.1.0 - 28 feb 2009 - Dmitry Pupinin [moodle.org member]
+ hidden sessions displayed
* format of backup changed
* bug fixes
}}}
This very strange because it implies that the CVS version is way out of date. Anyhow use : ''~/moo-plugins/attendance/July2010'' for production
Talking with Wes we've come up with a better strategy:
# Create list of courses with Fullname, shortname and idnumber (CRN) +++[database search]>
{{{
SELECT `fullname` , `shortname` , `idnumber`
FROM `mdl_course`
WHERE `idnumber` LIKE '%201210%'
LIMIT 0 , 30
}}}
Eg
|!Fullname|!shortname|!idnumber|
|~PHIL250-0:201210 — CP:Modern Philosophy| ~PHIL250-0:201210 | 10294.201210|
=== 
# Edit the //current courses// in {{{Fall 2011}}} Category ''before'' importing with LMB. The LMB import should not either overwrite or create duplicates but merely do the enrollments.
# Move courses from Fall 2011 to appropriate new categories
# Test with moodletest
{{ts{9/08/11 17:08}}}
Test quite successful on Moodletest
Issues with :
* some courses not getting any student enrollments. Difficult to know whether it's because there are no students enrolled or something has gone wrong.
* Need to include crosslisted courses in list:
{{{
SELECT `fullname` , `shortname` , `idnumber`
FROM `mdl_course`
WHERE `idnumber` LIKE 'XLS%'
}}}
Now merge this info with list of course names/crns.
Run query again, but this time:
{{{
SELECT `fullname` , `shortname` , `idnumber`
FROM `mdl_course`
WHERE `idnumber` LIKE '%201210'
LIMIT 0 , 30
}}}
Showing rows 0 - 29 (807 total, Query took 0.0066 sec)
This query seems to extract the Crosslisted courses as well.
''{{ts{19/07/10 15:57}}}'' Lots of new stuff from CVS here {{{~/moo-plugins/contrib/plugins/mod/feedback]$ cvs update -dP}}} +++[output]>
{{{
cvs update: Updating .
U analysis.php
U lib.php
U show_entries.php
U version.php
cvs update: Updating db
cvs update: Updating item
cvs update: Updating item/captcha
cvs update: Updating item/captcha/font
cvs update: Updating item/check
cvs update: Updating item/dropdown
cvs update: Updating item/dropdownrated
cvs update: Updating item/info
cvs update: Updating item/label
cvs update: Updating item/multichoice
cvs update: Updating item/multichoicerated
cvs update: Updating item/numeric
cvs update: Updating item/picture
cvs update: Updating item/picture/library
cvs update: Updating item/radio
cvs update: Updating item/radiorated
cvs update: Updating item/textarea
cvs update: Updating item/textfield
cvs update: Updating lang
cvs update: Updating lang/cs
cvs update: Updating lang/cs/help
cvs update: Updating lang/cs/help/feedback
cvs update: Updating lang/cs_utf8
cvs update: Updating lang/cs_utf8/help
cvs update: Updating lang/cs_utf8/help/feedback
cvs update: Updating lang/de
cvs update: Updating lang/de/help
cvs update: Updating lang/de/help/feedback
cvs update: Updating lang/de_utf8
cvs update: Updating lang/de_utf8/help
cvs update: Updating lang/de_utf8/help/feedback
cvs update: Updating lang/en
cvs update: Updating lang/en/help
cvs update: Updating lang/en/help/feedback
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/feedback
cvs update: Updating lang/es
cvs update: Updating lang/es_utf8
cvs update: Updating lang/es_utf8/help
cvs update: Updating lang/es_utf8/help/feedback
cvs update: Updating lang/eu
cvs update: Updating lang/eu_utf8
cvs update: Updating lang/fi
cvs update: Updating lang/fi/help
cvs update: Updating lang/fi/help/feedback
cvs update: Updating lang/fi_utf8
cvs update: Updating lang/fi_utf8/help
cvs update: Updating lang/fi_utf8/help/feedback
cvs update: Updating lang/fr
cvs update: Updating lang/fr/help
cvs update: Updating lang/fr/help/feedback
cvs update: Updating lang/fr_utf8
cvs update: Updating lang/fr_utf8/help
cvs update: Updating lang/fr_utf8/help/feedback
cvs update: Updating lang/it
cvs update: Updating lang/it/help
cvs update: Updating lang/it/help/feedback
cvs update: Updating lang/it_utf8
cvs update: Updating lang/it_utf8/help
cvs update: Updating lang/it_utf8/help/feedback
cvs update: Updating lang/ja_utf8
cvs update: Updating lang/ja_utf8/help
cvs update: Updating lang/ja_utf8/help/feedback
cvs update: Updating lang/nl
cvs update: Updating lang/nl/help
cvs update: Updating lang/nl/help/feedback
cvs update: Updating lang/nl_utf8
cvs update: Updating lang/nl_utf8/help
cvs update: Updating lang/nl_utf8/help/feedback
cvs update: Updating lang/pl_utf8
cvs update: Updating lang/pt_br_utf8
cvs update: Updating lang/pt_br_utf8/help
cvs update: Updating lang/pt_br_utf8/help/feedback
cvs update: Updating lang/sk
cvs update: Updating lang/sk/help
cvs update: Updating lang/sk/help/feedback
cvs update: Updating lang/sk_utf8
cvs update: Updating lang/sk_utf8/help
cvs update: Updating lang/sk_utf8/help/feedback
cvs update: Updating lang/sv
cvs update: Updating lang/sv/help
cvs update: Updating lang/sv/help/feedback
cvs update: Updating lang/sv_utf8
cvs update: Updating lang/sv_utf8/help
cvs update: Updating lang/sv_utf8/help/feedback
cvs update: Updating pics
}}}
=== 
version {{{<?php // $Id: version.php,v 1.18.2.28 2010/04/29 16:29:11 agrabs Exp $}}}
''{{ts{19/07/10 15:57}}}''
Lots of changes here. {{{~/2010-test-mods/contrib/plugins/mod/forumng]$ cvs update -dP}}} +++[output]>
{{{
cvs update: Updating .
U addattachment.php
U advancedsearch.php
U backuplib.php
U deleteattachment.php
U deletepost.php
U discuss.php
U editpost.php
U editpost_form.php
U expandpost.php
U flagpost.php
U forum.php
U forum_cron.php
U forum_discussion.php
U forum_draft.php
U forum_post.php
U forum_utils.php
U forumng.js
U history.php
U index.php
U lib.php
U missingfolders.php
U mod_form.php
U rate.php
U rebuildsearchindex.php
U restorelib.php
U search.php
U settings.php
U styles.php
U subscribe.php
U version.php
U view.php
cvs update: Updating db
U db/install.xml
U db/upgrade.php
cvs update: Updating feature
cvs update: Updating feature/copy
cvs update: Updating feature/delete
cvs update: Updating feature/export
cvs update: Updating feature/forward
cvs update: Updating feature/lock
cvs update: Updating feature/merge
cvs update: Updating feature/move
U feature/move/move_forum_feature.php
cvs update: Updating feature/options
cvs update: Updating feature/portfolio
U feature/portfolio/portfolio_forum_feature.php
cvs update: Updating feature/print
cvs update: Updating feature/readers
cvs update: Updating lang
cvs update: Updating lang/en_utf8
U lang/en_utf8/forumng.php
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/forumng
U lang/en_utf8/help/forumng/authorname.html
U lang/en_utf8/help/forumng/daterangefrom.html
U lang/en_utf8/help/forumng/daterangeto.html
U lang/en_utf8/help/forumng/removeolddiscussions.html
U lang/en_utf8/help/forumng/withremoveddiscussions.html
U lang/en_utf8/help/forumng/words.html
cvs update: Updating local
cvs update: Updating perf
cvs update: Updating type
U type/forum_type.php
cvs update: Updating type/general
U type/general/general_forum_type.php
cvs update: Updating type/studyadvice
}}}
=== 
''{{ts{19/07/10 17:56}}}''
There is no update for MyCourses. But the [[current code|http://www.earlham.edu/markp/miss/#MyCourses]] //should// work in 1.9.9.
A siteNavigation block by Rosario Carco is discussed [[here|http://moodle.org/mod/forum/discuss.php?d=103703]] -- this allows guests to navigate a site without logging in. Could be useful elsewhere!
This discussion on the Tracker looks interesting too [[Contrib 1442|http://tracker.moodle.org/browse/CONTRIB-1442]]
[[This posting|http://moodle.org/mod/forum/discuss.php?d=67494#p544820]] has the myCourses06r.zip that I'll continue to use (in ~/moo-plugins/mycourses)
''{{ts{19/07/10 15:56}}}'' CVS update {{{~/moo-plugins/contrib/plugins/mod/ouwiki]$ cvs update -dP}}} +++[code]>
{{{
cvs update: Updating .
P delete.php
P edit.php
P lib.php
P mod_form.php
U ouwiki.php
P view.php
cvs update: Updating db
cvs update: Updating lang
cvs update: Updating lang/de_du_utf8
cvs update: Updating lang/de_utf8
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/ouwiki
cvs update: Updating lang/fr_utf8
cvs update: Updating lang/fr_utf8/help
cvs update: Updating lang/fr_utf8/help/ouwiki
cvs update: Updating lang/he_utf8
cvs update: Updating local
cvs update: Updating simpletest
}}}
=== 
Same version as before {{{$module->version  = 2010042201;}}} but updates worthwhile.
{{{ts{19/04/11 11:44}}}}
The Moodle plugin downloads give a link to [[oustuff on googledocs|https://docs.google.com/leaf?id=0BwFVUu6OwBtgYzhiMzQzZmUtODdhZC00NTExLTgwYmQtMDVjYjlhZjllYmUz&sort=moddate&desc=true&layout=list&num=50]]
* So download oublog 2.2, ouwiki 2.5,, and forumng 3.6 from there to {{{code-moo12/oustuff}}}
* Take a look at ousearch as well.
The @@Ousearch@@ seems to be code that you can add to moducles to make the HTML contents searchable. This will take some programming effort but looks rather interesting.
{{ts{19/07/10 12:23}}} do +++[CVS update]>
{{{
markp/2010-test-mods/contrib/plugins/blocks/progress]$ cvs update -dP
cvs update: Updating .
cvs update: Updating img
cvs update: Updating lang
cvs update: Updating lang/de_utf8
cvs update: Updating lang/de_utf8/help
cvs update: Updating lang/de_utf8/help/progress
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/progress
cvs update: Updating lang/ja_utf8
cvs update: Updating lang/ja_utf8/help
cvs update: Updating lang/ja_utf8/help/progress
cvs update: Updating lang/pt_br_utf8
cvs update: Updating lang/pt_br_utf8/help
cvs update: Updating lang/pt_br_utf8/help/progress
}}}
=== 
Ready to go -- copy code to relevant location.
''{{ts{19/07/10 16:07}}}'' {{{~/moo-plugins/contrib/plugins/blocks/sharing_cart]$ cvs update -dP}}} +++[code]>
{{{
cvs update: Updating .
cvs update: Updating db
cvs update: Updating lang
cvs update: Updating lang/en_utf8
cvs update: Updating lang/en_utf8/help
cvs update: Updating lang/en_utf8/help/sharing_cart
cvs update: Updating lang/es_utf8
cvs update: Updating lang/es_utf8/help
cvs update: Updating lang/es_utf8/help/sharing_cart
cvs update: Updating lang/ja_utf8
cvs update: Updating lang/ja_utf8/help
cvs update: Updating lang/ja_utf8/help/sharing_cart
cvs update: Updating lib
cvs update: Updating lib/course
cvs update: Updating lib/form
cvs update: Updating pix
cvs update: Updating plugins
cvs update: Updating plugins/repository
cvs update: Updating plugins/repository/Form
cvs update: Updating plugins/repository/lang
cvs update: Updating plugins/repository/lang/en_utf8
cvs update: Updating plugins/repository/lang/en_utf8/help
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart/plugins
cvs update: Updating plugins/repository/lang/en_utf8/help/sharing_cart/plugins/repository
cvs update: Updating plugins/repository/lang/ja_utf8
cvs update: Updating plugins/repository/lang/ja_utf8/help
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart/plugins
cvs update: Updating plugins/repository/lang/ja_utf8/help/sharing_cart/plugins/repository
cvs update: Updating plugins/repository/lib
cvs update: Updating plugins/repository/pix
cvs update: Updating shared
cvs update: Updating shared/qtype
}}}
=== 
Apply important stuff from [[Changes to Moodle|http://www.earlham.edu/markp/miss/#%5B%5BChanges%20to%20Moodle%5D%5D]]
[[Fixing Theme icons|http://www.earlham.edu/markp/miss/#%5B%5BFixing%20theme%20icons%5D%5D]] fixes problems that yui_menu has with the default theme.
Two 'Anomaly' themes. +++[Diffs]>
{{{
 ~/moo-plugins/themes]$ diff -qr anomaly anomaly_ecs/
Files anomaly/config.php and anomaly_ecs/config.php differ
Files anomaly/header.html and anomaly_ecs/header.html differ
Only in anomaly_ecs/: header.html.bak
Files anomaly/styles.css and anomaly_ecs/styles.css differ
Only in anomaly_ecs/: styles.css.old
Files anomaly/styles_select.css and anomaly_ecs/styles_select.css differ
Only in anomaly_ecs/: styles_select.css.old
}}}
=== 
Editted //anomaly_ecs/config.php// and added {{{$THEME->custompix = true;}}}
Discovered that moo-195/themes/anomaly has updated ''pix'' so use this as is ''but'' copy over the editted config.php with the custompix setting.
{{{
~/public_html/moo-195/theme]$ cp -r anomaly ~/public_html/moo-97t/theme
public_html/moo-97t/theme/anomaly]$ mv config.php config.php.bak
public_html/moo-97t/theme/anomaly]$ cp ~/moo-plugins/themes/anomaly_ecs/config.php .
}}}
[[29 December 2009 Update Anomaly]]
Copy over themes:
* Serenity : {{{~/public_html/moo-97t/theme]$ cp -rv ~/moo-plugins/themes/serenity serenity}}}
* Facebooky : {{{/moo-97t/theme]$ cp -r ~/moo-plugins/themes/Facebooky Facebooky}}}
* leatherbound (''new'') : {{{/moo-97t/theme]$ cp -r ~/moo-plugins/themes/leatherbound leatherbound}}}
Handle Parchment (the new default?):
* copy from download : {{{~/moo-plugins/themes]$ cp ~/public_html/moo-195/theme/parchment_theme.tgz .}}}
* untar : {{{ ~/moo-plugins/themes]$ tar -xvf parchment_theme.tgz}}}
* copy into place : {{{~/public_html/moo-97t/theme]$ cp -r ~/moo-plugins/themes/parchment parchment}}}
Note that parchment has a super cool //favicon.ico//. Copy this to the other themes
Update icons in parchment theme:
* copy user icon [img[http://www.earlham.edu/markp/miss/graphics/formal_ecs-user.gif]] {{{moo-97t/theme/anomaly/pix/i]$ cp user.gif ../../../parchment/pix/i/}}}
* copy settings icon [img[http://www.earlham.edu/markp/miss/graphics/formal_ecs-settings.gif]] {{{moo-97t/theme/anomaly/pix/i]$ cp settings.gif ../../../parchment/pix/i/}}}
* copy assignment icons [img[http://www.earlham.edu/markp/miss/graphics/default-assignment_icon.gif]] {{{~/public_html/moo-97t/theme/anomaly/pix/mod/assignment]$ cp icon.gif ../../../../parchment/pix/mod/assignment/}}}
* copy feedback icon to module [img[http://www.earlham.edu/markp/miss/graphics/feedback_icon.gif]] {{{ ~/public_html/moo-97t/mod/feedback]$ mv icon.gif icon.gif.old ; $ cp ~/public_html/moo-195/theme/chameleon/pix/mod/feedback/icon.gif .}}}
+++[fix defaults:]>
{{{
moo-97t/theme/anomaly/pix/mod/assignment]$ cp icon.gif  ~/public_html/moo-97t/pix/mod/assignment
moo-97t/theme/anomaly/pix/mod/assignment]$ cd ../feedback/
moo-97t/theme/anomaly/pix/mod/feedback]$ cp icon.gif  ~/public_html/moo-97t/pix/mod/feedback/
}}}
=== 


* try to get rid of the horrible boxes on ~YUI_menu
* copy favicon.ico from parchment to others.
** Problems getting new favicon to appear.
!!New
//moo-97t/pix// is a new dir with all the latest pix.
''{{ts{19/07/10 15:54}}}'' Update the CVS {{{~/moo-plugins/contrib/plugins/blocks/yui_menu]$ cvs update -dP}}} +++[output]>
{{{
cvs update: Updating .
cvs update: Updating db
cvs update: Updating icons
cvs update: Updating lang
cvs update: Updating lang/en_utf8
cvs update: Updating lang/fr_utf8
cvs update: Updating lang/zh_tw_utf8
cvs update: Updating plugin
P plugin/outline.php
cvs update: Updating skin
}}}
=== 
Also see :
* [[23 December 2009 Course Menu (YUI_menu)]] and 
* [[29 December 2009 latest YUI_Menu]]
{{ts{5/07/11 12:21}}}
Want to update the codebase prior to doing thorough testing of lmb enrol plugin.
Since the {{{chemix-12}}} code is the most up to date, copy this to {{{ref-12}}}. Then archive test-12 stuff, dump database, and start with fresh code from ref-12 and drop all tables. Finally, import production db rejig categories and then run lmb enrollment.
# Check that {{{Chemix-12}}} code is in known state. +++[check:]>
Run through sections 5-10 in [[27 June 2011 To Do]]
{{{
public_html]$ diff -qr chemix-12/ ref-12/
Files chemix-12/config.php and ref-12/config.php differ
Only in chemix-12/course/format: topcoll
}}}
[[Topcoll for moodle-12]]
{{{
Only in chemix-12/enrol: lmb
}}}
[[LMB for moodle-12]]
{{{
Only in chemix-12/filter: jmol
Only in chemix-12/lang/en: help
Only in chemix-12/lang/en_us_utf8/help: jmol
Only in chemix-12/lang/en_us_utf8: resource_jmol.php
Only in chemix-12/lang/en_utf8/help: jmol
Only in chemix-12/lang/en_utf8: jmol.php
Files chemix-12/lang/en_utf8/resource.php and ref-12/lang/en_utf8/resource.php differ
Only in chemix-12/lang/en_utf8: resource_jmol.php
}}}
[[New Jmol install & test]]
{{{
Files chemix-12/lang/en_utf8/role.php and ref-12/lang/en_utf8/role.php differ
Only in chemix-12/lang/en_utf8: role.php.bak
Only in chemix-12/lang: fr_utf8
}}}
Change 'assign roles' string to 'Enrollments'
{{{
Files chemix-12/lib/editor/tinymce.js.php and ref-12/lib/editor/tinymce.js.php differ
Only in chemix-12/lib/editor: tinymce.js.php.org
}}}
TinyMCE fixes : [[TinyMCE for moodle-12]]
{{{
Only in chemix-12/mod/resource: lib-prejmol.php
Files chemix-12/mod/resource/lib.php and ref-12/mod/resource/lib.php differ
Only in chemix-12/mod/resource/type: jmol
Only in chemix-12/pix/f: jmol.gif
}}}
Jmol resource fix
=== 
# already have an archive of ref-12 code {{{moo-archives/summer-11/ref-12-june29.tgz}}} so go ahead to do the +++[copy]>
{{{$ mv ref-12 bc2-ref-12}}} -- just in case
{{{$ cp -r chemix-12/ ref-12}}} -- copy the code
{{{$ cp bc2-ref-12/config.php ref-12/config.php}}} -- update the config.php so that it uses the correct database info.
=== --Check default course blocks-- [[Default course blocks & config settings]]
# I won't bother saving the current {{{test-12}}} database since it would be easy to regenerate it by importing {{{icgorldi_743990.xml}}} with the lmb plugin. Also, the code is obsolete, so just save the {{{config.php}}} and dump the code and drop all database tables. @@done {{ts{5/07/11 16:17}}}@@
# +++[Set up new test-12]>
{{{
public_html]$ cp -r ref-12 test-12
public_html]$ cp ~/moo-archives/summer-11/config-test-12.php test-12/config.php
}}}
Unlike a previous attempt with the Jmol code, this time all the tables were created successfully //de novo//. Bodes well.
=== 
# Load the current production database into test-12. {{{lmb-test]$ mysql -u root -p -D test12 <moodleDB-peace-june29.sql}}}
* Get +++[this upgrade notice]>
Your Moodle files have been changed, and you are about to automatically upgrade your server to this version:
1.9.12 (Build: 20110510) (2007101591.03)
Once you do this you can not go back again.
Please note that this process can take a long time.
Are you sure you want to upgrade this server to this version?
=== @@YES@@. Adds new settings etc.
* @@BUT@@ [[LMB Update problems]]
# Frig around with Categories. Moved all last year's depts into ''2010-11'' Category
# Archive this configuration. {{{lmb-test]$ mysqldump -u moodlebackup -p -C -Q -e test12 >test12-peacedb.sql}}}
# Now load {{{icgorldi_751856.xml}}} and use departments. Import data from indiv courses from {{{Fall 2011}}}

<<showUpdates>>
{{ts{4/01/11 15:11}}}
Apply the following updates to production Moodle:
# New us-en language pack plus edit to change 'Assign roles' to 'Enrollments' : {{{en_lang_update.tgz}}} see [[Change 'Assign roles']]
# [[LAE Gradebook fix|Fixing LAE Gradebook]]
# Clicker file import
# Plus [[15 December 2010 upgrade Moodle with new modules]]
** [[Scheduler|Scheduler request]]
** [[Enhanced file upload|Enhanced File Module]]

See also [[Moodle Production update]]
{{ts{10/08/11 14:49}}}
Go ahead with updating courses in {{{Fall 2011}}} with full name, shortname & Id # = CRN
# {{{CHEM111R-2:201210 — Principles of CHEM Recitation	CHEM111R-2:201210	11439.201210}}} - not present. This may get created. Use Meta Course? {{ts{12/08/11 11:08}}} +++[results]
{{{CHEM111R-1:201210 — Principles of CHEM Recitation}}} is present but with no student participants. {{{CHEM111R-2:201210}}} is ''not'' present. Strange.
=== 
# {{{JPNS340:201210 - Ethnography of the city}}} does not exist in the listing I have. +++[contact Dawn Grimes-McLellan]>
{{{JPNS340:201210 - Ethnography of the city}}} is not in the lmb import file (and therefore not in Banner) but we have created the course for Dawn.
|~JPNS0341-1:201210 — ~CrossCultural Educ Perspective|	~JPNS0341-1:201210	|11086.201210|
Is in the lmb import file -- note the ''0341'' meaning off campus course. This is present as {{{JPNS.EDU341:201210 - Cross-cultural educational perspectives}}}
Here's what Dawn wrote:
<<<
Neal created two courses for me this semester -- probably both have the same issue.  I am in Morioka on SICE though so I was going to enroll the 8 students here myself.  Is that ok?
Dawn

Ans: Yes
<<<
I am going to leave these as is. 
=== 
# {{{PSYCH342}}} has 2 sections. Make this into a meta-course. Allow both sections to be created then add to current course. +++[components]>
{{{
PSYC342-1:201210 — Experimental Psychology	PSYC342-1:201210	10320.201210
PSYC342-2:201210 — Experimental Psychology	PSYC342-2:201210	11311.201210
}}}
=== Done. +++[Email Kathy Milar]>
Kathy,

Experimental Psych PSYC342 has two sections PSYC342-1:201210 and PSYC342-2:201210. These sections get the student enrollments. But since you're teaching both sections I assumed that you wanted the course content in a single course. So I created PSYC342:201210 as a meta-course and then added PSYC342-1:201210 and PSYC342-2:201210 as 'children' so that PSYC342:201210 inherits their student enrollments. Thus you will see in the MyMoodle listing three instances of 'Experimental Psychology' but only PSYC342:201210 has the content and all the enrolled students (since it's the meta course). My suggestion would be that in courses PSYC342-1:201210 and PSYC342-2:201210 you set the 'Availability' (in Admin Settings) to 'This course is not available to students' which will 'hide' the courses from students and grey them out in your My Moodle listing.

Does this make sense?.
=== 
# 'Sex, Gender and Christian Ethics' has ''two'' +++[course entries]>
{{{
ESEM150-4:201210 — Sex&amp;Gender in Christian Ethics	ESEM150-4:201210	11702.201210
ESEM150-7:201210 — Sex&amp;Gender N Christian Ethics	ESEM150-7:201210	11805.201210
}}}
=== ESEM150-4 and ESEM150-7 ! Taking a look at moodletest site it appears that ~ESEM150-7 is the one that's active. Update {{ts{12/08/11 12:21}}} -- {{{ESEM150-4:201210}}} is now {{{— Poets, Colleagues and Friends}}} by Mary Lacey, so that's OK.
# {{{MUS368}}} did not have any content. --Strange cos I think I remember stuff in this one.-- That was demo content.
# Another meta course {{{REL210:201210 — Quakerism}}} +++[composed of]>
{{{
REL210-1:201210 — Quakerism	REL210-1:201210	10828.201210
REL210-2:201210 — CP:Quakerism	REL210-2:201210	11312.201210
}}}
=== . {{ts{12/08/11 12:21}}} Here the problem is that there is {{{REL.REL210:201210 -- Quakerism}}} and {{{REL210:201210 - Quakerism}}} but only {{{REL.REL210:201210 -- Quakerism}}} has got any enrollments. Email Catherine Griffith and Sarah Emmer.
# {{{SPAN.SPAN101:201210 -- Basic Spanish I}}} -- this is the course that is getting the student enrollemnts (and not {{{SPAN101-1:201210 — Basic Spanish I}}})
# {{{SPAN426:201210 -- Love is a Many Slendored Thing}}} is present as two separate courses +++[here]>
{{{
SPAN426:201210 -- Topics in Lit &amp; Text Analysis	SPAN426:201210	XLS55201210
SPAN426-0:201210 — Topics in Lit &amp; Text Analysis	SPAN426-0:201210	11301.201210
}}}
=== . I've used CRN -- {{{XLS55201210}}} and kept the original long name. I may need to use the second CRN-id. {{ts{12/08/11 12:26}}} Now present as {{{SPAN.LTST426:201210 -- Topics in Lit &amp; Text Analysis}}} and SPAN426 has gone away.

----
{{ts{12/08/11 12:27}}}
All sorted with emails etc

The CLAMP folks released [[Moodle 1.9.12+Liberal Arts Edition v1.3|http://www.clamp-it.org/code/moodle-1-9-12liberal-arts-edition-v1-3/]] on July 15th which is basically a bug fixing version of 1.2.1.
+++!![File list differences]>
The following files differ between LAE versions 1.2.1 and 1.3:
{{{
/LAE_readme.txt
/course/editsection.php
/githash.php
/grade/report/grader/lib.php
/group: autocreategrouping.php (new)
/group/lib.php
/lib/moodlelib.php
/lib/olson.php
/lib/simpletest/testmoodlelib.php
/lib/timezone.txt
/lib/weblib.php
/mod/assignment/lib.php
/mod/assignment/type/upload/assignment.class.php
/mod/data/lib.php
/mod/forum/db/access.php
/mod/forum/lib.php
/mod/forum/version.php
/mod/glossary/lib.php
/mod/lesson/lib.php
/mod/quiz/lib.php
/mod/scorm/api.php
/mod/scorm/datamodel.php
/mod/scorm/lib.php
/mod/scorm/player.php
/mod/wiki/mod_form.php
/tag/lib.php
/tags
/version.php
}}}
=== 
Since there are not many files it's an easy matter to copy the new versions into place.
''BUT'' since I have performed quite a few hacks I must check that none of the hacks are overwritten. ''So'' compare each file on the list above with it's working version equivalent located in {{{public_html/ref-12}}}. If there are no differences then it's safe to substitute the file, if there are diffs it means I've done a hack and I need to redo the same stuff on the new version.
+++!![Check for Hacks & Fix]>
eg {{{/code-moo12/1.9.12-LAE1.2.1]$ diff lib/simpletest/testmoodlelib.php ~/public_html/ref-12/lib/simpletest/testmoodlelib.php}}}
|File|Same|Diff|Not Important|copied|
|/LAE_readme.txt| | | x |{{ts{2/08/11 10:55}}}|
|/course/editsection.php| x | | |{{ts{2/08/11 10:55}}}|
|/githash.php| x | | |{{ts{2/08/11 10:55}}}|
|/grade/report/grader/lib.php| x | | |{{ts{2/08/11 10:55}}}|
|/group: autocreategrouping.php (new)| | |new|{{ts{2/08/11 10:55}}}|
|/group/lib.php| x | | |{{ts{2/08/11 10:55}}}|
|/lib/moodlelib.php| x | | |{{ts{2/08/11 10:55}}}|
|/lib/olson.php| x | | |{{ts{2/08/11 10:55}}}|
|/lib/simpletest/testmoodlelib.php| x | | |{{ts{2/08/11 10:55}}}|
|/lib/timezone.txt| x | | |{{ts{2/08/11 10:55}}}|
|/lib/weblib.php| x | | |{{ts{2/08/11 10:55}}}|
|/mod/assignment/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/assignment/type/upload/assignment.class.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/data/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/forum/db/access.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/forum/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/forum/version.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/glossary/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/lesson/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/quiz/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/scorm/api.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/scorm/datamodel.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/scorm/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/scorm/player.php| x | | |{{ts{2/08/11 11:10}}}|
|/mod/wiki/mod_form.php| x | | |{{ts{2/08/11 11:10}}}|
|/tag/lib.php| x | | |{{ts{2/08/11 11:10}}}|
|/tags| x | | |{{ts{2/08/11 11:10}}}|
|/version.php| x | | |{{ts{2/08/11 11:10}}}|
copy eg {{{public_html/ref-12]$ cp ~/code-moo12/1.9.12-LAE1.3/course/editsection.php course/editsection.php}}}

=== 
--{{ts{1/08/11 17:51}}} ''tomorrow'' copy these files over - make backup first!-- @@done@@ {{ts{2/08/11 11:12}}}
* Update test-12 / chemix-12 at some point. {{ts{3/08/11 12:29}}} @@done@@
* also copy {{{mirror10/admin/uploadcourse.php}}} into ref-12, chemix-12 and test-12 just in case. Hopefully this will be superseded by the new enrollment stuff, but just in case...


Current configuration of csv file to work with uploadcourse.php:
|!fullname|!shortname|!category|!sortorder|!idnumber|!format|!startdate|!numsections|!visible|!teacher1_role|!teacher1_account|
|BIOL111:201110 - Ecological Biology|BIOL111:201110|/Biology (BIOL)/| 1 |10109:201110|topics|8/22/2010| 5 | 1 |editingteacher|sarap@earlham.edu|

Problem is that the default 'max upload size' (in Course settings) is set to zero! So, referring to [[Upload courses test 08|http://www.earlham.edu/markp/miss/#%5b%5bUpload%20courses%20test%2008%5d%5d]] we need to create a 'maxbytes' setting of {{{134217728}}} (= 128Mb)
Also, Neal Baker tells me that Weekly outline is more popular so we'll go with that.
Now, we have:
|!fullname|!shortname|!category|!sortorder|!idnumber|!format|!startdate|!numsections|!visible|!maxbytes|!teacher1_role|!teacher1_account|
|BIOL111:201110 - Ecological Biology|BIOL111:201110|/Biology (BIOL)/| 1 |10109:201110|weekly|8/22/2010| 16 | 1 | 134217728|editingteacher|sarap@earlham.edu|
@@this works@@

| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 30/03/2008 12:18:50 | YourName | [[/|http://mptw.tiddlyspot.com/#%5B%5BNew%20features%20in%202.3%20update%5D%5D]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . | ok |
| 30/03/2008 12:29:33 | YourName | [[/|http://mptw.tiddlyspot.com/#%5B%5BNew%20features%20in%202.3%20update%5D%5D]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 19/05/2008 22:52:39 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . | failed |
| 19/05/2008 22:53:41 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 19/05/2008 23:03:34 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 19/05/2008 23:11:09 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 23/07/2008 23:50:07 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 27/07/2008 00:59:48 | YourName | [[index.20080723.2055230000.html|http://mptw.tiddlyspot.com/backup/index.20080723.2055230000.html]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 27/07/2008 01:11:12 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
| 27/07/2008 01:43:30 | YourName | [[/|http://mptw.tiddlyspot.com/]] | [[store.cgi|http://mptw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mptw.tiddlyspot.com/index.html]] | . |
I use the course_users file and uploaded some more users taking care to skip those already there.
+++[Results:]
!Upload users results
{{{

Status	CSV line	ID	Username	First name	Surname	Email address	Password	Authentication	Enrolments	Delete
New user	2	111	adamska	Karen	Adams	adamska@earlham.edu	 	ldap	 	 
User not added - already registered	3	36	akikok	Akiko	Kakutani	akikok@earlham.edu	 	ldap	 	 
User not added - already registered	4	69	alices	Alice	Shrock	alices@earlham.edu	 	ldap	 	 
New user	5	112	alredna	Natalie	Alred	alredna@earlham.edu	 	ldap	 	 
User not added - already registered	6	46	amymul	Amy	Mulnix	amymul@earlham.edu	 	ldap	 	 
New user	7	113	anderch	Christian	Anderson	anderch@earlham.edu	 	ldap	 	 
New user	8	114	angelst	Steve	Angell	angelst@earlham.edu	 	ldap	 	 
New user	9	115	bandyan	Annie	Bandy	bandyan@earlham.edu	 	ldap	 	 
New user	10	116	begelri	Richard	Begel	begelri@earlham.edu	 	ldap	 	 
User not added - already registered	11	4	benamma	Marc	Benamou	benamma@earlham.edu	 	ldap	 	 
User not added - already registered	12	6	berenda	Daniel	Berenberg	berenda@earlham.edu	 	ldap	 	 
New user	13	117	birkemi	Michael	Birkel	birkemi@earlham.edu	 	ldap	 	 
User not added - already registered	14	8	bistlwa	Walt	Bistline	bistlwa@earlham.edu	 	ldap	 	 
User not added - already registered	15	9	blairpe	Peter	Blair	blairpe@earlham.edu	 	ldap	 	 
User not added - already registered	16	35	bobj	Robert	Johnstone	bobj@earlham.edu	 	ldap	 	 
User not added - already registered	17	11	bowerma	Marya	Bower	bowerma@earlham.edu	 	ldap	 	 
New user	18	118	brents	Brent	Smith	brents@earlham.edu	 	ldap	 	 
New user	19	119	butchji	Jill	Butcher	butchji@earlham.edu	 	ldap	 	 
New user	20	120	carolh	Carol	Hunter	carolh@earlham.edu	 	ldap	 	 
User not added - already registered	21	13	carusba	Barbara	Caruso	carusba@earlham.edu	 	ldap	 	 
New user	22	121	castlje	Jess	Castleberry	castlje@earlham.edu	 	ldap	 	 
New user	23	122	cathrynd	Cathryn	Dickman	cathrynd@earlham.edu	 	ldap	 	 
User not added - already registered	24	48	charliep	Charles	Peck	charliep@earlham.edu	 	ldap	 	 
User not added - already registered	25	59	chriss	Chris	Swafford	chriss@earlham.edu	 	ldap	 	 
User not added - already registered	26	15	cornian	Ana	Cornide	cornian@earlham.edu	 	ldap	 	 
New user	27	123	couttli	Liana	Coutts	couttli@earlham.edu	 	ldap	 	 
New user	28	124	cozarke	Keith	Cozart	cozarke@earlham.edu	 	ldap	 	 
User not added - already registered	29	79	culvebi	Bill	Culverhouse	culvebi@earlham.edu	 	ldap	 	 
User not added - already registered	30	22	dang	Dan	Graves	dang@earlham.edu	 	ldap	 	 
New user	31	125	danr	Daniel	Rosenberg	danr@earlham.edu	 	ldap	 	 
New user	32	126	decokga	Gary	DeCoker	decokga@earlham.edu	 	ldap	 	 
User not added - already registered	33	16	deibeco	Corinne	Deibel	deibeco@earlham.edu	 	ldap	 	 
User not added - already registered	34	17	deibemi	Mike	Deibel	deibemi@earlham.edu	 	ldap	 	 
New user	35	127	denhael	Ellen	Denham	denhael@earlham.edu	 	ldap	 	 
User not added - already registered	36	81	dimicre	Rebekah	Dimick Eastman	dimicre@earlham.edu	 	ldap	 	 
User not added - already registered	37	5	dougb	Doug	Bennett	dougb@earlham.edu	 	ldap	 	 
User not added - already registered	38	19	eastmna	Nate	Eastman	eastmna@earlham.edu	 	ldap	 	 
User not added - already registered	39	20	ebenbda	David	Ebenbach	ebenbda@earlham.edu	 	ldap	 	 
New user	40	128	fademcy	Cynthia	Fadem	fademcy@earlham.edu	 	ldap	 	 
New user	41	129	ferralu	Ludmila	Ferrari	ferralu@earlham.edu	 	ldap	 	 
New user	42	130	ferreto	Tom	Ferrell	ferreto@earlham.edu	 	ldap	 	 
New user	43	131	furuksu	Susan	Furukawa	furuksu@earlham.edu	 	ldap	 	 
User not added - already registered	44	21	garmama	Mary	Garman	garmama@earlham.edu	 	ldap	 	 
New user	45	132	gartnra	Rachel	Gartner	gartnra@earlham.edu	 	ldap	 	 
User not added - already registered	46	102	grahajo	Jonathan	Graham	grahajo@earlham.edu	 	ldap	 	 
User not added - already registered	47	23	guvenfe	Ferit	Guven	guvenfe@earlham.edu	 	ldap	 	 
User not added - already registered	48	24	guzmaro	Rodolfo	Guzman	guzmaro@earlham.edu	 	ldap	 	 
New user	49	133	habeean	Anan	Habeeb	habeean@earlham.edu	 	ldap	 	 
New user	50	134	hayasta	Takako	Hayase	hayasta@earlham.edu	 	ldap	 	 
New user	51	135	heinyst	Stephen	Heiny	heinyst@earlham.edu	 	ldap	 	 
New user	52	136	herdma	Maria-Teresa	Herd	herdma@earlham.edu	 	ldap	 	 
New user	53	137	hesssc	Scott	Hess	hesssc@earlham.edu	 	ldap	 	 
User not added - already registered	54	28	hetriju	Judi	Hetrick	hetriju@earlham.edu	 	ldap	 	 
User not added - already registered	55	76	howardl	Howard	Lamson	howardl@earlham.edu	 	ldap	 	 
User not added - already registered	56	32	jacksde	Deborah	Jackson	jacksde@earlham.edu	 	ldap	 	 
User not added - already registered	57	34	jacksmi	Michael	Jackson	jacksmi@earlham.edu	 	ldap	 	 
User not added - already registered	58	30	jhowell	John	Howell	jhowell@earlham.edu	 	ldap	 	 
User not added - already registered	59	42	jlogan	James	Logan	jlogan@earlham.edu	 	ldap	 	 
New user	60	138	joannm	Jo Ann	Martin	joannm@earlham.edu	 	ldap	 	 
User not added - already registered	61	31	johni	John	Iverson	johni@earlham.edu	 	ldap	 	 
New user	62	139	johnsni	Nick	Johnson	johnsni@earlham.edu	 	ldap	 	 
User not added - already registered	63	18	jond	Jonathan	Diskin	jond@earlham.edu	 	ldap	 	 
New user	64	140	jonesna	Nathan	Jones	jonesna@earlham.edu	 	ldap	 	 
User not added - already registered	65	53	jrogers	Jim	Rogers	jrogers@earlham.edu	 	ldap	 	 
User not added - already registered	66	37	kalveka	Kari	Kalve	kalveka@earlham.edu	 	ldap	 	 
User not added - already registered	67	3	kathym	Katharine	Milar	kathym@earlham.edu	 	ldap	 	 
New user	68	141	keeslge	Gerry	Keesling	keeslge@earlham.edu	 	ldap	 	 
New user	69	142	kellejo2	Jocelyn	Keller	kellejo2@earlham.edu	 	ldap	 	 
New user	70	143	kinsebi	Bill	Kinsey	kinsebi@earlham.edu	 	ldap	 	 
User not added - already registered	71	38	krishra	Rajaram	Krishnan	krishra@earlham.edu	 	ldap	 	 
New user	72	144	lardijo	John	Lardinois	lardijo@earlham.edu	 	ldap	 	 
New user	73	145	larudme	Mehrene	Larudee	larudme@earlham.edu	 	ldap	 	 
User not added - already registered	74	41	lautzma	Mark	Lautzenheiser	lautzma@earlham.edu	 	ldap	 	 
New user	75	146	lenclark	Len	Clark	lenclark@earlham.edu	 	ldap	 	 
New user	76	147	macyma	Matt	Macy	macyma@earlham.edu	 	ldap	 	 
New user	77	148	madseje	Jessica	Madsen	madseje@earlham.edu	 	ldap	 	 
User not added - already registered	78	27	margaret	Margaret	Hampton	margaret@earlham.edu	 	ldap	 	 
User not added - already registered	79	95	mayju	Julia	May	mayju@earlham.edu	 	ldap	 	 
New user	80	149	mckibcy	Cynthia	McKibbin	mckibcy@earlham.edu	 	ldap	 	 
New user	81	150	messero	Roy	Messer	messero@earlham.edu	 	ldap	 	 
User not added - already registered	82	33	micj	Mic	Jackson	micj@earlham.edu	 	ldap	 	 
User not added - already registered	83	44	milleli	Lyn	Miller	milleli@earlham.edu	 	ldap	 	 
User not added - already registered	84	45	moorean	Andy	Moore	moorean@earlham.edu	 	ldap	 	 
New user	85	151	moylema	Matthew	Moyle	moylema@earlham.edu	 	ldap	 	 
New user	86	152	nancyt	Nancy	Taylor	nancyt@earlham.edu	 	ldap	 	 
User not added - already registered	87	7	nelsonb	Nelson	Bingham	nelsonb@earlham.edu	 	ldap	 	 
New user	88	153	neumaan	Anton	Neumayr	neumaan@earlham.edu	 	ldap	 	 
User not added - already registered	89	47	pardhan	Anand	Pardhanani	pardhan@earlham.edu	 	ldap	 	 
User not added - already registered	90	93	pattyo	Patricia	Lamson	pattyo@earlham.edu	 	ldap	 	 
New user	91	154	perkily	Lynne	Perkins-Socey	perkily@earlham.edu	 	ldap	 	 
User not added - already registered	92	10	phyllisb	Phyllis	Boanes	phyllisb@earlham.edu	 	ldap	 	 
New user	93	155	pipersh	Shenita	Piper	pipersh@earlham.edu	 	ldap	 	 
New user	94	156	polanpa	Pavel	Polanco-Safadit	polanpa@earlham.edu	 	ldap	 	 
New user	95	157	preslel	Elaine	Bergman	preslel@earlham.edu	 	ldap	 	 
New user	96	158	punzovi	Vincent	Punzo	punzovi@earlham.edu	 	ldap	 	 
User not added - already registered	97	51	quinojo	Joann	Quinones	quinojo@earlham.edu	 	ldap	 	 
New user	98	159	randalls	Randall	Shrock	randalls@earlham.edu	 	ldap	 	 
User not added - already registered	99	29	rayh	Ray	Hively	rayh@earlham.edu	 	ldap	 	 
New user	100	160	rayka	Kathryn	Ray	rayka@earlham.edu	 	ldap	 	 
New user	101	161	rigoljo	Joni	Rigoli	rigoljo@earlham.edu	 	ldap	 	 
User not added - already registered	102	52	roberja	Jay	Roberts	roberja@earlham.edu	 	ldap	 	 
New user	103	162	rosenbo	Bob	Rosenberg	rosenbo@earlham.edu	 	ldap	 	 
User not added - already registered	104	77	sarap	Sara	Penhale	sarap@earlham.edu	 	ldap	 	 
New user	105	163	sakosst	Steve	Sakosits	sakosst@earlham.edu	 	ldap	 	 
User not added - already registered	106	74	schroja	Jana	Schroeder	schroja@earlham.edu	 	ldap	 	 
User not added - already registered	107	55	seelyje	Jennifer	Seely	seelyje@earlham.edu	 	ldap	 	 
New user	108	164	seligwe	Wendy	Seligmann	seligwe@earlham.edu	 	ldap	 	 
New user	109	165	seuka	Kalani	Seu	seuka@earlham.edu	 	ldap	 	 
New user	110	166	shankma	Maggie	Jackson	shankma@earlham.edu	 	ldap	 	 
New user	111	167	shrocam	Amy	Shrock	shrocam@earlham.edu	 	ldap	 	 
User not added - already registered	112	56	sloinan	Andrew	Sloin	sloinan@earlham.edu	 	ldap	 	 
New user	113	168	smithch	Chris	Smith	smithch@earlham.edu	 	ldap	 	 
New user	114	169	smithdi	Richard	Smith	smithdi@earlham.edu	 	ldap	 	 
New user	115	170	smithso	Sonia	Smith	smithso@earlham.edu	 	ldap	 	 
New user	116	171	snydemo	Monteze	Snyder	snydemo@earlham.edu	 	ldap	 	 
User not added - already registered	117	12	stephenb	Stephen	Butler	stephenb@earlham.edu	 	ldap	 	 
User not added - already registered	118	94	stest	Spiggy	Topes	stest@earlham.edu	 	ldap	 	 
New user	119	172	stockma	Mark	Stocksdale	stockma@earlham.edu	 	ldap	 	 
New user	120	173	streeme	Meg	Streepey-Smith	streeme@earlham.edu	 	ldap	 	 
New user	121	174	sutarse	Sejal	Sutaria	sutarse@earlham.edu	 	ldap	 	 
User not added - already registered	122	60	swangjo	Gypsy	Swanger	swangjo@earlham.edu	 	ldap	 	 
New user	123	175	tashiyu	Yumiko	Tashiro	tashiyu@earlham.edu	 	ldap	 	 
User not added - already registered	124	91	terasja	Jane	Terashima	terasja@earlham.edu	 	ldap	 	 
New user	125	176	thomapa	Pat	Thomas	thomapa@earlham.edu	 	ldap	 	 
User not added - already registered	126	78	thorh	Thor	Hogan	thorh@earlham.edu	 	ldap	 	 
User not added - already registered	127	43	timm	Timothy	McLarnan	timm@earlham.edu	 	ldap	 	 
User not added - already registered	128	61	tobeyfo	Forrest	Tobey	tobeyfo@earlham.edu	 	ldap	 	 
User not added - already registered	129	26	tomh	Tom	Hamm	tomh@earlham.edu	 	ldap	 	 
User not added - already registered	130	87	toriwe	Wendy	Tori	toriwe@earlham.edu	 	ldap	 	 
New user	131	177	traylow	Owen	Traylor	traylow@earlham.edu	 	ldap	 	 
User not added - already registered	132	63	vanbma	Mark	Van Buskirk	vanbma@earlham.edu	 	ldap	 	 
New user	133	178	vanzead	Adam	Van Zee	vanzead@earlham.edu	 	ldap	 	 
New user	134	179	washibo	Bonita	Washington-Lacey	washibo@earlham.edu	 	ldap	 	 
User not added - already registered	135	64	watsoch	Charles	Watson	watsoch@earlham.edu	 	ldap	 	 
New user	136	180	watsolo	Lori	Watson	watsolo@earlham.edu	 	ldap	 	 
New user	137	181	watteje	Jessa	Watters	watteje@earlham.edu	 	ldap	 	 
User not added - already registered	138	68	wesm	Wes	Miller	wesm@earlham.edu	 	ldap	 	 
New user	139	182	wheatje	Jennifer	Wheatley	wheatje@earlham.edu	 	ldap	 	 
New user	140	183	whitedi	Diana	White	whitedi@earlham.edu	 	ldap	 	 
User not added - already registered	141	65	whitemi	Michael	White	whitemi@earlham.edu	 	ldap	 	 
User not added - already registered	142	66	wisesu	Susan	Wise	wisesu@earlham.edu	 	ldap	 	 
New user	143	184	wojciju	Judy	Wojcik	wojciju@earlham.edu	 	ldap	 	 
User not added - already registered	144	67	yatesch	Chuck	Yates	yatesch@earlham.edu	 	ldap	 	 
User not added - already registered	145	40	laceyma	Mary	Lacey	laceyma@earlham.edu	 	ldap	 	 
User not added - already registered	146	54	sagnaka	Karim	Sagna	sagnaka@earlham.edu	 	ldap	 	 
User not added - already registered	147	57	stahlal	Aletha	Stahl	stahlal@earlham.edu	 	ldap	 	 
User not added - already registered	148	98	kirkto	Tom	Kirk	kirkto@earlham.edu	 	ldap	 	 
User not added - already registered	149	25	wellingh	Welling	Hall	wellingh@earlham.edu	 	ldap	 	 
User not added - already registered	150	39	kuriyya	Yasumi	Kuriya	kuriyya@earlham.edu	 	ldap	 	 
New user	151	185	dawnm	Dawn	Grimes-MacLellan	dawnm@earlham.edu	 	ldap	 	 
New user	152	186	kathyt	Kathy	Taylor	kathyt@earlham.edu	 	ldap	 	 
New user	153	187	mileske	Kevin	Miles	mileske@earlham.edu	 	ldap	 	 
New user	154	188	reavira	Rachael	Reavis	reavira@earlham.edu	 	ldap	 	 
New user	155	189	TBA	Tobey	Announced	tba@earlham.edu	 	ldap	 	 

Users created: 79
Users skipped: 75
Users having a weak password: 154
Errors: 0
}}}
===
{{ts{11/04/11 12:01}}}
It turns out that the problems Ben and I were having with the AccountSynch.php script from Hope were due to the fact that FreeBSD does not support oracle connectivity. So there's no way of connecting to Banner directly from Moodle as we currently have it.
!!Options:
# [[Use LDAP|LDAP create users and enroll in courses]]
# [[Migrate to Linux|Migrate IS Moodle to Linux]]
# (for v2) perhaps use IMS Enterprise?
Ideal situation:
# When new user accounts get created by IS, that process would include running a script to create the user account in Moodle. The new user account would also have moodle id mapped to Banner's SPRIDEN_ID in order to have a unique id.
# New LDAP object created to hold courses and their enrollments (define role types, eg Teacher, Student). A one off script is run to populate LDAP with courses associated with the current active termcode (or upcoming termcode).
# When new courses get created in Banner or course details change (eg Teacher changed from TBA to a real person) LDAP gets updated. This could be a simple cron job.
# A cron job runs on the moodle server to check for new courses and enrollments in LDAP which are then updated on Moodle.

----
<<tag [[enrollment_project]]>>
From Anne Mulherne on Sept-13-2010
<<<
There's a checkbox at the bottom of the assignments page that says "Send Notification Emails". Could you tell me how to keep that permanently unchecked? I have so far been unable to find anything in the Settings that seems applicable.
<<<
This is a 'quickgrade' setting -- unchecking "Send Notification Emails" does ''not'' result in the unchecked state being saved when saving prefs. A pain in the arse!
;Problem :
: Dan Graves needs to have 4 different List Views from the Research moodle database (MUS484:201020).
;Solution:
: Create 4 independent presets and load as necessary
!!Create and use Database Preset
# login as teacher
# Save current  status. Note that a Preset saves ''all'' the templates. 
** Research database : Presets
** [Save] -- save current preset as name 'Research -- DFEAULT' so that it's easily restored
** [Export] -- export preset as zip file in a similar name (safe backup and also transfer to different moodle system)
# Using the specifications that Dan emailed, create the different List template layouts
** Templates tab : List template
** [disable editor] -- for safety avoid using the noxious html editor
** Create the template table using Dreamweaver
# Paste in the html code:
** Header section : table heading only (may be 2 rows)
** Repeat entry section : row that will be repeated for every database entry
** Footer : table ending (usually just {{{</table>}}})
# Set or change associated style definitions in CSS template (see [[Listing Styles CSS template]])
# Test and refine to adjust the width of columns
# Preset tab
** [Save] -- save set of templates as a new Preset with logical name
** [export] -- export as zip file with similar name
# Resulting set:

[img[graphics/database_preset_list.png]]

Preset definitions : [[Presets for MUS484 Research database]]
!!Enabling use by Students
By default students cannot even see any database presets (the tab does not appear). However, the student role can be given a capability //override// using Administration: Assign roles : Override permissions.
There are three permission settings that might be appropriate to override:
# Manage templates -- setting this alone allows a student to see site templates only (and not ones created by the teacher)
# Manage all template presets -- on it's own this settings does nothing visible! Need to combine with Manage templates
# View presets from all users -- despite assertions to the contrary in the documentation this does not allow the user to view any presets. Rather, the Export tab appears (which could be useful).
I decided to set all three capability overrides for students in this course (isn't Moodle neat?)
* [[Before permission changes|graphics/database_preset_override_before.png]]<<imagebox>>
* [[After capability overrides|graphics/database_preset_override_after.png]]<<imagebox "note the four extra tabs">>
This does mean that students can inadvertently foul up the templates, fields etc, but the likelihood of this happening is slim and anyway //the course should be backed up before doing any template changes//
{{ts{17/01/11 09:58}}}
[[Video Tutor at modules & plugins|http://moodle.org/mod/data/view.php?d=13&rid=3227&filter=1]] for moodle 1.9

[<img[http://moodle.org/pluginfile.php/108/mod_data/content/33310/videotutor-screenshot.png]]

<<<
VideoTutor is a moodle activity plugin that allows for tight integration of html and video content.
It combines three powerful pieces of free software: s5-slides, jsmath and flowplayer to allow for the creation of accesible html that displays html and latex as a slide show, with each slide accompanied by a short video.
<<<





* maybe useful for Drillock project?
* [[download|http://download.moodle.org/download.php/plugins/mod/videotutor.zip]]
!!Background
In Dan Graves' Choral Conducting course Bernie has been recording clips of the student's conducting efforts and uploading them into the [[moodle course (MUS350)|https://moodle.earlham.edu/course/view.php?id=388]]. We created one ~OUBlog per person and Bernie merely creates a blog entry and links to the appropriate video file (in mp4 format) which he has previously uploaded into the Files area. Each link automatically displays a small player which can then be clicked upon to get the full size. This is all very nice but has an untoward side effect. Basically, every link to a video file (or audio file) //automatically loads the video// as soon as the page is opened (to make playing easier). But since the blog displays all the entries on a single page (that's what it is designed to do) this means that //all// the video clips referenced get loaded //every time// the blog is opened. As you can imagine this does not scale well. Thus by March 9^^th^^ Adndrew Crosman's ~OUBlog for example had no fewer than 38 clips all loading at the same time. It takes //minutes// to fully load this page.
!!Enter ~OUWIki
Try using OUWIki instead.
3 different configuration options:
* single wiki for course -- no, because we need individual places
* separate wiki per user -- this would seem to be ideal, ''but'' each wiki is only accessible by the user. However, Bernie needs to get access in order to place the video links
* one wiki per group. Create groups whereby each group is named after the single person that belongs to it. Simple and effective.
!!!Wiki template
!!!Video Wiki in operation
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!!Problem
Vince cannot seem to login to moodle with the standard username and password he uses for email. Is this an LDAP problem? A Moodle issue? or a browser issue perhaps?
!!!Access
;Production Moodle
: {{{First access:	Monday, 2 August 2010, 03:48 pm  (91 days 18 hours)}}}
: {{{Last access:	Friday, 20 August 2010, 01:59 pm  (73 days 20 hours)}}}
; [[EIS Moodle 2008-10|https://moodle08-10.earlham.edu:2443]]
:{{{First access:	Tuesday, 17 November 2009, 04:30 pm  (348 days 22 hours)}}}
:{{{Last access:	Monday, 16 August 2010, 05:02 pm  (76 days 23 hours)}}}
!!!Logs
+++[EIS Moodle 08-10]>
|!Course|!Time|!IP Address|!Full name|!Action|!Information|
|Moodle08-10|Mon 16 August 2010, 05:02 pm|75.207.154.216|Vince Punzo|user login|2306|
|Moodle08-10|Mon 16 August 2010, 05:01 pm|75.207.154.216|Vince Punzo|user login|2306|
|Moodle08-10|Mon 19 April 2010, 08:20 pm|159.28.1.45|Vince Punzo|user login|2306|
|Moodle08-10|Mon 19 April 2010, 01:35 pm|159.28.1.45|Vince Punzo|user login|2306|
|Moodle08-10|Thu 14 January 2010, 02:41 pm|159.28.21.49|Vince Punzo|user logout|2306|
|~PSYC238:200920|Thu 14 January 2010, 02:39 pm|159.28.21.49|Vince Punzo|course view|~PSYC238:200920 - Human Development|
|Moodle08-10|Thu 14 January 2010, 02:39 pm|159.28.21.49|Vince Punzo|user login|2306|
|Moodle08-10|Tue 12 January 2010, 02:26 pm|159.28.21.49|Vince Punzo|user logout|2306|
|Moodle08-10|Tue 12 January 2010, 02:26 pm|159.28.21.49|Vince Punzo|user login|2306|
|Moodle08-10|Tue 12 January 2010, 11:50 am|159.28.21.49|Vince Punzo|user logout|2306|
|~PSYC238:201020|Tue 12 January 2010, 11:49 am|159.28.21.49|Vince Punzo|course view|~PSYC238:201020 - Human Development|
|~PSYC238:201020|Tue 12 January 2010, 11:48 am|159.28.21.49|Vince Punzo|resource view|Guidelines For Research Project|

This shows that his account was actually logged in to!
=== 
!!Approach
# Change password to temporary
# No current account -- Login to [[Moodle testbed 2011|http://rublev.lly.earlham.edu/~markp/moo-2011t/]] -- LDAP not set up yet.
# Current account deleted -- login to [[Moodle pilot|http://rublev.lly.earlham.edu/~markp/LAE-199/]] +++[Results]>
Login works fine (Firefox 3.6)
Log:
{{{
Moodle Pilot 	Tue 2 November 2010, 02:26 pm 	159.28.7.95 	Vincent Punzo 	user logout 	320
Moodle Pilot 	Tue 2 November 2010, 02:26 pm 	159.28.7.95 	Vincent Punzo 	course view 	Moodle Pilot
Moodle Pilot 	Tue 2 November 2010, 02:25 pm 	159.28.7.95 	Vincent Punzo 	user view 	Vincent Punzo
Moodle Pilot 	Tue 2 November 2010, 02:23 pm 	159.28.7.95 	Vincent Punzo 	course view 	Moodle Pilot
Moodle Pilot 	Tue 2 November 2010, 02:23 pm 	159.28.7.95 	Vincent Punzo 	course view 	Moodle Pilot
Moodle Pilot 	Tue 2 November 2010, 02:23 pm 	159.28.7.95 	Vincent Punzo 	user login 	320
}}}
I think that {{{320}}} is the user id.
=== 
# Current account (never used) -- login to [[Moodle pilot|http://rublev.lly.earlham.edu/~markp/LAE-199/]]
** ''delete account'' -- try again to login. Check Reports -> Logs for appropriate activity
# Current account (not openable?) on [[Moodle08-10|https://moodle08-10.earlham.edu:2443/login/index.php]]
** check reports -> logs
** delete account and try to login again (use a different browser -- Flock)
** +++[Results]>
Attempt #1 -- ''fail''
;Error message:
:{{{You cannot proceed without changing your password, however there is no available page for changing it. Please contact your Moodle Administrator.}}}
Login (with Firefox) as sys admin. Check account. Notice that Force password change is ''checked''.
Uncheck and Update profile.
Try again -- @@success@@
Notice  PSYCH238:200920 log:
{{{
Thu 14 January 2010, 02:39 pm 	159.28.21.49 	Vince Punzo 	course view 	PSYC238:200920 - Human Development
}}}
=== 
# Login to [[production moodle|https://moodle.earlham.edu]] with Flock +++[Results]>
Check Account. Force password change set on. Switch ''off'' 
@@But@@ -- three courses already ordered in 'Other fields': Order of courses in MyMoodle. This implies that he has actually logged in.
Login from Flock -- @@success@@
Reports : login:
{{{
Moodle 	Tue 2 November 2010, 11:20 am 	159.28.7.95 	Vincent Punzo 	user login 	90
}}}
[[Login screenshot|graphics/vince-login-moodle.png]]<<imagebox "note Moodle Tips (latest docs), EIS Moodle happenings (lastest news), and Handy Links for Faculty">>
=== 
[[Voicethread| ]] now has [[nice integration options|http://voicethread.com/support/howto/LMS_Integration/]]:
* Moodle __Repository module__ allows easy access to VoiceThreads to post on your Moodle site. A listing of created VoiceThreads will appear in the Moodle file picker, and a link will be created for your selected VoiceThread. ''v 2 only''
*  __Embedding module__ provides easy embedding of threads in Moodle forums, resources and pages. This module has no additional account requirements. ''v 1.9 version''
*  __“Create a Thread” Assignment module__ allows instructors to give a student an assignment of type “create a thread”. The students submit a thread from a list of their threads, and the instructor can grade it using the standard Moodle gradebook interface. ''requires moodle authentication''
* Moodle __Authentication module__ turns Moodle into a VoiceThread-specific Single-Sign-On provider. This allows an organization to use VoiceThread without a separate username and password, even if they do not already have (or wish to integrate) an existing central login or single-sign-on system.
Nice.

<html><img src="http://simonbaird.com/images/mptwlogosml.gif" alt="logo" align="right"></html>Welcome to MPTW, the TiddlyWiki formerly known as MonkeyPirateTiddlyWiki. MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some [[plugins|systemConfig]] designed to improve usability and provide a better way to [[organise your information|TagglyTagging]].
* [[Why use MPTW?]]
* [[Using "TagglyTagging" to organise your data|TagglyTagging]]
* [[MPTW Plugins|systemConfig]]

MPTW has all the power and convenience of standard TiddlyWiki but it includes a new way of managing your data called TagglyTagging. TagglyTagging makes it easier to keep your information organised and structured. It does this using an enhanced version of the built in tagging macro and a few other complimentary tools like the 'new here' button. To learn more see the [[FAQ|TagglyTagging FAQ]] and the [[Tutorial|TagglyTagging Tutorial]].
If you've no idea what a wiki is then perhaps you're jumping in the deep end a little bit. But you can read [[this page in WikiPedia|http://en.wikipedia.org/wiki/Wiki]], the most famous wiki of all. Note that TiddlyWiki is different to other wikis in that:
* it doesn't require a server and a database to run
* it's focus is on personal use rather than multi-user collaboration
!!Working with ~TiddlyWiki
;Getting Tiddlywiki:
: Go to http://tiddlywiki.com/ and Download. (notes about downloading)
;Load into browser:
: note the {{{file:///}}} URL
!!!~TiddlyWiki layout

[img[http://www.giffmex.org/images/mainscreen.GIF]]

!!!Configuration
# decide on saving Options
# Change ~SiteTitle and ~SiteSubtitle tiddlers
** configuration //within tiddlywiki itself//
# change ~SiteURL if placing this in your web space
# take a look at the ~MainMenu tiddler -- change this when you need to
# take a look at ~DefaultTiddlers which get loaded up at startup
# +++[advanced options / backstage]
* Automatic backup in separate directory. (Keep backup file / name of folder for backup)
* Generate RSS feed
* # rows in edit box
* no update modifier username and date
* clicking open links closes
=== 
!!!New tiddler
Create:
* click on @@new tiddler@@ or @@new journal@@ (tiddler with a date)
* link to an as yet uncreated tiddler with the standard wiki link {{{[[tiddler name]]}}}
* type in a title for the tiddler in the header (can make in ~CamelCase). See [[Anatomy of a tiddler|http://giffmex.org/twfortherestofus.html#%5B%5BAnatomy%20of%20a%20Tiddler%5D%5D]]
* Type in your content. If you have set up ~FireFox you'll get an automatic spellchecker. Format the text using the simple [[TiddlyWiki Markup]].
* either type in a new tag or choose from the @@existing tags@@ pulldown.
* click @@[done]@@ -- saves (and backups) automatically.

!![[Plugins and TiddlyWiki functionality]]
<!--{{{-->
<span class='yourSearchNumber' macro='foundTiddler number'></span>
<span class='yourSearchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;
<span macro='foundTiddler field includeURL'/></span>&nbsp;-&nbsp;
<span class='yourSearchTags' macro='foundTiddler field tags 50'/></span>
<span macro="yourSearch if previewText"><div class='yourSearchText' macro='foundTiddler field text 250'/></div></span>
<!--}}}-->
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.3 (2008-04-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2008 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.3.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:3,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2008 (www.abego-software.de)"};if(!window.abego){window.abego={};}
if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,len=_1.length;i<len;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,len=this.length;i<len;i++){_5.call(_6,this[i],i,this);}};}
abego.toInt=function(s,_9){if(!s){return _9;}
var n=parseInt(s);return(n==NaN)?_9:n;};abego.createEllipsis=function(_b){var e=createTiddlyElement(_b,"span");e.innerHTML="&hellip;";};abego.shallowCopy=function(_d){if(!_d){return _d;}
var _e={};for(var n in _d){_e[n]=_d[n];}
return _e;};abego.copyOptions=function(_10){return!_10?{}:abego.shallowCopy(_10);};abego.countStrings=function(_11,s){if(!s){return 0;}
var len=s.length;var n=0;var _15=0;while(1){var i=_11.indexOf(s,_15);if(i<0){return n;}
n++;_15=i+len;}
return n;};abego.getBracedText=function(_17,_18,_19){if(!_18){_18=0;}
var re=/\{([^\}]*)\}/gm;re.lastIndex=_18;var m=re.exec(_17);if(m){var s=m[1];var _1d=abego.countStrings(s,"{");if(!_1d){if(_19){_19.lastIndex=re.lastIndex;}
return s;}
var len=_17.length;for(var i=re.lastIndex;i<len&&_1d;i++){var c=_17.charAt(i);if(c=="{"){_1d++;}else{if(c=="}"){_1d--;}}}
if(!_1d){if(_19){_19.lastIndex=i-1;}
return _17.substring(m.index+1,i-1);}}};abego.select=function(_21,_22,_23,_24){if(!_24){_24=[];}
_21.forEach(function(t){if(_22.call(_23,t)){_24.push(t);}});return _24;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}
if(e.preventDefault){e.preventDefault();}
e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_27,_28){if(!_28){_28={};}
var _29=_27;if(!_28.textIsRegExp){_29=_27.escapeRegExp();if(_28.fullWordMatch){_29="\\b"+_29+"\\b";}}
var _2a=new RegExp(_29,"m"+(_28.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_2a,_28.fields,_28.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_2b){return this.tester.test(_2b);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}
if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}
var _30=m[2]?m[2].trim():"";r.push({name:"text",value:_30});r[0].text=[_30];return{title:m[1].trim(),params:r};}else{return{title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_31,_32,_33){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _35={"!":"title","%":"text","#":"tags"};var _36={};var _37;re.lastIndex=_32;while(1){var i=re.lastIndex;var m=re.exec(_31);if(!m||m.index!=i){throw"Word or String literal expected";}
if(m[1]){var _3a={};var _3b=abego.getBracedText(_31,0,_3a);if(!_3b){throw"Invalid {...} syntax";}
var f=Function("tiddler","return ("+_3b+");");return{func:f,lastIndex:_3a.lastIndex,markRE:null};}
if(m[2]){_37=true;}else{if(m[3]){_36[_35[m[3]]]=1;}else{if(m[4]){_36[m[4]]=1;}else{var _3d=m[6];var _3e=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _33=abego.copyOptions(_33);_33.fullWordMatch=_37;_33.textIsRegExp=_3d;var _3f=[];for(var n in _36){_3f.push(n);}
if(_3f.length==0){_33.fields=_33.defaultFields;}else{_33.fields=_3f;_33.withExtendedFields=false;}
var _41=new abego.TiddlerFilterTerm(_3e,_33);var _42=_3d?_3e:_3e.escapeRegExp();if(_42&&_37){_42="\\b"+_42+"\\b";}
return{func:function(_43){return _41.test(_43);},lastIndex:re.lastIndex,markRE:_42?"(?:"+_42+")":null};}}}}};abego.BoolExp=function(s,_45,_46){this.s=s;var _47=_46&&_46.defaultOperationIs_OR;var _48=/\s*(?:(\-|not)|(\())/gi;var _49=/\s*\)/g;var _4a=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _4b=/\s*[^\)\s]/g;var _4c=/\s*(\-|not)?(\s*\()?/gi;var _4d;var _4e=function(_4f){_4c.lastIndex=_4f;var m=_4c.exec(s);var _51;var _52;if(m&&m.index==_4f){_4f+=m[0].length;_51=m[1];if(m[2]){var e=_4d(_4f);_49.lastIndex=e.lastIndex;if(!_49.exec(s)){throw"Missing ')'";}
_52={func:e.func,lastIndex:_49.lastIndex,markRE:e.markRE};}}
if(!_52){_52=_45(s,_4f,_46);}
if(_51){_52.func=(function(f){return function(_55){return!f(_55);};})(_52.func);_52.markRE=null;}
return _52;};_4d=function(_56){var _57=_4e(_56);while(1){var l=_57.lastIndex;_4a.lastIndex=l;var m=_4a.exec(s);var _5a;var _5b;if(m&&m.index==l){_5a=!m[1];_5b=_4e(_4a.lastIndex);}else{try{_5b=_4e(l);}
catch(e){return _57;}
_5a=_47;}
_57.func=(function(_5c,_5d,_5e){return _5e?function(_5f){return _5c(_5f)||_5d(_5f);}:function(_60){return _5c(_60)&&_5d(_60);};})(_57.func,_5b.func,_5a);_57.lastIndex=_5b.lastIndex;if(!_57.markRE){_57.markRE=_5b.markRE;}else{if(_5b.markRE){_57.markRE=_57.markRE+"|"+_5b.markRE;}}}};var _61=_4d(0);this.evalFunc=_61.func;if(_61.markRE){this.markRegExp=new RegExp(_61.markRE,_46.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_63,_64){this.re=re;this.fields=_63?_63:["title","text","tags"];this.withExtendedFields=_64;};abego.MultiFieldRegExpTester.prototype.test=function(_65){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_65,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}
if(this.withExtendedFields){return store.forEachField(_65,function(_69,_6a,_6b){return typeof _6b=="string"&&re.test(_6b)?_6a:null;},true);}
return null;};abego.TiddlerQuery=function(_6c,_6d,_6e,_6f,_70){if(_6e){this.regExp=new RegExp(_6c,_6d?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_6f,_70);}else{this.expr=new abego.BoolExp(_6c,abego.parseTiddlerFilterTerm,{defaultFields:_6f,caseSensitive:_6d,withExtendedFields:_70});}
this.getQueryText=function(){return _6c;};this.getUseRegExp=function(){return _6e;};this.getCaseSensitive=function(){return _6d;};this.getDefaultFields=function(){return _6f;};this.getWithExtendedFields=function(){return _70;};};abego.TiddlerQuery.prototype.test=function(_71){if(!_71){return false;}
if(this.regExp){return this.tester.test(_71);}
return this.expr.exec(_71);};abego.TiddlerQuery.prototype.filter=function(_72){return abego.select(_72,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return"".search(this.regExp)>=0?null:this.regExp;}
return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return(this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_73){this.items=_73;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_74){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_75){this.firstIndexOnPage=Math.min(Math.max(0,_75),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_76,_77){},renderPage:function(_78){if(_78.beginRendering){_78.beginRendering(this);}
try{if(this.getItemsCount()){var _79=this.getLastIndexOnPage();var _7a=-1;for(var i=this.getFirstIndexOnPage();i<=_79;i++){_7a++;_78.render(this,this.items[i],i,_7a);}}}
finally{if(_78.endRendering){_78.endRendering(this);}}},addPageNavigation:function(_7c){if(!this.getItemsCount()){return;}
var _7d=this;var _7e=function(e){if(!e){var e=window.event;}
abego.consumeEvent(e);var _80=abego.toInt(this.getAttribute("page"),0);var _81=_7d.getCurrentPageIndex();if(_80==_81){return;}
var _82=_80*_7d.getItemsPerPage();_7d.setFirstIndexOnPage(_82);_7d.onPageChanged(_80,_81);};var _83;var _84=this.getCurrentPageIndex();var _85=this.getLastPageIndex();if(_84>0){_83=createTiddlyButton(_7c,"Previous","Go to previous page (Shortcut: Alt-'<')",_7e,"prev");_83.setAttribute("page",(_84-1).toString());_83.setAttribute("accessKey","<");}
for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _87=_84+i;if(_87<0){continue;}
if(_87>_85){break;}
var _88=(i+_84+1).toString();var _89=_87==_84?"currentPage":"otherPage";_83=createTiddlyButton(_7c,_88,"Go to page %0".format([_88]),_7e,_89);_83.setAttribute("page",(_87).toString());}
if(_84<_85){_83=createTiddlyButton(_7c,"Next","Go to next page (Shortcut: Alt-'>')",_7e,"next");_83.setAttribute("page",(_84+1).toString());_83.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _8a=40;var _8b=4;var _8c=function(_8d,_8e,_8f){var n=_8d.length;if(n==0){_8d.push({start:_8e,end:_8f});return;}
var i=0;for(;i<n;i++){var _92=_8d[i];if(_92.start<=_8f&&_8e<=_92.end){var r;var _94=i+1;for(;_94<n;_94++){r=_8d[_94];if(r.start>_8f||_8e>_92.end){break;}}
var _95=_8e;var _96=_8f;for(var j=i;j<_94;j++){r=_8d[j];_95=Math.min(_95,r.start);_96=Math.max(_96,r.end);}
_8d.splice(i,_94-i,{start:_95,end:_96});return;}
if(_92.start>_8f){break;}}
_8d.splice(i,0,{start:_8e,end:_8f});};var _98=function(_99){var _9a=0;for(var i=0;i<_99.length;i++){var _9c=_99[i];_9a+=_9c.end-_9c.start;}
return _9a;};var _9d=function(c){return(c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _9f=function(s,_a1){if(!_9d(s[_a1])){return null;}
for(var i=_a1-1;i>=0&&_9d(s[i]);i--){}
var _a3=i+1;var n=s.length;for(i=_a1+1;i<n&&_9d(s[i]);i++){}
return{start:_a3,end:i};};var _a5=function(s,_a7,_a8){var _a9;if(_a8){_a9=_9f(s,_a7);}else{if(_a7<=0){return _a7;}
_a9=_9f(s,_a7-1);}
if(!_a9){return _a7;}
if(_a8){if(_a9.start>=_a7-_8b){return _a9.start;}
if(_a9.end<=_a7+_8b){return _a9.end;}}else{if(_a9.end<=_a7+_8b){return _a9.end;}
if(_a9.start>=_a7-_8b){return _a9.start;}}
return _a7;};var _aa=function(s,_ac){var _ad=[];if(_ac){var _ae=0;var n=s.length;var _b0=0;do{_ac.lastIndex=_ae;var _b1=_ac.exec(s);if(_b1){if(_ae<_b1.index){var t=s.substring(_ae,_b1.index);_ad.push({text:t});}
_ad.push({text:_b1[0],isMatch:true});_ae=_b1.index+_b1[0].length;}else{_ad.push({text:s.substr(_ae)});break;}}while(true);}else{_ad.push({text:s});}
return _ad;};var _b3=function(_b4){var _b5=0;for(var i=0;i<_b4.length;i++){if(_b4[i].isMatch){_b5++;}}
return _b5;};var _b7=function(s,_b9,_ba,_bb,_bc){var _bd=Math.max(Math.floor(_bc/(_bb+1)),_8a);var _be=Math.max(_bd-(_ba-_b9),0);var _bf=Math.min(Math.floor(_ba+_be/3),s.length);var _c0=Math.max(_bf-_bd,0);_c0=_a5(s,_c0,true);_bf=_a5(s,_bf,false);return{start:_c0,end:_bf};};var _c1=function(_c2,s,_c4){var _c5=[];var _c6=_b3(_c2);var pos=0;for(var i=0;i<_c2.length;i++){var t=_c2[i];var _ca=t.text;if(t.isMatch){var _cb=_b7(s,pos,pos+_ca.length,_c6,_c4);_8c(_c5,_cb.start,_cb.end);}
pos+=_ca.length;}
return _c5;};var _cc=function(s,_ce,_cf){var _d0=_cf-_98(_ce);while(_d0>0){if(_ce.length==0){_8c(_ce,0,_a5(s,_cf,false));return;}else{var _d1=_ce[0];var _d2;var _d3;if(_d1.start==0){_d2=_d1.end;if(_ce.length>1){_d3=_ce[1].start;}else{_8c(_ce,_d2,_a5(s,_d2+_d0,false));return;}}else{_d2=0;_d3=_d1.start;}
var _d4=Math.min(_d3,_d2+_d0);_8c(_ce,_d2,_d4);_d0-=(_d4-_d2);}}};var _d5=function(_d6,s,_d8,_d9,_da){if(_d9.length==0){return;}
var _db=function(_dc,s,_de,_df,_e0){var t;var _e2;var pos=0;var i=0;var _e5=0;for(;i<_de.length;i++){t=_de[i];_e2=t.text;if(_df<pos+_e2.length){_e5=_df-pos;break;}
pos+=_e2.length;}
var _e6=_e0-_df;for(;i<_de.length&&_e6>0;i++){t=_de[i];_e2=t.text.substr(_e5);_e5=0;if(_e2.length>_e6){_e2=_e2.substr(0,_e6);}
if(t.isMatch){createTiddlyElement(_dc,"span",null,"marked",_e2);}else{createTiddlyText(_dc,_e2);}
_e6-=_e2.length;}
if(_e0<s.length){abego.createEllipsis(_dc);}};if(_d9[0].start>0){abego.createEllipsis(_d6);}
var _e7=_da;for(var i=0;i<_d9.length&&_e7>0;i++){var _e9=_d9[i];var len=Math.min(_e9.end-_e9.start,_e7);_db(_d6,s,_d8,_e9.start,_e9.start+len);_e7-=len;}};this.render=function(_eb,s,_ed,_ee){if(s.length<_ed){_ed=s.length;}
var _ef=_aa(s,_ee);var _f0=_c1(_ef,s,_ed);_cc(s,_f0,_ed);_d5(_eb,s,_ef,_f0,_ed);};};(function(){function alertAndThrow(msg){alert(msg);throw msg;}
if(version.major<2||(version.major==2&&version.minor<1)){alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}
abego.YourSearch={};var _f2;var _f3;var _f4=function(_f5){_f2=_f5;};var _f6=function(){return _f2?_f2:[];};var _f7=function(){return _f2?_f2.length:0;};var _f8=4;var _f9=10;var _fa=2;var _fb=function(s,re){var m=s.match(re);return m?m.length:0;};var _ff=function(_100,_101){var _102=_101.getMarkRegExp();if(!_102){return 1;}
var _103=_100.title.match(_102);var _104=_103?_103.length:0;var _105=_fb(_100.getTags(),_102);var _106=_103?_103.join("").length:0;var _107=_100.title.length>0?_106/_100.title.length:0;var rank=_104*_f8+_105*_fa+_107*_f9+1;return rank;};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_f3=null;var _110=_10a.reverseLookup("tags",_10f,false);try{var _111=[];if(config.options.chkSearchInTitle){_111.push("title");}
if(config.options.chkSearchInText){_111.push("text");}
if(config.options.chkSearchInTags){_111.push("tags");}
_f3=new abego.TiddlerQuery(_10b,_10c,_10d,_111,config.options.chkSearchExtendedFields);}
catch(e){return[];}
var _112=_f3.filter(_110);var _113=abego.YourSearch.getRankFunction();for(var i=0;i<_112.length;i++){var _115=_112[i];var rank=_113(_115,_f3);_115.searchRank=rank;}
if(!_10e){_10e="title";}
var _117=function(a,b){var _11a=a.searchRank-b.searchRank;if(_11a==0){if(a[_10e]==b[_10e]){return(0);}else{return(a[_10e]<b[_10e])?-1:+1;}}else{return(_11a>0)?-1:+1;}};_112.sort(_117);return _112;};var _11b=80;var _11c=50;var _11d=250;var _11e=50;var _11f=25;var _120=10;var _121="yourSearchResult";var _122="yourSearchResultItems";var _123;var _124;var _125;var _126;var _127;var _128=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}
version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _129=function(){return _124!=null&&_124.parentNode==document.body;};var _12a=function(){if(_129()){document.body.removeChild(_124);}};var _12b=function(e){_12a();var _12d=this.getAttribute("tiddlyLink");if(_12d){var _12e=this.getAttribute("withHilite");var _12f=highlightHack;if(_12e&&_12e=="true"&&_f3){highlightHack=_f3.getMarkRegExp();}
story.displayTiddler(this,_12d);highlightHack=_12f;}
return(false);};var _130=function(){if(!_125){return;}
var root=_125;var _132=findPosX(root);var _133=findPosY(root);var _134=root.offsetHeight;var _135=_132;var _136=_133+_134;var _137=findWindowWidth();if(_137<_124.offsetWidth){_124.style.width=(_137-100)+"px";_137=findWindowWidth();}
var _138=_124.offsetWidth;if(_135+_138>_137){_135=_137-_138-30;}
if(_135<0){_135=0;}
_124.style.left=_135+"px";_124.style.top=_136+"px";_124.style.display="block";};var _139=function(){if(_124){window.scrollTo(0,ensureVisible(_124));}
if(_125){window.scrollTo(0,ensureVisible(_125));}};var _13a=function(){_130();_139();};var _13b;var _13c;var _13d=new abego.PageWiseRenderer();var _13e=function(_13f){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){alertAndThrow("YourSearchItemTemplate not found");}
this.place=document.getElementById(_122);if(!this.place){this.place=createTiddlyElement(_13f,"div",_122);}};merge(_13e.prototype,{render:function(_140,_141,_142,_143){_13b=_143;_13c=_141;var item=createTiddlyElement(this.place,"div",null,"yourSearchItem");item.innerHTML=this.itemHtml;applyHtmlMacros(item,null);refreshElements(item,null);},endRendering:function(_145){_13c=null;}});var _146=function(){if(!_124||!_125){return;}
var html=store.getTiddlerText("YourSearchResultTemplate");if(!html){html="<b>Tiddler YourSearchResultTemplate not found</b>";}
_124.innerHTML=html;applyHtmlMacros(_124,null);refreshElements(_124,null);var _148=new _13e(_124);_13d.renderPage(_148);_13a();};_13d.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_120):abego.toInt(config.options.txtItemsPerPage,_11f);return(n>0)?n:1;};_13d.onPageChanged=function(){_146();};var _14a=function(){if(_125==null||!config.options.chkUseYourSearch){return;}
if((_125.value==_123)&&_123&&!_129()){if(_124&&(_124.parentNode!=document.body)){document.body.appendChild(_124);_13a();}else{abego.YourSearch.onShowResult(true);}}};var _14b=function(){_12a();_124=null;_123=null;};var _14c=function(self,e){while(e!=null){if(self==e){return true;}
e=e.parentNode;}
return false;};var _14f=function(e){if(e.target==_125){return;}
if(e.target==_126){return;}
if(_124&&_14c(_124,e.target)){return;}
_12a();};var _151=function(e){if(e.keyCode==27){_12a();}};addEvent(document,"click",_14f);addEvent(document,"keyup",_151);var _153=function(text,_155,_156){_123=text;_f4(_109(store,text,_155,_156,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _157=function(_158,_159,_15a,_15b,_15c,_15d){_128();_123="";var _15e=null;var _15f=function(txt){if(config.options.chkUseYourSearch){_153(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}
_123=txt.value;};var _161=function(e){_15f(_125);return false;};var _163=function(e){if(!e){var e=window.event;}
_125=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_127&&_129()){_127.onclick.apply(_127,[e]);}else{_15f(this);}
break;case 27:if(_129()){_12a();}else{this.value="";clearMessage();}
break;}
if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_14a();}
if(this.value.length<3&&_15e){clearTimeout(_15e);}
if(this.value.length>2){if(this.value!=_123){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_15e){clearTimeout(_15e);}
var txt=this;_15e=setTimeout(function(){_15f(txt);},500);}}else{if(_15e){clearTimeout(_15e);}}}
if(this.value.length==0){_12a();}};var _166=function(e){this.select();clearMessage();_14a();};var args=_15c.parseParams("list",null,true);var _169=getFlag(args,"buttonAtRight");var _16a=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
var txt=createTiddlyElement(_158,"input",null,null,null);if(_15a[0]){txt.value=_15a[0];}
txt.onkeyup=_163;txt.onfocus=_166;txt.setAttribute("size",_16a);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}
if(_169){btn=createTiddlyButton(_158,this.label,this.prompt,_161);}
_125=txt;_126=btn;};var _16d=function(){_12a();var _16e=_f6();var n=_16e.length;if(n){var _170=[];for(var i=0;i<n;i++){_170.push(_16e[i].title);}
story.displayTiddlers(null,_170);}};var _172=function(_173,_174,_175,_176){invokeMacro(_173,"option",_174,_175,_176);var elem=_173.lastChild;var _178=elem.onclick;elem.onclick=function(e){var _17a=_178.apply(this,arguments);_146();return _17a;};return elem;};var _17b=function(s){var _17d=["''","{{{","}}}","//","<<<","/***","***/"];var _17e="";for(var i=0;i<_17d.length;i++){if(i!=0){_17e+="|";}
_17e+="("+_17d[i].escapeRegExp()+")";}
return s.replace(new RegExp(_17e,"mg"),"").trim();};var _180=function(){var i=_13b;return(i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _182=new abego.LimitedTextRenderer();var _183=function(_184,s,_186){_182.render(_184,s,_186,_f3.getMarkRegExp());};var _187=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_188,_189,_18a,_18b,_18c,tags,_18e){_187.apply(this,arguments);_14b();};var _18f=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_190){_18f.apply(this,arguments);_14b();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_191,_192,_193,_194,_195,_196){if(_193.length==0){return;}
var name=_193[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_191,_192,_193,_194,_195,_196);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _f7()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_199){if(_f7()){var _19a=_13d.getLastIndexOnPage();var s="%0 - %1".format([_13d.getFirstIndexOnPage()+1,_19a+1]);createTiddlyText(_199,s);}},count:function(_19c){createTiddlyText(_19c,_f7().toString());},query:function(_19d){if(_f3){createTiddlyText(_19d,_f3.toString());}},version:function(_19e){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_19e,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_1a1){var e=createTiddlyElement(_1a1,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_1a3){if(_f3){var r=abego.parseNewTiddlerCommandLine(_f3.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_1a3,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _1a6=btn.onclick;btn.onclick=function(){_12a();_1a6.apply(this,arguments);};_127=btn;}},linkButton:function(_1a7,_1a8,_1a9,_1aa,_1ab,_1ac){if(_1a9<2){return;}
var _1ad=_1a9[1];var text=_1a9<3?_1ad:_1a9[2];var _1af=_1a9<4?text:_1a9[3];var _1b0=_1a9<5?null:_1a9[4];var btn=createTiddlyButton(_1a7,text,_1af,_12b,null,null,_1b0);btn.setAttribute("tiddlyLink",_1ad);},closeButton:function(_1b2,_1b3,_1b4,_1b5,_1b6,_1b7){var _1b8=createTiddlyButton(_1b2,"close","Close the Search Results (Shortcut: ESC)",_12a);},openAllButton:function(_1b9,_1ba,_1bb,_1bc,_1bd,_1be){var n=_f7();if(n==0){return;}
var _1c0=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _1c1=createTiddlyButton(_1b9,_1c0,"Open all found tiddlers (Shortcut: Alt-O)",_16d);_1c1.setAttribute("accessKey","O");},naviBar:function(_1c2,_1c3,_1c4,_1c5,_1c6,_1c7){_13d.addPageNavigation(_1c2);},"if":function(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd){if(_1ca.length<2){return;}
var _1ce=_1ca[1];var _1cf=(_1ce=="not");if(_1cf){if(_1ca.length<3){return;}
_1ce=_1ca[2];}
var test=config.macros.yourSearch.tests[_1ce];var _1d1=false;try{if(test){_1d1=test(_1c8,_1c9,_1ca,_1cb,_1cc,_1cd)!=_1cf;}else{_1d1=(!eval(_1ce))==_1cf;}}
catch(ex){}
if(!_1d1){_1c8.style.display="none";}},chkPreviewText:function(_1d2,_1d3,_1d4,_1d5,_1d6,_1d7){var _1d8=_1d4.slice(1).join(" ");var elem=_172(_1d2,"chkPreviewText",_1d5,_1d7);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_1da,_1db,_1dc,_1dd,_1de,_1df){var name=_1dc[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_1da,_1db,_1dc,_1dd,_1de,_1df);}},funcs:{title:function(_1e2,_1e3,_1e4,_1e5,_1e6,_1e7){if(!_13c){return;}
var _1e8=_180();var _1e9=_1e8>=0?"Open tiddler (Shortcut: Alt-%0)".format([_1e8.toString()]):"Open tiddler";var btn=createTiddlyButton(_1e2,null,_1e9,_12b,null);btn.setAttribute("tiddlyLink",_13c.title);btn.setAttribute("withHilite","true");_183(btn,_13c.title,_11b);if(_1e8>=0){btn.setAttribute("accessKey",_1e8.toString());}},tags:function(_1eb,_1ec,_1ed,_1ee,_1ef,_1f0){if(!_13c){return;}
_183(_1eb,_13c.getTags(),_11c);},text:function(_1f1,_1f2,_1f3,_1f4,_1f5,_1f6){if(!_13c){return;}
_183(_1f1,_17b(_13c.text),_11d);},field:function(_1f7,_1f8,_1f9,_1fa,_1fb,_1fc){if(!_13c){return;}
var name=_1f9[1];var len=_1f9.length>2?abego.toInt(_1f9[2],_11e):_11e;var v=store.getValue(_13c,name);if(v){_183(_1f7,_17b(v),len);}},number:function(_200,_201,_202,_203,_204,_205){var _206=_180();if(_206>=0){var text="%0)".format([_206.toString()]);createTiddlyElement(_200,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_11f,txtItemsPerPageWithPreview:_120};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}
config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet&quo