<!--{{{-->
<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]];}

#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; 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 closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></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 +saveTiddler -cancelTiddler deleteTiddler'></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'></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>>
In Socialtext Unplugged, the selected pages of your Socialtext workspace are displayed as individual "tiddlers" on the page. When the mouse passes over a tiddler a short toolbar menu appears at the top right. Use the commands here to manipulate that particular tiddler: notably closing and editting it. (You can double click on a tiddler as a shortcut to directly enter edit mode).

Over on the right hand side of the window are commands that affect the entire page, in particular "close all" which can be useful to clear the decks when many tiddlers are open at once.

The user is encouraged to ensure that they can SaveChanges before embarking on widespread editing.
Welcome to Socialtext Unplugged. This is a specially designed web page that you can use to view and edit your Socialtext content without having to be online to your Socialtext server.

There are three steps to using Socialtext Unplugged:
* First, learn how to SaveChanges to your local hard drive. This keeps your work safe even if you close your browser or have to reboot your computer
* Secondly, find out how to BrowseAndEdit your content while it is unplugged
* Thirdly, when you can reconnect to your Socialtext server, you can SyncChanges to save your unplugged changes to the server so that other people can see them too

You should also check your system meets the SystemRequirements.
Socialtext Unplugged lets you browse and edit your content while you're offline. When you make a change you need to SaveChanges to save the change to your local hard drive, before later performing a SyncChanges to synchronise the change back to the server.

The procedure for SaveChanges is slightly different for different browsers:
* SavingOnInternetExplorer
* SavingOnFireFox
* SavingOnSafari
* SavingOnOpera
You can save changes with any version of FireFox, and also many other browsers in the FireFox family, such as Camino on the Mac and MiniMo on mobile devices. The procedure is:
# Click the button labelled 'save changes' over in the right hand sidebar
# If prompted with an "Internet Security" dialog as follows, click the checkbox labelled "Remember this decision" and then the "Allow" button
## "A script from "file://" is requesting enhanced capabilities that are UNSAFE and could be used to compromise your machine or data..."
# You should then see a message at the top right of the window saying "Main TiddlyWiki file saved"
If you accidentally //deny// permission instead, you may need to UnravelFireFoxPermissions.
You can save changes with Internet Explorer versions 6 and 7, but not the earlier versions. The procedure is:
# Click the button labelled 'save changes' over in the right hand sidebar
# If prompted as follows, click "Yes":
## "An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?"
# You should then see a message at the top right of the window saying "Main TiddlyWiki file saved"
Note that there is currently [[a bug|http://trac.tiddlywiki.org/tiddlywiki/ticket/39]] that prevents Internet Explorer from saving correctly if you have specified a backup directory in AdvancedOptions.
To SaveChanges on Opera, see the instructions for using the TiddlySaver Java applet.
To SaveChanges on Safari, see the instructions for using the TiddlySaver Java applet.
<<search>><<closeAll>><<permaview>><<newTiddler 'New Tiddler' fields:'server.host:"https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443" server.workspace:"koha" wikiformat:socialtext'>><<newJournal 'DD MMM YYYY' fields:'server.host:"https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443" server.workspace:"koha" wikiformat:socialtext'>><<saveChanges>><<backstage sync>><<slider chkSliderOptionsPanel OptionsPanel 'options ยป' 'Change TiddlyWiki advanced options'>>
KOHA
Socialtext Unplugged
https://saturn.ffzg.hr/koha/
[[SocialtextScreenStyle]]
[[SocialtextStyleOverrides]]
[[Styles HorizontalMainMenu]]
<<sync>>
@@The user interface for synchronization is not finalized@@
To synchronize your changes back to the Socialtext server:
# click on [[Sync]] in the right-hand sidebar
<<tabs txtMoreTab Orphans 'Orphaned tiddlers' TabMoreOrphans Shadowed 'Shadowed tiddlers' TabMoreShadowed>>
Under FireFox, you can run into problems if you accidentally click 'Deny' on the permission request dialog, and have selected //Remember this decision//.

To reverse the effects, first locate the file {{{prefs.js}}} in your FireFox profile directory. Under Windows you'll find it at something like {{{C:\Documents and Settings\Jeremy\Application Data\Mozilla\Firefox\Profiles\o3dhupu6.default\prefs.js}}}, where {{{Jeremy}}} is the name of your windows profile and {{{o3dhupu6}}} will be a similar string of gobbledegook. On the Mac it'll be at {{{~/Library/Application Support/Firefox/Profiles/o3dhupu6.default/prefs.js}}} and on most versions of Linux, at {{{~/.mozilla/firefox/o3dhupu6.default/prefs.js}}}.

Open the file in a text editor and find the line {{{user_pref("capability.principal.codebase.p0.denied", "UniversalXPConnect");}}} and simply replace the word {{{denied}}} with {{{granted}}}.
//(Thanks to JonScully for figuring out this fix)//
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler references > fields syncing jump'></div>
<div class='workspace' id='st-page-wiki-title' macro='view socialtext.workspace'></div>
<div class='title' id='st-page-titletext' macro='view title'></div>
<div class='subtitle'>
Created on <span macro='view created date [[MMM DD, 0hh:0mm]]'></span>.
Updated by <span macro='view modifier link'></span>
on <span macro='view modified date [[MMM DD, 0hh:0mm]]'></span></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></span></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
To use, add {{{[[Styles HorizontalMainMenu]]}}} to your StyleSheet tiddler.
See http://www.w3schools.com/css/css_colors.asp for a color chart.
***/
/*{{{*/
#mainMenu {position:relative;left:auto;width:auto;text-align:left;line-height:normal;padding 0em 1em 0em 1em;font-size:normal;}
#mainMenu br {display:none;}
#mainMenu {background:#336699;}
#mainMenu {padding:2px;}
#mainMenu .button, #mainMenu .tiddlyLink {padding-left:0.5em;padding-right:0.5em;color:white;font-size:115%;}

#displayArea {
	margin-top:0;margin-right:20em;margin-bottom:0;margin-left:1em;
	padding-top:.1em;padding-bottom:.1em;
}
/*}}}*/
|''Type:''|socialtext|
|''URL:''|https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443 |
|''Workspace:''|koha|
|''WorkspaceList:''||
|''Description:''|KOHA|
The TiddlySaver Java applet allows TiddlyWiki from a {{{file://}}} URL to save changes Safari, Opera and other browsers.

It is a small file named [["TiddlySaver.jar"|TiddlySaver.jar]] that must be placed in the same directory as your TiddlyWiki file. Before you can use it, you need to give it the necessary privileges by editting your {{{.java.policy}}} file.

For Windows, the file will be at {{{C:\Documents and Settings\your-user-name\.java.policy}}}. Add the following lines (substituting the directory of your TiddlyWiki file as appropriate):
{{{
grant codeBase "file:${user.home}/My Documents/tiddlywiki-folder/*" {
  permission java.io.FilePermission "${user.home}${/}My Documents${/}tiddlywiki-folder${/}*", "read,write";
};
}}}
On Mac OS X, the file is found at {{{/Users/your-user-name/.java.policy}}}:
{{{
grant codeBase "file:${user.home}/Documents/tiddlywiki-folder/*" {
  permission java.io.FilePermission "${user.home}${/}Documents${/}tiddlywiki-folder${/}*", "read,write";
};
}}}
It can be tricky creating files whose name starts with a period, so you can use this [[pre-built .java.policy file|.java.policy]]. The same file is suitable for Macs too, just edit it and delete the "My " bit, leaving just "Documents". Make sure you save it in the right place for each operating system!

If you have trouble setting up the permissions correctly, you can try granting broader permissions to the applet like this:

{{{
grant codeBase "file://localhost/home/users/Desktop/
TiddlySaver.jar"
 { permission java.security.AllPermission; };
}}}

Note that there is currently [[a bug|http://trac.tiddlywiki.org/ticket/172]] that prevents TiddlySaver from working if you have specified a backup directory in AdvancedOptions.
/***
|''Name:''|SocialtextLocaleOverrides|
|''Description:''|Text changes for Socialtext|
***/

//{{{
merge(config.views.wikified.tag,{
	labelNoTags: "No Tags",
	labelTags: "Tags"});

merge(config.commands.references,{
	text: "incoming links",
	tooltip: "Show tiddlers that link to this one",
	popupNone: "No incoming links"});
//}}}
/***
|''Name:''|SocialtextTweaksPlugin|
|''Description:''|Allows changes to be synchronised with a Socialtext server|
|''Source:''|http://stunplugged.tiddlywiki.com/#SocialtextTweaksPlugin|
|''Author:''|JeremyRuston (jeremy (at) osmosoft (dot) com)|
|''Version:''|1.0.2|
|''Date:''|Jun 15, 2006|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.2|

Make minor configuration tweaks specific to Socialtext Unplugged
***/

//{{{
// Ensure that the SocialtextTweaksPlugin is only installed once.
if(!version.extensions.SocialtextTweaksPlugin) {
version.extensions.SocialtextTweaksPlugin = {installed:true};
// Check version number of core code
if(version.major < 2 || (version.major == 2 && version.minor < 2))
	{alertAndThrow("SocialtextTweaksPlugin requires TiddlyWiki 2.2 or later.");}

merge(config.defaultCustomFields,{
	wikiformat:'socialtext',
	'server.host':'https://saturn.ffzg.hr%2C%20saturn.ffzg.hr:443'
});

config.options.chkSinglePageMode = true;
config.options.chkEnableAnimations = true;

} // end of "install only once"
//}}}
/***
|''Name:''|SocialtextFormatterPlugin|
|''Description:''|Allows Tiddlers to use [[Socialtext|http://www.socialtext.com/]] text formatting|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com)|
|''Source:''|http://www.martinswiki.com/#SocialtextFormatterPlugin|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/formatters/SocialtextFormatterPlugin.js|
|''Version:''|0.9.4|
|''Date:''|Jan 21, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.1.0|

This is the SocialtextFormatterPlugin, which allows you to insert Socialtext formated text into a TiddlyWiki.

The aim is not to fully emulate Socialtext, but to allow you to work with Socialtext content off-line and then resync the content with your Socialtext wiki later on, with the expectation that only minor edits will be required.

To use Socialtext format in a Tiddler, tag the Tiddler with SocialtextFormat or set the tiddler's {{{wikiformat}}} extended field to {{{socialtext}}}

Please report any defects you find at http://groups.google.co.uk/group/TiddlyWikiDev
***/

//{{{
// Ensure that the SocialtextFormatter Plugin is only installed once.
if(!version.extensions.SocialtextFormatterPlugin) {
version.extensions.SocialtextFormatterPlugin = {installed:true};

if(version.major < 2 || (version.major == 2 && version.minor < 1))
	{alertAndThrow('SocialtextFormatterPlugin requires TiddlyWiki 2.1 or later.');}

SocialtextFormatter = {}; // 'namespace' for local functions

wikify = function(source,output,highlightRegExp,tiddler)
{
	if(source && source != '') {
		var w = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
		var out = output;
		if(tiddler && (tiddler.isTagged(config.parsers.socialtextFormatter.formatTag) || (tiddler.fields.wikiformat==config.parsers.socialtextFormatter.format)) ) {
			var d1 = createTiddlyElement(output,'div','content-display-body','content-section-visible');
			var d2 = createTiddlyElement(d1,'div','wikipage');
			out = createTiddlyElement(d2,'div',null,'wiki');
		}
		var time1,time0 = new Date();
		w.subWikifyUnterm(out);
		if(tiddler && config.options.chkDisplayInstrumentation) {
			time1 = new Date();
			var t = tiddler ? tiddler.title : source.substr(0,10);
			displayMessage("Wikify '"+t+"' in " + (time1-time0) + " ms");
		}
	}
};

stDebug = function(out,str)
{
	createTiddlyText(out,str.replace(/\n/mg,'\\n').replace(/\r/mg,'RR'));
	createTiddlyElement(out,'br');
};

SocialtextFormatter.Tiddler_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
	if((this.fields.wikiformat==config.parsers.socialtextFormatter.format) || this.isTagged(config.parsers.socialtextFormatter.formatTag)) {
		// update the links array, by checking for Socialtext format links
		this.links = [];
		var tiddlerLinkRegExp = /(?:\"(.*?)\" ?)?\[([^\]]*?)\]/mg;
		tiddlerLinkRegExp.lastIndex = 0;
		var match = tiddlerLinkRegExp.exec(this.text);
		while(match) {
			var link = match[2];
			this.links.pushUnique(link);
			match = tiddlerLinkRegExp.exec(this.text);
		}
	}/* else {
		return SocialtextFormatter.Tiddler_changed.apply(this,arguments);
	}*/
	this.linksUpdated = true;
};

SocialtextFormatter.wafl = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var lm2 = lookaheadMatch[2];
		switch(lookaheadMatch[1]) {
		case 'image':
			var img = createTiddlyElement(w.output,'img');
			img.src = w.tiddler.title + '/' + lm2;
			createTiddlyText(img,lm2);
			break;
		case 'file':
			var s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			var a = createTiddlyElement(s,'a');
			a.href = w.tiddler.title + '/' + lm2;
			createTiddlyText(a,lm2);
			break;
		case 'link':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createTiddlyElement(s,'a');
			var t = w.tiddler ? w.tiddler.title + ':' : '';
			a.setAttribute('href','#' + t + lm2);
			a.title = 'section link';
			createTiddlyText(a,lm2);
			break;
		case 'weblog':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			var text = lm2;
			var link = 'Weblog: ' + lm2;
			createTiddlyText(createTiddlyLink(s,link,false,null,w.isStatic),text);
			break;
		case 'section':
			a = createTiddlyElement(w.output,'a');// drop anchor
			t = w.tiddler ? w.tiddler.title + ':' : '';
			a.setAttribute('name',t + lm2);
			break;
		case 'date':
			createTiddlyText(w.output,lm2);
			break;
		case 'user':
			var oldSource = w.source;
			w.source = lm2;
			w.nextMatch = 0;
			w.subWikifyUnterm(w.output);
			w.source = oldSource;
			break;
// Shortcut expansions - not strictly syntax
		case 'google':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://www.google.com/search?q='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'fedex':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://www.fedex.com/Tracking?tracknumbers='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'map':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://maps.google.com/maps?q='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'wikipedia':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://en.wikipedia.org/wiki/'+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'rt':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'http://rt.socialtext.net/Ticket/Display.html?id='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'stcal':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'https://calendar.socialtext.net:445/view_t.php?timeb=1&id=3&date='+lm2);
			createTiddlyText(a,lm2);
			break;
		case 'svn':
			s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
			a = createExternalLink(s,'https://repo.socialtext.net/listing.php?rev='+lm2+'sc=1');
			createTiddlyText(a,lm2);
			break;
		default:
			w.outputText(w.output,w.matchStart,w.nextMatch);
			return;
		}
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	} else {
		w.outputText(w.output,w.matchStart,w.nextMatch);
	}
};

SocialtextFormatter.presence = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var p = lookaheadMatch[1];
		var text = lookaheadMatch[2];
		var link;
		var src;
		if(p=='aim') {
			link = 'aim:goim?screenname=' + text + '&message=hello';
			src = 'http://big.oscar.aol.com/sleepleft?on_url=http://www.aim.com/remote/gr/MNB_online.gif&amp;off_url=http://www.aim.com/remote/gr/MNB_offline.gif';
		} else if(p=='yahoo'||p=='ymsgr') {
			link = 'ymsgr:sendIM?'+text;
			src = 'http://opi.yahoo.com/online?u=chrislondonbridge&f=.gif';
		} else if(p=='skype'||p=='callto') {
			link = 'callto:'+text;
			src = 'http://goodies.skype.com/graphics/skypeme_btn_small_green.gif';
		} else if(p=='asap') {
			link = 'http://asap2.convoq.com/AsapLinks/Meet.aspx?l='+text;
			src = 'http://asap2.convoq.com/AsapLinks/Presence.aspx?l='+text;
		}
		var s = createTiddlyElement(w.output,'span',null,'nlw_phrase');
		var a = createExternalLink(s,link);
		var img = createTiddlyElement(a,'img');
		createTiddlyText(a,text);
		img.src = src;
		img.border='0';
		img.alt = '(' + lookaheadMatch[1] + ')';
		if(p=='aim') {
			img.width='11'; img.height='13';
		}
		w.nextMatch = this.lookaheadRegExp.lastIndex;
	}
};

config.formatterHelpers.singleCharFormat = function(w)
{
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[0].substr(lookaheadMatch[0].length-2,1) != ' ') {
		w.subWikifyTerm(createTiddlyElement(w.output,this.element),this.termRegExp);
	} else {
		w.outputText(w.output,w.matchStart,w.nextMatch);
	}
};

config.socialtext = {};
config.socialtext.formatters = [
{
	name: 'socialtextHeading',
	match: '^\\^{1,6} ?',
	termRegExp: /(\n+)/mg,
	handler: function(w)
	{
		var len = w.matchText.trim().length;
		var e = createTiddlyElement(w.output,'h' + len);
		var a = createTiddlyElement(e,'a');// drop anchor
		var t = w.tiddler ? w.tiddler.title + ':' : '';
		len = w.source.substr(w.nextMatch).indexOf('\n');
		a.setAttribute('name',t+w.source.substr(w.nextMatch,len));
		w.subWikifyTerm(e,this.termRegExp);
	}
},

{
	name: 'socialtextTable',
	match: '^\\|(?:(?:.|\n)*)\\|$',
	lookaheadRegExp: /^\|(?:(?:.|\n)*)\|$/mg,
	cellRegExp: /(?:\|(?:[^\|]*)\|)(\n|$)?/mg,
	cellTermRegExp: /((?:\x20*)\|)/mg,
	handler: function(w)
	{
		var table = createTiddlyElement(w.output,'table');
		var rowContainer = createTiddlyElement(table,'tbody');
		var prevColumns = [];
		w.nextMatch = w.matchStart;
		this.lookaheadRegExp.lastIndex = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
			var r = this.rowHandler(w,createTiddlyElement(rowContainer,'tr'),prevColumns);
			if(!r) {
				w.nextMatch++;
				break;
			}
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
	},
	rowHandler: function(w,e,prevColumns)
	{
		this.cellRegExp.lastIndex = w.nextMatch;
		var cellMatch = this.cellRegExp.exec(w.source);
		while(cellMatch && cellMatch.index == w.nextMatch) {
			w.nextMatch++;
			var cell = createTiddlyElement(e,'td');
			w.subWikifyTerm(cell,this.cellTermRegExp);
			if(cellMatch[1]) {
				// End of row
				w.nextMatch = this.cellRegExp.lastIndex;
				return true;
			}
			// Cell
			w.nextMatch--;
			this.cellRegExp.lastIndex = w.nextMatch;
			cellMatch = this.cellRegExp.exec(w.source);
		}
		return false;
	}
},

{
	name: 'socialtextList',
	match: '^[\\*#]+ ',
	lookaheadRegExp: /^([\*#])+ /mg,
	termRegExp: /(\n+)/mg,
	handler: function(w)
	{
		var stack = [w.output];
		var currLevel = 0, currType = null;
		var itemType = 'li';
		w.nextMatch = w.matchStart;
		this.lookaheadRegExp.lastIndex = w.nextMatch;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		while(lookaheadMatch && lookaheadMatch.index == w.nextMatch) {
			var listType = lookaheadMatch[1] == '*' ? 'ul' : 'ol';
			var listLevel = lookaheadMatch[0].length;
			w.nextMatch += listLevel;
			if(listLevel > currLevel) {
				for(var i=currLevel; i<listLevel; i++) {
					stack.push(createTiddlyElement(stack[stack.length-1],listType));
				}
			} else if(listLevel < currLevel) {
				for(i=currLevel; i>listLevel; i--) {
					stack.pop();
				}
			} else if(listLevel == currLevel && listType != currType) {
				stack.pop();
				stack.push(createTiddlyElement(stack[stack.length-1],listType));
			}
			currLevel = listLevel;
			currType = listType;
			var e = createTiddlyElement(stack[stack.length-1],itemType);
			w.subWikifyTerm(e,this.termRegExp);
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		}
	}
},

{
	name: 'socialtextQuoteByLine',
	match: '^>+',
	lookaheadRegExp: /^>+/mg,
	termRegExp: /(\n)/mg,
	element: 'blockquote',
	handler: function(w)
	{
		var stack = [w.output];
		var currLevel = 0;
		var newLevel = w.matchLength;
		var i;
		do {
			if(newLevel > currLevel) {
				for(i=currLevel; i<newLevel; i++) {
					stack.push(createTiddlyElement(stack[stack.length-1],this.element));
				}
			} else if(newLevel < currLevel) {
				for(i=currLevel; i>newLevel; i--) {
					stack.pop();
				}
			}
			currLevel = newLevel;
			w.subWikifyTerm(stack[stack.length-1],this.termRegExp);
			createTiddlyElement(stack[stack.length-1],'br');
			this.lookaheadRegExp.lastIndex = w.nextMatch;
			var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
			var matched = lookaheadMatch && lookaheadMatch.index == w.nextMatch;
			if(matched) {
				newLevel = lookaheadMatch[0].length;
				w.nextMatch += newLevel;
			}
		} while(matched);
	}
},

{
	name: 'socialtextRule',
	match: '^----+$\\n+',
	handler: function(w)
	{
		createTiddlyElement(w.output,'hr');
	}
},

{
	name: 'socialtextPreformatted',
	match: '^\\.pre\\s*\\n',
	lookaheadRegExp: /^.pre\s*\n((?:.|\n)*?)\n.pre\s*\n/mg,
	element: 'pre',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'socialtextHtml',
	match: '^\\.html',
	lookaheadRegExp: /\.html((?:.|\n)*?)\.html/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			createTiddlyElement(w.output,'span').innerHTML = lookaheadMatch[1];
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'macro',
	match: '<<',
	lookaheadRegExp: /<<([^>\s]+)(?:\s*)((?:[^>]|(?:>(?!>)))*)>>/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart && lookaheadMatch[1]) {
			w.nextMatch = this.lookaheadRegExp.lastIndex;
			invokeMacro(w.output,lookaheadMatch[1],lookaheadMatch[2],w,w.tiddler);
		}
	}
},

{
	name: 'socialtextExplicitLink',
	match: '(?:".*?" ?)?\\[',
	lookaheadRegExp: /(?:\"(.*?)\" ?)?\[([^\]]*?)\]/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var link = lookaheadMatch[2];
			var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;
			createTiddlyText(createTiddlyLink(w.output,link,false,null,w.isStatic,w.tiddler),text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextExternalLink',
	match: '(?:".*?" ?)?<[a-z]{2,8}:',
	lookaheadRegExp: /(?:\"(.*?)\" ?)?<([a-z]{2,8}:.*?)>/mg,
	imgRegExp: /\.(?:gif|ico|jpg|png)/g,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var link = lookaheadMatch[2];
			var text = lookaheadMatch[1] ? lookaheadMatch[1] : link;
			this.imgRegExp.lastIndex = 0;
			if(this.imgRegExp.exec(link)) {
				var img = createTiddlyElement(w.output,'img');
				if(lookaheadMatch[1]) {
					img.title = text;
				}
				img.alt = text;
				img.src = link;
			} else {
				createTiddlyText(createExternalLink(w.output,link),text);
			}
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextUrlLink',
	match: config.textPrimitives.urlPattern,
	handler: function(w)
	{
		w.outputText(createExternalLink(w.output,w.matchText),w.matchStart,w.nextMatch);
	}
},

{
	name: 'socialtextBold',
	match: '\\*(?![\\s\\*])',
	lookaheadRegExp: /\*(?!\s)(?:.*?)(?!\s)\*(?=[$\s\|\._\-,])/mg,
	termRegExp: /((?!\s)\*(?=[$\s\|\.\-_,]))/mg,
	element: 'strong',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextItalic',
	match: '_(?![\\s_])',
	lookaheadRegExp: /_(?!\s)(?:.*?)(?!\s)_(?=[$\s\|\.\*\-,])/mg,
	termRegExp: /((?!\s)_(?=[$\s\|\.\*\-,]))/mg,
	element: 'em',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextStrike',
	match: '-(?![\\s\\-])',
	lookaheadRegExp: /-(?!\s)(?:.*?)(?!\s)-(?=[$\s\|\.\*_,])/mg,
	termRegExp: /((?!\s)-(?=[$\s\|\.\*_,]))/mg,
	element: 'del',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextMonoSpaced',
	match: '`(?![\\s`])',
	lookaheadRegExp: /`(?!\s)(?:.*?)(?!\s)`(?=[$\s\.\*\-_,])/mg,
	termRegExp: /((?!\s)`(?=[$\s\.\*\-_,]))/mg,
	element: 'tt',
	handler: config.formatterHelpers.singleCharFormat
},

{
	name: 'socialtextParagraph',
	match: '\\n{2,}',
	handler: function(w)
	{
		createTiddlyElement(w.output,'p');
	}
},

{
	name: 'socialtextLineBreak',
	match: '\\n',
	handler: function(w)
	{
		createTiddlyElement(w.output,'br');
	}
},

{
	name: 'socialtextNoWiki',
	match: '\\{\\{',
	lookaheadRegExp: /\{\{((?:.|\n)*?)\}\}/mg,
	element: 'span',
	handler: config.formatterHelpers.enclosedTextHelper
},

{
	name: 'socialtextTrademark',
	match: '\\{tm\\}',
	handler: function(w)
	{
		createTiddlyElement(w.output,'span').innerHTML = '&trade;';
	}
},

{
	name: 'socialtextWafl',
	match: '\\{(?:[a-z]{2,16}): ?.*?\\}',
	lookaheadRegExp: /\{([a-z]{2,16}): ?(.*?)\}/mg,
	handler: SocialtextFormatter.wafl
},

{
	name: 'socialtextPresence',
	match: '(?:aim|yahoo|ymsgr|skype|callto|asap):\\w+',
	lookaheadRegExp: /(aim|yahoo|ymsgr|skype|callto|asap):(\w+)/mg,
	handler: SocialtextFormatter.presence
},

{
	name: 'socialtextMailTo',
	match: '[\\w\.]+@[\\w]+\.[\\w\.]+',
	lookaheadRegExp: /([\w\.]+@[\w]+\.[\w\.]+)/mg,
	handler: function(w)
	{
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var text = lookaheadMatch[1];
			createTiddlyText(createExternalLink(w.output,'mailto:'+text),text);
			w.nextMatch = this.lookaheadRegExp.lastIndex;
		}
	}
},

{
	name: 'socialtextHtmlEntitiesEncoding',
	match: '&#?[a-zA-Z0-9]{2,8};',
	handler: function(w)
	{
		createTiddlyElement(w.output,'span').innerHTML = w.matchText;
	}
}
];

config.parsers.socialtextFormatter = new Formatter(config.socialtext.formatters);
config.parsers.socialtextFormatter.format = 'socialtext';
config.parsers.socialtextFormatter.formatTag = 'SocialtextFormat';

} // end of 'install only once'
//}}}
/***
|''Name:''|SocialtextAdaptorPlugin|
|''Description:''|Adaptor for moving and converting data to and from Socialtext Wikis|
|''Author:''|Martin Budden (mjbudden (at) gmail (dot) com) and JeremyRuston (jeremy (at) osmosoft (dot) com)|
|''Source:''|http://www.martinswiki.com/#SocialtextAdaptorPlugin|
|''CodeRepository:''|http://svn.tiddlywiki.org/Trunk/contributors/MartinBudden/adaptors/SocialtextAdaptorPlugin.js|
|''Version:''|0.5.1|
|''Date:''|Feb 25, 2007|
|''Comments:''|Please make comments at http://groups.google.co.uk/group/TiddlyWikiDev|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.2.0|

Socialtext REST documentation is at:
http://www.eu.socialtext.net/st-rest-docs/index.cgi?socialtext_rest_documentation

***/

//{{{
if(!version.extensions.SocialtextAdaptorPlugin) {
version.extensions.SocialtextAdaptorPlugin = {installed:true};

function SocialtextAdaptor()
{
	this.host = null;
	this.workspace = null;
	return this;
}

SocialtextAdaptor.mimeType = 'text/x.socialtext-wiki';
SocialtextAdaptor.serverType = 'socialtext';
SocialtextAdaptor.serverParsingErrorMessage = "Error parsing result from server";
SocialtextAdaptor.errorInFunctionMessage = "Error in function SocialtextAdaptor.%0";

SocialtextAdaptor.prototype.setContext = function(context,userParams,callback)
{
	if(!context) context = {};
	context.userParams = userParams;
	if(callback) context.callback = callback;
	context.adaptor = this;
	if(!context.host)
		context.host = this.host;
	if(!context.workspace && this.workspace)
		context.workspace = this.workspace;
	return context;
};

SocialtextAdaptor.doHttpGET = function(uri,callback,params,headers,data,contentType,username,password)
{
	return doHttp('GET',uri,data,contentType,username,password,callback,params,headers);
};

SocialtextAdaptor.doHttpPOST = function(uri,callback,params,headers,data,contentType,username,password)
{
	return doHttp('POST',uri,data,contentType,username,password,callback,params,headers);
};

SocialtextAdaptor.fullHostName = function(host)
{
	if(!host)
		return '';
	if(!host.match(/:\/\//))
		host = 'http://' + host;
	if(host.substr(host.length-1) != '/')
		host = host + '/';
	return host;
};

SocialtextAdaptor.minHostName = function(host)
{
	return host ? host.replace(/^http:\/\//,'').replace(/\/$/,'') : '';
};

// Convert a page title to the normalized form used in uris
SocialtextAdaptor.normalizedTitle = function(title)
{
	var n = title.toLowerCase();
	n = n.replace(/\s/g,'_').replace(/\//g,'_').replace(/\./g,'_').replace(/:/g,'').replace(/\?/g,'');
	if(n.charAt(0)=='_')
		n = n.substr(1);
	return String(n);
};

// Convert a Socialtext date in YYYY-MM-DD hh:mm format into a JavaScript Date object
SocialtextAdaptor.dateFromEditTime = function(editTime)
{
	var dt = editTime;
	return new Date(Date.UTC(dt.substr(0,4),dt.substr(5,2)-1,dt.substr(8,2),dt.substr(11,2),dt.substr(14,2)));
};

SocialtextAdaptor.prototype.openHost = function(host,context,userParams,callback)
{
	this.host = SocialtextAdaptor.fullHostName(host);
	context = this.setContext(context,userParams,callback);
	if(context.callback) {
		context.status = true;
		window.setTimeout(function() {callback(context,userParams);},0);
	}
	return true;
};

SocialtextAdaptor.prototype.openWorkspace = function(workspace,context,userParams,callback)
{
	this.workspace = workspace;
	context = this.setContext(context,userParams,callback);
	if(context.callback) {
		context.status = true;
		window.setTimeout(function() {callback(context,userParams);},0);
	}
	return true;
};


SocialtextAdaptor.prototype.getWorkspaceList = function(context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	var uriTemplate = '%0data/workspaces';
	var uri = uriTemplate.format([context.host]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getWorkspaceListCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.getWorkspaceListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getWorkspaceListCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		var list = [];
		for(var i=0; i<info.length; i++) {
			var item = {
				title:info[i].title,
				name:info[i].name,
				modified:SocialtextAdaptor.dateFromEditTime(info[i].modified_time)
				};
			list.push(item);
		}
		context.workspaces = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.getTiddlerList = function(context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	var uriTemplate = '%0data/workspaces/%1/pages?order=newest';//!! ? or ;
	var uri = uriTemplate.format([context.host,context.workspace]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerListCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};


SocialtextAdaptor.getTiddlerListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getTiddlerListCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		var list = [];
		for(var i=0; i<info.length; i++) {
			var tiddler = new Tiddler(info[i].name);
			tiddler.modified = SocialtextAdaptor.dateFromEditTime(info[i].last_edit_time);
			tiddler.modifier = info[i].last_editor;
			tiddler.tags = info[i].tags;
			tiddler.fields['server.page.id'] = info[i].page_id;
			tiddler.fields['server.page.name'] = info[i].name;
			tiddler.fields['server.page.revision'] = String(info[i].revision_id);
			list.push(tiddler);
		}
		context.tiddlers = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.generateTiddlerInfo = function(tiddler)
{
	var info = {};
	var host = this && this.host ? this.host : SocialtextAdaptor.fullHostName(tiddler.fields['server.host']);
	var workspace = this && this.workspace ? this.workspace : tiddler.fields['server.workspace'];
	uriTemplate = '%0%1/index.cgi?%2';
	info.uri = uriTemplate.format([host,workspace,SocialtextAdaptor.normalizedTitle(tiddler.title)]);
	return info;
};

SocialtextAdaptor.prototype.getTiddler = function(title,context,userParams,callback)
{
	return this.getTiddlerRevision(title,null,context,userParams,callback);
};

SocialtextAdaptor.prototype.getTiddlerRevision = function(title,revision,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);

	// request the page in json format to get the page attributes
	if(revision) {
		var uriTemplate = '%0data/workspaces/%1/pages/%2/revisions/%3';
		context.revision = revision;
	} else {
		uriTemplate = '%0data/workspaces/%1/pages/%2';
		context.revision = null;
	}
	uri = uriTemplate.format([context.host,context.workspace,SocialtextAdaptor.normalizedTitle(title),revision]);

	context.tiddler = new Tiddler(title);
	context.tiddler.fields.wikiformat = 'socialtext';
	context.tiddler.fields['server.host'] = SocialtextAdaptor.minHostName(context.host);
	context.tiddler.fields['server.workspace'] = context.workspace;
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerCallback,context,{'accept':'application/json'});
	return typeof req == 'string' ? req : true;
};


SocialtextAdaptor.getTiddlerCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	context.statusText = SocialtextAdaptor.errorInFunctionMessage.format(['getTiddlerCallback']);
	if(status) {
		try {
			eval('var info=' + responseText);
			context.tiddler.tags = info.tags;
			context.tiddler.fields['server.page.id'] = info.page_id;
			context.tiddler.fields['server.page.name'] = info.name;
			context.tiddler.fields['server.page.revision'] = String(info.revision_id);
			context.tiddler.modifier = info.last_editor;
			context.tiddler.modified = SocialtextAdaptor.dateFromEditTime(info.last_edit_time);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
		if(context.callback)
			context.callback(context,context.userParams);
		return;
	}
	var uriTemplate = context.revision ? '%0data/workspaces/%1/pages/%2/revisions/%3' : '%0data/workspaces/%1/pages/%2';
	var host = SocialtextAdaptor.fullHostName(context.tiddler.fields['server.host']);
	var workspace = context.workspace ? context.workspace : context.tiddler.fields['server.workspace'];
	uri = uriTemplate.format([host,workspace,SocialtextAdaptor.normalizedTitle(context.tiddler.title),context.revision]);
	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerCallback2,context,{'accept':SocialtextAdaptor.mimeType});
};

SocialtextAdaptor.getTiddlerCallback2 = function(status,context,responseText,uri,xhr)
{
	context.tiddler.text = responseText;
	if(status) {
		context.status = true;
	} else {
		context.status = false;
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);

	var uriTemplate = '%0data/workspaces/%1/pages/%2/revisions?accept=application/json';
	if(!limit)
		limit = 5;
	var uri = uriTemplate.format([context.host,context.workspace,SocialtextAdaptor.normalizedTitle(title),limit]);

	var req = SocialtextAdaptor.doHttpGET(uri,SocialtextAdaptor.getTiddlerRevisionListCallback,context);
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr)
{
	context.status = false;
	if(status) {
		var content = null;
		try {
			eval('var info=' + responseText);
		} catch (ex) {
			context.statusText = exceptionText(ex,SocialtextAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
			return;
		}
		list = [];
		for(var i=0; i<info.length; i++) {
			var tiddler = new Tiddler(info[i].name);
			tiddler.modified = SocialtextAdaptor.dateFromEditTime(info[i].last_edit_time);
			tiddler.modifier = info[i].last_editor;
			tiddler.tags = info[i].tags;
			tiddler.fields['server.page.id'] = info[i].page_id;
			tiddler.fields['server.page.name'] = info[i].name;
			tiddler.fields['server.page.revision'] = info[i].revision_id;
			list.push(tiddler);
		}
		var sortField = 'server.page.revision';
		list.sort(function(a,b) {return a.fields[sortField] < b.fields[sortField] ? +1 : (a.fields[sortField] == b.fields[sortField] ? 0 : -1);});
		context.revisions = list;
		context.status = true;
	} else {
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback)
{
	context = this.setContext(context,userParams,callback);
	context.tiddler = tiddler;
	context.title = tiddler.title;
	var uriTemplate = '%0data/workspaces/%1/pages/%2';
	var host = context.host ? context.host : SocialtextAdaptor.fullHostName(tiddler.fields['server.host']);
	var workspace = context.workspace ? context.workspace : tiddler.fields['server.workspace'];
	var uri = uriTemplate.format([host,workspace,tiddler.title,tiddler.text]);
	//var req = doHttp('POST',uri,tiddler.text,SocialtextAdaptor.mimeType,null,null,SocialtextAdaptor.putTiddlerCallback,context,{"X-Http-Method": "PUT"});
	var req = SocialtextAdaptor.doHttpPOST(uri,SocialtextAdaptor.putTiddlerCallback,context,{"X-Http-Method": "PUT"},tiddler.text,SocialtextAdaptor.mimeType);
	return typeof req == 'string' ? req : true;
};

SocialtextAdaptor.putTiddlerCallback = function(status,context,responseText,uri,xhr)
{
	if(status) {
		context.status = true;
	} else {
		context.status = false;
		context.statusText = xhr.statusText;
	}
	if(context.callback)
		context.callback(context,context.userParams);
};

SocialtextAdaptor.prototype.close = function()
{
	return true;
};

config.adaptors[SocialtextAdaptor.serverType] = SocialtextAdaptor;
} //# end of 'install only once'
//}}}
/***
SocialtextStyleOverrides
***/

/*{{{*/
.headerShadow {padding: 2em 0em .5em 1em;}
.headerForeground {padding: 2em 0em .5em 1em;}

#st-page-wiki-title {
	font-size: 80%;
}
.subtitle {
	font-style: italic;
	font-size 80%;
}

/* from #st-tags */
.tagged {
	border-color: #bbeebb;
	background-color: #f4fff4;
}

.tagged .listTitle {
	color: #595;
	font-weight: bold;
}

.tagged .button {
	color: #000;
}

.selected .tagged {
	background-color: ColorPalette::TertiaryLight;
	border: 1px solid ColorPalette::TertiaryMid;
}

/* from #st-incoming-links */
.tagging {
	border-color: #ebb;
	background-color: #fff4f4;
}

.tagging .listTitle {
	color: #b78;
	font-weight: bold;
}

.tagging .button {
	color: #999;
}

.selected .tagging {
	background-color: ColorPalette::TertiaryLight;
	border: 1px solid ColorPalette::TertiaryMid;
}

.tiddler {/* Tiddler body */
	border:1px solid #ccc;
	margin:0.5em;
	background:#fff;
	padding:0.5em;
}

.viewer blockquote {border-left: 0px solid}

.tiddlyLinkNonExisting {
	font-style: italic;
	border-bottom: 1px dashed;
}

.editor input, .editor textarea {
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
}

.tabContents {white-space: nowrap;}

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

#sidebar {
	position: absolute;
	right: 3px;
	width: 21em;
	font-size: .9em;
}

#sidebarOptions .button {
	border-color: #eee;
}

#sidebarTabs .tabContents {
	width: 20em;
	overflow: hidden;
}

.viewer tt {
	font-size: 1.2em;
	line-height: 1.4em;
}

ul {list-style-type: square;}
ul ul {list-style-type: circle;}

ol {list-style-type: decimal;}
ol ol {list-style-type: decimal;}
ol ol ol {list-style-type: decimal;}
ol ol ol ol {list-style-type: decimal;}
ol ol ol ol ol {list-style-type: decimal;}
ol ol ol ol ol ol {list-style-type: decimal;}

/*}}}*/
/***
SocialtextScreenStyle
http://www.eu.socialtext.net/static/2.0.0.1/css/st/screen.css
***/

/*{{{*/
body {
	font-family: Arial, sans-serif;
	color: #000;
	background: #eee;
	margin: 0;
}

/* Wiki Navigation */

.st-wiki-nav {
	clear: both;
	margin-left: 10px;
	margin-right: 10px;
}
.st-wiki-nav-content {
	background: url('../../images/st/wiki-nav/solid.gif') repeat-x left bottom;
	margin-left: 24px;
	margin-right: 24px;
	padding-top: 3px;
	min-height: 24px;
}
* html .st-wiki-nav-content {
	padding-bottom: 3px;
	height: 24px;
}

.st-wiki-nav-right {
	background: url('../../images/st/wiki-nav/right-round.gif') no-repeat bottom right;
}

.st-wiki-nav-left {
	background: url('../../images/st/wiki-nav/left-round.gif') no-repeat bottom left;
}

#st-home {
	float: left;
	margin-right: 60px;
	padding-top: 2px;
}

#st-home-link {
	color: white;
	text-decoration: none;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 90%;
}

#st-editing-prefix-container {
	border-collapse: collapse;
	width: 100%;
	padding: 0px;
	margin: 0px;
	margin-bottom: -20px;
}

#st-editing-prefix-container tr td {
	margin: 0px;
	padding: 0px;
}

#st-editing-title {
	color: black;
	background-color: white;
	text-decoration: none;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin-bottom: 0.4em;
}

#st-wiki-title-invite {
	font-size: 50%;
	font-family: Helvetica, sans-serif;
}

#st-wiki-title-central-page-link {
	font-size: 50%;
	font-family: Helvetica, sans-serif;
}

#st-wiki-title-invite a {
	color: #00f;
}

#st-wiki-logo {
	text-align: center;
	clear: both;
}

#st-wiki-logo-image {
}

.st-wiki-nav-actions {
	float: right;
	color: black;
	font-size: 75%;
	padding-top: 3px;
}

.st-wiki-nav-actions a {
	padding: 2px;
	color: white;
	text-decoration: none;
	font-family: Helvetica, sans-serif;
}

/* Wiki Subnav */

#st-wiki-subnav {
	margin-top: 2px;
	font-size: 70%;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	color: #888;
}

#st-wiki-subnav a {
	padding: 2px;
	color: #008;
	text-decoration: none;
}

#st-wiki-subnav-right {
	float: right;
	margin-right: 6em;
}

#st-wiki-subnav-left {
	float: left;
	margin-left: 6em;
}
* html #st-wiki-subnav-left {
	margin-left: 3em;
}

/* Wiki Navigation Search Bar */

#st-search-form {
	margin: 0;
	padding: 0;
	padding-top: 1px;
}

#st-search-form .button-table {
	float: left;
	font-size: 79%;
	font-weight: bold;
	margin-left: 5px;
	margin-top: 1px;
}

#st-search-form #st-search-term {
	float: left;
	font-size: 60%;
}

/* Content Outline */

#st-content-border, #st-edit-border {
	position: relative;
	clear: both;
	margin-left: 3px;
	margin-right: 2px;
	margin-bottom: 0px;
	margin-top: 0px;
	border-bottom: 1px solid #eee;
}

#st-content-border-left, #st-edit-border-left {
	background: url('../../images/st/page-shadow/left.gif') left top repeat-y;
	position: relative;
}

#st-content-border-right, #st-edit-border-right {
	background: url('../../images/st/page-shadow/right.gif') right top repeat-y;
	position: relative;
}

#st-content-border-top, #st-edit-border-top {
	position: relative;
	background: url('../../images/st/page-shadow/top.gif') left top repeat-x;
}

#st-content-border-bottom, #st-edit-border-bottom {
	background: url('../../images/st/page-shadow/bottom.gif') left bottom repeat-x;
	position: relative;
}

#st-content-border-left-top, #st-edit-border-left-top {
	background: url('../../images/st/page-shadow/left-top.gif') left top no-repeat;
	position: relative;
}
#st-content-border-right-top, #st-edit-border-right-top {
	background: url('../../images/st/page-shadow/right-top.gif') right top no-repeat;
	position: relative;
}

#st-content-border-left-bottom, #st-edit-border-left-bottom {
	background: url('../../images/st/page-shadow/left-bottom.gif') left bottom no-repeat;
	position: relative;
}

#st-content-border-right-bottom, #st-edit-border-right-bottom {
	background: url('../../images/st/page-shadow/right-bottom.gif') right bottom no-repeat;
	padding-top: 5px;
	padding-bottom: 9px;
	position: relative;
}

* html #st-content-border-right-bottom, * html #st-edit-border-right-bottom {
	padding-top: 4px;
	padding-left: 7px;
	padding-right: 8px;
	position: relative;
}

.st-content-width-controller {
	width: 100%;
	position: relative;
	border-collapse: collapse;
}
.st-content-width-controller td {
	vertical-align: top;
}
.st-content {
	position: relative;
	background-color: white;
	margin-top: 0px;
	margin-left: 7px;
	margin-right: 8px;
	margin-bottom: -1px;
	border-left: 1px dotted #80a9f3;
	border-right: 1px dotted #80a9f3;
	border: 1px solid #80a9f3;
	padding: 6px 12px 12px 12px;
}
* html .st-content {
	margin-top: 0px;
	margin-left: 0px;
	margin-right: 0px;
}

/* This textarea is only for Safari. However, if we use display:none; here Safari ignores the .value operation in JS */
#st-raw-wikitext-textarea {
	width:1px;
	height:1px;
	margin:0;
	padding:0;
}

/* Action Buttons */
.button-table, .button-table tr td {
	border-collapse: collapse;
	margin: 0;
	padding: 0;
}
.button-rounded {
	background: url('../../images/st/grey-button/left-top-rounded.png') top left no-repeat;
	margin: 0;
}
.button-rounded-right-top {
	background: url('../../images/st/grey-button/right-top-rounded.png') top right no-repeat;
	margin: 0;
}
.button-rounded-left-bottom {
	background: url('../../images/st/grey-button/left-bottom-rounded.png') bottom left no-repeat;
	margin: 0;
}
.button-rounded-right-bottom {
	background: url('../../images/st/grey-button/right-bottom-rounded.png') bottom right no-repeat;
	margin: 0;
}
.button-straight {
	background: url('../../images/st/grey-button/left-top-straight.png') top left no-repeat;
	margin: 0;
}
.button-straight-right-top {
	background: url('../../images/st/grey-button/right-top-straight.png') top right no-repeat;
	margin: 0;
}
.button-straight-left-bottom {
	background: url('../../images/st/grey-button/left-bottom-straight.png') bottom left no-repeat;
	margin: 0;
}
.button-straight-right-bottom {
	background: url('../../images/st/grey-button/right-bottom-straight.png') bottom right no-repeat;
	margin: 0;
}
.button-content {
	font-size: 90%;
}
.button-content a {
	display: block;
	padding: 2px;
	padding-left: 10px;
	padding-right: 10px;
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.button-content input.submit {
	border: 0px;
	padding: 2px;
	padding-left: 10px;
	padding-right: 10px;
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	text-decoration: none;
	color: black;
	background-color: transparent;
}

/* Personal Homepage */

#st-homepage {
	background: white url('../../images/st/homepage/blue-fade.gif') top left no-repeat;
}

#st-homepage-layout {
	margin-top: 15px;
	clear: both;
	width: 100%;
	border-collapse: collapse;
}

#st-homepage-layout tr td.st-homepage-layout-cell {
	padding: 5px;
	vertical-align: top;
}

#st-homepage-layout-dashboard {
	width: 50%
}

#st-homepage-layout-notes {
	width: 50%;
}

#st-homepage-notes, #st-homepage-dashboard {
	text-align: left;
	width: 95%;
}

#st-user-greeting, #st-wiki-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
}
#st-wiki-title {
	margin-left: 5px;
}

#st-user-greeting {
	position: relative;
	text-align: right;
	float: right;
}

#st-group-notes-content, #st-personal-notes-content {
}

.st-homepage-section {
	margin-bottom: 15px;
}

#st-homepage-notes .st-homepage-section {
	background-color: white;
	border: 1px solid #aaa;
	padding: 15px;
}

.st-homepage-section-title {
	font-size: 110%;
	font-family: Helvetica, Verdana, sans-serif;
}

#st-homepage-notes .st-homepage-section-title {
	color: #aaa;
	text-decoration: underline;
}

.st-homepage-notes-edit-link {
	background: url('../../images/st/homepage/edit-icon.gif') no-repeat left top;
	display: block;
	text-indent: -2000px;
	height: 13px;
	width: 36px;
	text-decoration: none;
	padding:0;
}
* html .st-homepage-notes-edit-link {
	border:1px solid white;
}

.st-homepage-notes-edit {
	font-family: Verdana, sans-serif;
	font-size: 65%;
	float: right;
}

.st-homepage-notes-content {
	font-size: 85%;
	margin-top: 10px;
	padding-top: 0px;
	padding-bottom: 0px;
	font-family: Verdana, Helvetica, sans-serif;
}

#st-dyk {
	border-color: #cca !important;
	background-color: #ffe !important;
}

#st-dyk-title {
	color: #e4a020 !important;
	text-decoration: none !important;
}


/* Homepage Simple List */

#st-whats-new-title-link {
	background: url('../../images/st/homepage/icon-28-pages.gif') no-repeat left top;
}
#st-watchlist-title-link {
	background: url('../../images/st/homepage/icon-28-star.gif') no-repeat left top;
}
#st-wikis-title-link {
	background: url('../../images/st/homepage/icon-28-group.gif') no-repeat left top;
}
.st-homepage-simplelist-title-link {
	display: block;
	padding-left: 32px;
	min-height: 32px;
}
* html .st-homepage-simplelist-title-link {
	height: 32px;
}

.st-homepage-simplelist-title {
}

.st-homepage-simplelist-table {
	margin-left: 25px;
	border: 1px dashed #ddd;
	border-collapse: collapse;
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 80%;
	width: 95%;
}

.st-homepage-simplelist-table td {
	padding: 2px;
}

.st-homepage-simplelist-table tr.st-homepage-simplelist-row-odd {
	background-color: #f3f7f7;
}

.st-homepage-simplelist-table tr.st-homepage-simplelist-row-even {
	background-color: white;
}

.st-homepage-simplelist-table a {
	color: #4f55dd;
	text-decoration: none;
}

.st-homepage-simplelist-table a:visited {
	color: #551a8b;
}

.st-homepage-simplelist-subleft {
	font-size: 80%;
	margin-left: 1em;
	color: #666;
}

.st-homepage-simplelist-right {
	width: 20%;
}

.st-homepage-simplelist-subright {
	font-size: 80%;
	color: #666;
}

.st-homepage-simplelist {
}

.st-homepage-simplelist-header {
	min-height: 35px;
}

.st-homepage-simplelist-header .button-table {
	float: right;
	margin-right: 15px;
	font-size: 95%;
}

.st-homepage-simplelist-header .button-table .button-content {
	padding: 1px;
}

.st-homepage-whatsnew-author, .st-homepage-whatsnew-date {
	color: #555;
}
.st-homepage-whatsnew-attribution {
	padding-left: 1em;
	font-size: 80%;
	color: #aaa;
}

/* Homepage Wikis List */

#st-wikis-title {
}

/* Data and Templates */

.st-jst-template, .st-json {
	display: none;
}

/* Page Sidebox Common Styles */

#st-page-boxes-toggle {
	position: relative;
	float: right;
	text-align: right;
	font-family: Verdana, Arial, sans-serif;
	font-weight: bold;
	font-size: 80%;
	margin-bottom: 0.7em;
}

#st-page-boxes-toggle-link {
	text-decoration: none;
}

#st-page-boxes-underlay {
	float: right;
	margin-top: -10px;
	margin-right: 10px;
	background: white;
	z-index: 198;
	clear: both;
	margin-left: 15px;
}
* html #st-page-boxes-underlay {
	margin-right: 4px;
}
#st-page-boxes {
	background: inherit;
	position: absolute;
	right: 23px;
	z-index: 199;
	margin-top: 15px;
	margin-left: 20px;
}
#st-page-boxes, #st-page-boxes-underlay {
	width: 225px;
	/* padding-left: 15px; */ /* Gives the white border effect, cwest dislikes it. */
}

.st-page-box {
	border: 1px solid black;
	padding: 5px;
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 80%;
	margin-top: 15px;
}

.st-page-box-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	margin-bottom: 10px;
}

.st-page-box-listing {
	margin: 0;
	padding: 0;
}

.st-page-box-listing-entry {
	display: block;
}

.st-page-boxes-nobacklinks {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
	color: #888;
}

.st-page-box-first {
	margin-top: 0px;
}

/* Page Display */

#st-page-content {
	clear: left;
	margin-top: 6px;
	margin-bottom: 0;
	padding-bottom: 0;
}

#st-page-content, #st-page-content td {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
}

#st-page-wiki-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 65%;
	font-weight: bold;
	color: #aaa;
	margin-bottom: 0.2em;
	margin-top: 0.1em;
	padding-top: 0;
}

#wiki {
	margin: 0;
	padding: 0;
}

#st-page-title {
}

#st-page-titletext, .st-page-title {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
	font-weight: bold;
	color: #888;
	border-bottom: 1px solid #888;
}

#st-newpage-pagename-edit {
	font-family: inherit;
	font-size: inherit;
	font-weight: inherit;
	color: #000;
	border: 1px solid black;
	padding-left: 0.3em;
	background-color: #ffd;
}

#st-page-details {
	font-style: italic;
	font-size: 75%;
	font-family: Georgia, serif;
	margin: 6px 10px 0 10px;
}

#st-page-details-feed-icon {
	vertical-align: middle;
	border: none;
}

#st-page-stats {
	float: right;
	vertical-align: middle;
}

#st-attribution {
	float: left;
	margin-bottom: 10px;
}

#st-page-editing-wysiwyg {
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
	width: 100%;
}

#st-page-editing-toolbar {
	margin-left: -6px;
	overflow: hidden;
	float: left;
	height: 25px;
}

#wikiwyg_wikitext_textarea {
	margin-top: 4px;
	background: #ffd;
	border-style: solid;
	border-color: #888 #ccc #ccc #888;
	border-width: 2px;
	width: 100%;
	font-family: monospace;
}

#st-page-maincontent {
}

#st-page-editing, #wikiwyg_wikitext_textarea {
}

#st-page-editing-pagebody-decoy, #st-page-editing-wysiwyg {
	display: none;
}

#st-editing-tools-edit {
	display: none;
}

#st-mode-wysiwyg-button
{
	font-size: 70%;
	margin-left: 4em;
}

#st-mode-wikitext-button
{
	font-size: 70%;
}

#st-edit-tips
{
	font-size: 70%;
}

.wikiwyg_button {
	background: #FFFFFF;
	border: 1px solid #FFFFFF;
	cursor: pointer;
	width: 20px;
	height: 20px;
	vertical-align: bottom;
}

.wikiwyg_button:hover {
	border: 1px outset;
}

.wikiwyg_button:active {
	border: 1px inset;
}

#wikiwyg_toolbar {
	display: none;
}

/* Sidebox Pagetools: Revisions, Watchlist */
#st-side-box-pagetools {
	border-collapse: collapse;
}

#st-rewind-norevisions {
	font-family: Helvetica, Arial, sans-serif;
	font-size: 11px;
	color: #777;
	text-decoration: none;
}

#st-side-box-pagetools a {
	font-family: Helvetica, Arial, sans-serif;
	font-size: 11px;
	color: #555;
	text-decoration: none;
}

/* Page View Tags/Incoming Links Sidebox */

#st-tags {
	background: #f4fff4;
	border-color: #bbeebb;
	color: #999;
}

#st-tags-title {
	color: #595;
}

#st-tags-addlink, #st-tags-addbutton {
	font-weight: bold;
}

#st-tags-listing {
	margin-bottom: 5px;
}

#st-tags-addinput, #st-tags-message, #st-tags-suggestion {
	display: none;
}

#st-tags-deletemessage {
	font-size: 90%;
	color: #555;
	display: none;
	margin-top: 0.5em;
	margin-bottom: 0.5em;
}

#st-tags-suggestion {
	margin-top: 2px;
}

.st-tags-level1 {
	font-size: 90%;
}

.st-tags-level2 {
	font-size: 100%;
}

.st-tags-level3 {
	font-size: 110%;
}

.st-tags-level4 {
	font-size: 120%;
}

.st-tags-level5 {
	font-size: 130%;
}

.st-tags-tagline .st-tags-tagdelete {
	text-decoration: none;
	color: #ccc;
}

.st-tags-tagline a {
	text-decoration: none;
	color: #444;
}

#st-tags-field {
	width: 95%;
}

#st-incoming-links {
	border-color: #ebb;
	background-color: #fff4f4;
}

#st-incoming-links-title {
	color: #b78;
}

#st-attachments {
	border-color: #bbe;
	background-color: #f4f4ff;
}

#st-attachments-uploadbutton, #st-attachments-managebutton {

}
#st-attachments-buttons-uploadbutton {
	margin: 0px;
	padding: 0px;
	padding-left: 2px;
}
#st-attachments-buttons-managebutton {
	margin: 0px;
	padding: 0px;
	padding-right: 2px;
}

#st-attachments-buttons td {
	padding-right: 3px;
	font-size: 99%;
}

#st-attachments-buttons {
	border-collapse: collapse;
	margin: 0px;
	padding: 0px;
	margin-top: 5px;
}

#st-attachments-title {
	color: #77b;
}

.st-attachments-line {
	width:100%;
	overflow:hidden;
}

/* Actions Bar */

#st-actions-bar-spacer {
	clear:both;
	height:0.5em;
	overflow:hidden;
}

#st-actions-bar-spacer-clear {
	clear:both;
	height:1px;
	overflow:hidden;
}


#st-actions-bar, #st-editing-tools-bar {
	margin-left: 30px !important;
	margin-right: 30px !important;
}

/* Footer */
#st-footer {
	margin-top: -8px;
	margin-bottom: 5px;
	clear: both;
}

/* Socialtext Attribution */

#st-socialtext-attribution {
	clear: both;
	text-align: center;
	font-size: 80%;
	font-family: Helvetica, sans-serif;
}

#st-socialtext-attribution-link {
	text-decoration: none;
}

#st-socialtext-attribution-image {
	border: 0;
}


/* Page Actions */

#st-edit-button-border-left-middle, #st-login-to-edit-button-border-left-middle {
	background: url('../../images/st/button-blue/left-middle.gif') left top repeat-y;
}
#st-edit-button-border-right-middle, #st-login-to-edit-button-border-right-middle {
	background: url('../../images/st/button-blue/right-middle.gif') right top repeat-y;
}

#st-edit-button-border-left-top, #st-login-to-edit-button-border-left-top {
	background: url('../../images/st/button-blue/left-top.gif') left top no-repeat;
}
#st-edit-button-border-right-top, #st-login-to-edit-button-border-right-top {
	background: url('../../images/st/button-blue/right-top.gif') right top no-repeat;
}

#st-edit-button-border-left-bottom, #st-login-to-edit-button-border-left-bottom {
	background: url('../../images/st/button-blue/left-bottom.gif') left bottom no-repeat;
}

#st-edit-button-border-right-bottom, #st-login-to-edit-button-border-right-bottom {
	background: url('../../images/st/button-blue/right-bottom.gif') right bottom no-repeat;
}

#st-edit-button-link, #st-login-to-edit-button-link {
}

#st-comment-button-border-left-middle {
	background: url('../../images/st/button-purple/left-middle.gif') left top repeat-y;
}

#st-comment-button-border-right-middle {
	background: url('../../images/st/button-purple/right-middle.gif') right top repeat-y;
}

#st-comment-button-border-left-top {
	background: url('../../images/st/button-purple/left-top.gif') left top no-repeat;
}

#st-comment-button-border-right-top {
	background: url('../../images/st/button-purple/right-top.gif') right top no-repeat;
}

#st-comment-button-border-left-bottom {
	background: url('../../images/st/button-purple/left-bottom.gif') left bottom no-repeat;
}

#st-comment-button-border-right-bottom {
	background: url('../../images/st/button-purple/right-bottom.gif') right bottom no-repeat;
}

#st-comment-button-link {
}

#st-save-button-border-left-middle {
	background: url('../../images/st/button-green/left-middle.gif') left top repeat-y;
}
#st-save-button-border-right-middle {
	background: url('../../images/st/button-green/right-middle.gif') right top repeat-y;
}

#st-save-button-border-left-top {
	background: url('../../images/st/button-green/left-top.gif') left top no-repeat;
}
#st-save-button-border-right-top {
	background: url('../../images/st/button-green/right-top.gif') right top no-repeat;
}

#st-save-button-border-left-bottom {
	background: url('../../images/st/button-green/left-bottom.gif') left bottom no-repeat;
}

#st-save-button-border-right-bottom {
	background: url('../../images/st/button-green/right-bottom.gif') right bottom no-repeat;
}

#st-save-button-link {
}

#st-preview-button-border-left-middle {
	background: url('../../images/st/button-gold/left-middle.gif') left top repeat-y;
}
#st-preview-button-border-right-middle {
	background: url('../../images/st/button-gold/right-middle.gif') right top repeat-y;
}

#st-preview-button-border-left-top {
	background: url('../../images/st/button-gold/left-top.gif') left top no-repeat;
}
#st-preview-button-border-right-top {
	background: url('../../images/st/button-gold/right-top.gif') right top no-repeat;
}

#st-preview-button-border-left-bottom {
	background: url('../../images/st/button-gold/left-bottom.gif') left bottom no-repeat;
}

#st-preview-button-border-right-bottom {
	background: url('../../images/st/button-gold/right-bottom.gif') right bottom no-repeat;
}

#st-preview-button-link {
}

#st-cancel-button-border-left-middle {
	background: url('../../images/st/button-crimson/left-middle.gif') left top repeat-y;
}
#st-cancel-button-border-right-middle {
	background: url('../../images/st/button-crimson/right-middle.gif') right top repeat-y;
}

#st-cancel-button-border-left-top {
	background: url('../../images/st/button-crimson/left-top.gif') left top no-repeat;
}
#st-cancel-button-border-right-top {
	background: url('../../images/st/button-crimson/right-top.gif') right top no-repeat;
}

#st-cancel-button-border-left-bottom {
	background: url('../../images/st/button-crimson/left-bottom.gif') left bottom no-repeat;
}

#st-cancel-button-border-right-bottom {
	background: url('../../images/st/button-crimson/right-bottom.gif') right bottom no-repeat;
}

#st-cancel-button-link {
}

#st-edit-more-button-border-left-middle {
	background: url('../../images/st/button-blue/left-middle.gif') left top repeat-y;
}
#st-edit-more-button-border-right-middle {
	background: url('../../images/st/button-blue/right-middle.gif') right top repeat-y;
}

#st-edit-more-button-border-left-top {
	background: url('../../images/st/button-blue/left-top.gif') left top no-repeat;
}
#st-edit-more-button-border-right-top {
	background: url('../../images/st/button-blue/right-top.gif') right top no-repeat;
}

#st-edit-more-button-border-left-bottom {
	background: url('../../images/st/button-blue/left-bottom.gif') left bottom no-repeat;
}

#st-edit-more-button-border-right-bottom {
	background: url('../../images/st/button-blue/right-bottom.gif') right bottom no-repeat;
}

#st-edit-more-button-link {
}

.st-page-action-button-link {
	min-height: 24px;
	min-width: 100px;
	text-align: center;
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 90%;
	text-decoration: none;
	color: #fff;
	font-weight: bold;
	display: block;
	padding-top: 8px;
	padding-bottom: 0px;
	margin-bottom: -3px;
	width: 100%;
	margin-left: -2px;
}
* html .st-page-action-button-link {
	padding-top: 5px;
	padding-bottom: 0px;
	height: 24px;
}

.st-page-action-button {
	float: left;
	margin: 0;
	padding: 0;
	margin-right: 10px;
	min-height: 20px;
	border-collapse: collapse;
	width: 100px;
}

/* Attach File Interface */

#st-attachments-attachinterface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2000;
	background-image: url('../../images/st/popup/bg.png');
}
#st-attachments-manageinterface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: absolute;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2000;
	background-image: url('../../images/st/popup/bg.png');
}

* html #st-attachments-attachinterface {
	background-image: none;
}
* html #st-attachments-manageinterface {
	background-image: none;
}
* html .popup-overlay {
	background-image: url('../../images/st/popup/bg.png');
	background-color: #000;
	opacity: .70;
	position: absolute;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	z-index: 2001;
}

#st-attachments-attach-interface {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 520px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

* html #st-attachments-attach-interface {
}

#st-attachments-attach-formtarget {
	width: 0px;
	height: 0px;
	border: 0;
	padding: 0;
	margin: 0;
}

#st-attachments-attach-message {
	font-size: 90%;
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
}

#st-attachments-attach-title {
	font-weight: bold;
	font-size: 120%;
}

#st-attachments-attach-close {
	float: right;
	margin-top: 6px;
}

#st-attachments-attach-uploadbutton {
	float: right;
	margin-right: 6px;
	margin-top: 6px;
	padding-bottom: 0;
}

#st-attachments-attach-fileprompt {
	margin: 0.2em 0 0.4em 0;
	padding-bottom: 0px;
}

#st-attachments-attach-submit {
	font-size: 90%;
	font-weight: bold;
}

#st-attachments-attach-filename {
	font-size: 90%;
}

#st-attachments-attach-uploadmessage {
	font-weight: bold;
	margin-bottom: 1em;
	display: none;
}

#st-attachments-attach-error {
	font-weight: bold;
	color: #f00;
	margin-bottom: 1em;
	display: none;
}

#st-attachments-attach-list {
	display: none;
	color: #666;
	font-size: 90%;
	margin-top: 1em;
	margin-bottom: 1em;
	border-top: 1px solid #4949BA;
	border-bottom: 1px solid #4949BA;
	background-color: #F5F5F5;
	padding: 3px;
}

.st-attachments-attach-listlabel {
	font-size: 90%;
	color: #4949BA;
}

/* Queue File Dialog */

#st-attachmentsqueue-interface {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	background-image: url('../../images/st/popup/bg.png'); /* Don't forget IE hack for ship! */
	z-index: 2000;
}

* html #st-attachmentsqueue-interface {
	background-image: none;
}

#st-attachmentsqueue-dialog {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 530px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

* html #st-attachmentsqueue-dialog {
}

#st-attachmentsqueue-fileprompt {
	margin-bottom: 0.4em;
	margin-top: 0;
	padding-bottom: 0;
}

#st-attachmentsqueue-title {
	font-weight: bold;
	font-size: 120%;
}

#st-attachmentsqueue-close {
	float: right;
	margin-top: 6px;
}

#st-attachmentsqueue-uploadbutton {
	float: right;
	margin-right: 6px;
	margin-top: 6px;
	padding-bottom: 0;
}

#st-attachmentsqueue-submit {
	font-size: 90%;
}

#st-attachmentsqueue-filename {
	font-size: 90%;
}

#st-attachmentsqueue-message {
	font-size: 90%;
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
}

#st-attachmentsqueue-uploadmessage {
	font-weight: bold;
	margin-bottom: 1em;
	display: none;
}

#st-attachmentsqueue-error {
	font-weight: bold;
	color: #f00;
	margin-bottom: 1em;
	display: none;
}

#st-attachmentsqueue-list {
	display: none;
	color: #666;
	font-size: 90%;
	margin-top: 1em;
	margin-bottom: 1em;
	border-top: 1px solid #4949BA;
	border-bottom: 1px solid #4949BA;
	background-color: #F5F5F5;
	padding: 3px;
}

.st-attachmentsqueue-listlabel {
	font-size: 90%;
	color: #4949BA;
}

/* Lists */

tr.st-trbg-even, tr.st-trbg-even td{
	background-color: #f3f7f7;
}

tr.w-st-even-row, tr.w-st-even-row td {
	background-color: #f3f7f7;
}

.query-results-header-title, .query-results-header-last-edit-by {
	text-align: left;
}


.query-results-row-revisions {
	text-align: right;
}

.query-results-content {
	font-size: 85%;
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-row a {
	text-decoration: underline;
	color: #00f;
}

.query-results-row td {
	font-family: Verdana;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

.query-results-header-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.query-results-header-row a {
	text-decoration: underline;
	color: #00f;
}

.query-results-header-row th {
	font-family: Helvetica;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

div.st-actionbutton {
	float: left;
}

div#deleteme-st-actions-bar {
	clear: both;
	margin: 0.8em 20px 0.2em auto;
	padding: 0;
}

/* Manage File Interface */



#st-attachments-manage-interface {
	z-index: 2002;
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 1em;
	width: 520px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position: absolute;
	top: 0px;
}

#st-attachments-manage-filetable {
	height: 150px;
	margin: 0;
	padding: 0;
	width: 100%;
	overflow: auto;
	border: 1px solid #ccc;
}

#st-attachments-manage-filelisting tbody td {
	font-size: 90%;
}
#st-attachments-manage-filelisting {
	width: 100%;
	border-collapse: collapse;
	border: 0;
	margin: 0;
	padding: 0;
}

#st-attachments-manage-fileheader {
	background: #ccc;
	font-weight: bold;
	border-bottom: 1px black solid;
}

#st-attachments-manage-close {
	float: right;
	margin-top: 3px;
	margin-right: -2px;
	font-weight: bold;
}

#st-attachments-manage-delete {
	margin-top: 3px;
	float: left;
	font-weight: bold;
}

.st-attachments-manage-filerow {
	border-bottom: 1px solid #ccc;
}

.row-odd {
	background-color: #eee;
}

.row-even {
	background-color: #fff;
}

.row-on {
	background-color: #009 !important;
	color: white !important;
}

.row-on a {
	color: #fff !important;
}

#st-attachments-manage-deletemessage {
	color: red;
}

/* Page tools icons */

#st-pagetools-print {
	background: url('../../images/st/pagetools/print.gif')
	left center no-repeat;
}

#st-pagetools-email {
	background: url('../../images/st/pagetools/email.gif')
	left center no-repeat;
}

#st-pagetools-tools {
	background: url('../../images/st/pagetools/tools.gif')
	left center no-repeat;
}

/*
 #st-pagetools-watch {
	background: url('../../images/st/pagetools/watch-blue.gif')
	left center no-repeat;
}
*/


/* *********** Settings *********** */

#st-settings-pane {
}
* html #settings-pane { font-size: 85%;}

.settings-start-table {
}
* html .settings-start-table { font-size: 90%;}

#st-settings-select {
	padding: 0px 10px 10px 10px;
	vertical-align: top;
	width: 1px;

	background-color: #eff1ec;
	border: none;
}

#st-settings-section {
	padding: 0px 10px 10px 10px;
	vertical-align: top;
}

.settings-top-header {
	margin-top: 1em;
	font-weight: bold;
	width: 15em;
}

.settings-header {
	margin-top: 1em;
	font-weight: bold;
}

.settings-selections {
	padding: 0px 0px 0px 20px;
	line-height: 1.5em;
}

.settings-selections a:visited, .settings-selections a:active {
	color: #0000ff;
}

.settings-link {
	clear: both;
	display: block;
}

.settings-section-left {
	text-align: right;
}

.settings-label {
	font-weight: bold;
}

.settings-help {
	color: #888;
}

.settings-comment {
}

.users-invite-message {
	padding: 0.5em 0.5em 0.5em 2em;
	background-color: #eee;
	/* This seems necessary to fix an IE bug that sometimes
		causes the text in this div to be invisible */
	z-index: 1000;
}

.workspace-entry-header {
	margin-top: .5em;
	font-weight: bold;
}

.workspace-entry {
	margin-left: 3em;
}

.workspace-entry-p {
	margin-top: .5em;
	margin-bottom: .75em;
}

.workspace-subentry {
	font-style: italic;
	font-weight: bold;
	margin-left: 1.5em;
}

.preferences-td {
	padding:.5em 0 1.5em 0;
}

.preferences-query {
	text-align: left;
}

.preference-radio {
	background-color: #cec;
}
.user-settings-listall-headings td {
	background-color: #eff3ef;
}

#st-settings-save {
	padding-bottom: 0.5em;
}

.standard-button-cancel {
	font-weight: bold;
	background-color: #71004b;

	border-left: 1px solid #aaa;
	border-top: 1px solid #aaa;
	border-bottom: 2px solid #333;
	border-right: 2px solid #333;
	color: #f4f3b9;
	width: 8em;
}

.standard-button-submit {
	font-weight: bold;
	background-color: #656084;

	border-left: 1px solid #aaa;
	border-top: 1px solid #aaa;
	border-bottom: 2px solid #333;
	border-right: 2px solid #333;
	color: #f4f3b9;
	width: 8em;
}

#st-settings {
	font-family: Verdana, Arial, Helvetica, Sans-Serif;
	font-size: 90%;
}


/* Listview Tabs */


#st-listview a:visited {
	color: #551a8b;
}
#st-listview-tabs ul {
	display: block;
	list-style: none outside;
	margin: 0 0 0 4em;
	padding: 0;
	font-family: Helvetica, Arial, Sans-serif;
	font-size: 80%;
}

#st-listview-tabs li {
	display: block;
	float: left;
	margin: 0 0.8em 0 0;
	padding: 3px 0.6em 0 0.6em;
	border: 1px solid #d8d8d8;
	border-bottom: 1px solid rgb(128, 169, 243);
	background-color: #f4f4f4;
	position: relative;
	bottom: -2px;
}

#st-listview-tabs li.spacer {
	margin: 0 0.8em 0 2em;
}

#st-listview-tabs a {
	color: #bbb;
	text-decoration: none;
}

#st-listview-tabs li.selected {
	background-color: #fff !important;
	border: 1px solid rgb(128, 169, 243) !important;
	border-bottom: 1px solid #fff !important;
	font-weight: bold !important;
}

#st-listview-tabs li.selected a {
	color: #000 !important;
}

/* Category List Display */

#st-category-display-links {
	margin-bottom: 1em;
	font-size: 90%;
}

#st-tag-listbody {
	font-family: Helvetica, Verdana, sans-serif;
}

/* Attachments List Display */

#st-attachments-list-body table.button-table {
	margin-top: 0.1em;
	font-size: 80%;
}


/* ********** PageTools Menu ************** */

div#st-editing-tools {
	float: left;
}

div#st-pagetools {
	z-index: 300;
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 10px;
	float: right;
	margin: 18px 0 0 0em;
	color: #000;
	vertical-align: bottom;
	position: relative;
}

#st-pagetools a {
	text-decoration: none;
	color: black;
	padding-left: 17px;
}

#st-pagetools span {
	color: inherit;
	padding-left: 17px;
	vertical-align: top;
}

#st-pagetools span.st-watchlist-link {
	color: inherit;
	vertical-align: top;
}

.st-watchlist-link {
	cursor: pointer;
}

div#st-pagetools ul.level2 {
	z-index: 300;
	margin: 0;
	padding: 0;
	background: white;
	border: 1px solid #CCC;
	border-width: 0 1px;
}

div#st-pagetools li {
	position: relative;
	list-style: none;
	margin: 0;
	float: left;
	width: 7em;
	line-height: 11px;
}

div#st-pagetools ul ul li:hover {
	background: #BFE2FF;
}

div#st-pagetools li a {
	display: block;
	text-decoration: none;
}

div#st-pagetools>ul a {
	width: auto;
}

div#st-pagetools ul ul {
	position: absolute;
	width: auto;
	display: none;
}

div#st-pagetools ul ul li {
	line-height: 1.5em;
/*	width: 100%; */
	width: 14em;
}

.first {
	border-top: 1px solid #CCC;
}

.separator {
	border-bottom: 1px solid #CCC;
}

div#st-pagetools ul ul li a {
	border-bottom: 1px solid #CCC;
	padding-left: 15px;
	padding-right: 3px;
	margin-right: 3px;
	border: 0px;
}

div#st-pagetools li.submenu li.submenu:hover {
	z-index: 300;
	background-color: #BFE2FF;
}

div#st-pagetools ul.level1 li.submenu:hover ul.level2 {
	display:block;
}

div#st-pagetools ul.level2 {
	top: 1.0em;
	left: -9.5em;
}

/*

=head2 Revision List Display

Change these styles to update the page revision list.

*/

#st-revision-list-table {
	border-collapse: collapse;
	font-size: 85%;
	color: #000;
}

.st-page-title-decorator {
	color: #C80000;
}

.st-revision-header-emphasis {
	color: #C80000;
}

.st-revision-list-compare-button-row {
}

.st-revision-list-compare-button-cell {
	padding-top: 0.3em;
	text-align: center;
}

.st-revision-list-compare-button {
}

#st-revision-list-header-row {
}

#st-revision-list-header-select {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

#st-revision-list-header-revision {
	padding: 6px 2px 2px 2px;
	text-align: left;
}

#st-revision-list-header-edited-by {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

#st-revision-list-header-date {
	padding: 6px 2px 2px 2px;
	text-align: center;
}

.st-revision-list-row {
	border-collapse: collapse;
	border: 1px dashed #ddd;
	border-left: 1px solid #ddd;
	border-right: 1px solid #ddd;
}

.st-revision-list-row td {
	font-family: Verdana;
	padding: 0.3em;
	border-left: 1px dashed #ddd;
	border-right: 1px dashed #ddd;
	border-top: 1px solid #ddd;
	border-bottom: 1px solid #ddd;
}

.st-revision-list-row-select {
	padding: 3px 0 2px 0;
	text-align: center;
}

.st-revision-list-row-select-old {
}

.st-revision-list-row-select-new {
}

.st-revision-list-row-revision {
}

.st-revision-list-row-revision-link {
}

.st-revision-list-row-edited-by {
}

.st-revision-list-row-date {
}

/* Revision Menu */

#st-pagetools.st-revision-view-bar {
	float: left;
}

ul.st-revision-menu {
	list-style: none;
	margin: 0;
	padding: 0.2em;
	font-size: 80%;
}

ul.st-revision-menu li {
	float: left;
	padding: 0 0.4em 0 0.4em;
	border-right: thin solid #000000;
}

ul.st-revision-menu li.st-last {
	border-right: none;
}

#st-restore-revision-button {
	font-size: 80%;
}

/*

=head2 Revision Compare Display

When comparing two revisions of a page, these styles apply.

*/

#st-revision-compare-table {
	background-color: #f0f0f0;
}

#st-revision-compare-table td {
	background-color: white;
}

.st-revision-compare-old {
	background-color: #fdd;
	text-decoration: line-through;
}
.st-revision-compare-new {
	background-color: #dfd;
	font-weight: bold;
}

/* Weblog View */

#st-weblog {
	padding: 0;
}

#st-content-weblog-display-width-controller {
}
#st-content-weblog-display-width-controller-nav {
	width: 230px;
	margin-left: 15px;
	border-left: 5px solid #ddd;
	margin-top: -1px;
}

#st-weblog-content {
	font-family: Verdana, Helvetica, sans-serif;
	margin-top: -1px;
	margin-bottom: -1px;
	border-top: 1px solid #80a9f3;
	border-bottom: 1px solid #80a9f3;
}

#st-weblog-title {
	font-family: 'Trebuchet MS', Verdana, Helvetica, sans-serif;
	font-family: 'Times New Roman', serif;
	background-color: #80a9f3;
	color: #fff;
	font-size: 150%;
	font-weight: bold;
	padding: 0.2em;
	padding-left: 1em;
}

#st-weblog-wikititle {
	font-family: Helvetica, Verdana, sans-serif;
	font-style: italic;
	font-size: 40%;
	color: #fff;
	margin-bottom: 0.2em;
	margin-top: 0.1em;
	padding-top: 0;
}

#st-weblog-titletext {
	font-family: Helvetica, Verdana, sans-serif;
	font-weight: bold;
	color: #fff;
}

div.st-weblog-entry {
	margin-top: 0.2em;
	margin-bottom: 4.8em;
	padding: 0 1.5em 0 1.5em;
}

.st-page-title {
	clear: both;
}

div.st-weblog-entrytitle span.text {
	font-family: Helvetica, Verdana, sans-serif;
	font-size: 150%;
	font-weight: bold;
	color: #000;
}

.st-weblog-entrycontent {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 90%;
	border-bottom: 1px solid #888;
}

.st-weblog-byline {
	float: left;
	text-align: left;
	font-style: italic;
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
}

.st-weblog-post-links {
	float: right;
	text-align: right;
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
}

#st-weblog-archives, #st-weblog-navigation {
	position: relative;
	float: right;
	width: 230px;
}

#st-weblog-archives {
	margin-top: 15px;
	clear: right;
}

#st-weblog-archives-title, #st-weblog-navigation-title {
	margin-left: 15px;
	font-family: Helvetica, sans-serif;
	font-size: 95%;
	font-weight: bold;
	color: #999;
	border-bottom: 2px solid #f99;
	padding-bottom: 5px;
	padding-top: 5px;
	margin-bottom: 5px;
}

#st-weblog-navigation-content {
	margin-left: 15px;
	font-size: 80%;
}

#st-weblog-archives ul {
	margin: 0;
	padding: 0;
}

#st-weblog-archives ul li {
	/* list-type: none; */
	display: block;
	font-size: 80%;
	font-family: Helvetica, sans-serif;
	padding-left: 15px;
}

#st-weblog-newpost {
	padding: 0.5em 0.7em 0.3em 0.3em;
}

#st-weblog-newpost-button {
}

#st-weblog-actionbar-chooseweblog {
	float: right;
}

#st-weblog-postbyemail {
	font-size: 70%;
	font-family: Verdana, Helvetica, sans-serif;
	color: #def;
	padding-top: 0.4em;
}

#st-weblog-postbyemail-link {
	color: #00c;
}

.st-weblog-chooseprompt {
	font-size: 90%;
	font-family: Verdana, Helvetica, sans-serif;
	padding-right: 0.2em;
	color: #000;
}

.st-spacer {
	padding-right: 0.1em;
	padding-left: 0.1em;
}

.st-weblog-preventries {
	padding-bottom: 20px;
	clear: both;
}
.st-weblog-nextentries {
	clear: both;
}

div.st-weblog-entrynav {
	margin-top: 0.2em;
	margin-bottom: 1.8em;
	padding: 0;
}

span.st-weblog-previousentries, span.st-weblog-nextentries {
	font-size: 90%;
	font-family: Verdana, Helvetica, sans-serif;
	padding-left: 1em;
}

/* ******* Page Stats ******** */

#st-usagereport-navbar {
	font-size: 80%;
	padding: 0;
	margin: 0;
}

#st-usagereport-date {
	font-weight: bold;
	margin-top: 1em;
}

#st-page-usagereport h1 {
	font-size: 1.3em;
	font-weight: bold;
	margin-top: 1.2em;
	margin-bottom: 0.3em;
}

#st-page-usagereport h2 {
	font-size: 1.1em;
	font-weight: bold;
	margin-top: 0.8em;
	margin-bottom: 0.3em;
}

/* New Page */
#st-newpage-save, #st-newpage-duplicate {
	display: none;
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	height: 100%;
	background: url('../../images/st/popup/bg.png'); /* Don't forget IE hack for ship! */
	z-index: 2000;
}

#st-newpage-save-interface {
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 0.5em;
	width: 450px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position:absolute;
	top:0px;
	z-index:2003;
}

#st-newpage-duplicate-interface {
	background-color: #fff;
	color: #000;
	border: 4px solid #ccc;
	padding: 0.5em;
	width: 530px;
	margin-left: auto;
	margin-right: auto;
	margin-top: 10%;
	position:absolute;
	top:0px;
	z-index:2003;
}

#st-newpage-save-title, #st-newpage-duplicate-title {
	margin: 0;
	padding: 0;
	font-weight: bold;
	font-family: Helvetica, sans-serif;
	font-size: 100%;
}

#st-newpage-save-prompt, #st-newpage-duplicate-prompt {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin-bottom: 0.4em;
}

#st-newpage-save-buttons, #st-newpage-duplicate-buttons {
	margin-top: 0.8em;
	text-align: right;
}

.st-newpage-duplicate-option {
	font-family: Helvetica, sans-serif;
	font-size: 90%;
	margin: 0;
	padding: 0;
}

#st-newpage-duplicate-pagename {
	font-size: 90%;
}

.st-newpage-duplicate-emphasis {
	background-color: #FFFF00;
	font-weight: bold;
}

#st-newpage-save-field-pagename {
	margin-bottom: 0;
	margin-top: 0.2em;
	padding-bottom: 0;
	font-size: 90%;
}

#st-newpage-save-tip {
	margin-bottom: 0;
	margin-top: 1.2em;
	padding-bottom: 0;
	font-size: 75%;
	color: #888;
}

/* Wikitext Styling */

.wiki {
}

.wiki hr {
	margin-top: .4em;
	margin-bottom: .4em;
}

.wiki .short-rule {
	width: 25%;
}

.wiki .medium-rule {
	width: 50%
}

.wiki ul,
.wiki ol,
.wiki blockquote {
	margin-left: 2em;
	padding-left: 0em;
}

.wiki table {
	border-collapse: collapse;
}

.wiki td {
	border: 1px;
	border-style: solid;
	padding: .2em;
	vertical-align: top;
}

.wiki h1,
.wiki h2,
.wiki h3,
.wiki h4,
.wiki h5,
.wiki h6 {
	font-weight: bold;
	font-style: normal;
	margin-top: 0.1em;
	margin-bottom: 8px;
}

.wiki h1 {font-size: 200%;}
.wiki h2 {font-size: 170%;}
.wiki h3 {font-size: 145%;}
.wiki h4 {font-size: 125%;}
.wiki h5 {font-size: 110%;}
.wiki h6 {font-size: 100%;}

.wiki pre {
	background-color: #eee; /* XXX */
	margin-left: 1em;
	margin-right: 1em;
	padding: .2em;
}

.wiki .incipient {
	text-decoration: none;
	border-bottom: 1px dashed;
}

.wiki-include-title {
	background-color: #ccccff;
}

.wiki .wiki {
	position: relative;
	background-color: #ddddff;
	border: 1px solid #ccccff;
	padding: 3px;
}

.wafl_existence_error {
	color: rgb(200,0,0);
	border-bottom: 0.2em dashed rgb(200,0,0);
}

#st-edit-mode-container {
}

#st-edit-mode-view {
}

#st-page-editing-uploadbutton {
	z-index: 1500;
	float: left;
}

/* Comment UI */


body#st-commentui {
	background: #ffffff;
}

#st-commentui-container {
}

#st-commentui-container a:visited,
#st-commentui-container a:active {
	color: #00f;
}

#st-commentui-notetop {
}

#st-commentui-controls {
}

#st-commentui-savelink {
	background-color: #fffebd;
}

#st-commentui-cancellink {
}

#st-commentui-customfield {
}

#st-commentui-customfield .customfield-label {
}

#st-commentui-customfield .customfield-input {
}

#st-commentui-textarea {
	padding: 0;
	border-style: inset;
	border-width: thin;
	background-color: #ffd;
	color: black;
	width: 99%;
	height: 150px;
}

/*

=head2 Send Page by Email

Styles for the 'Send Page by Email' popup, accessed from the 'Email' dropdown
menu on the page bar.

*/

#email-page {
	background: #ffffff;
	font-size: 80%;
}

.email-page-row {
	clear: both;
}

.email-page-row-label {
	font-weight: bold;
	float: left;
	width: 5em;
	margin-left: 1.2em;
	margin-right: 1.2em;
	text-align: right;
}

.email-page-row-content {
	float: left;
	padding-bottom: 1.2em;
}

.email-page-user-select-column {
	float: left;
	padding-right: 1.2em;
	width: 14em;
}

#email-page-user-select-column-center {
	width: 10em;
}

.email-page-user-select-label {
	text-align: center;
}

#email-page-user-select-add-label {
	padding-top: 1em;
}

.email-page-user-select-button-group {
	padding-bottom: 2em;
}

.email-page-input {
	width: 120px;
	clear: both;
	display: block;
}


.email-page-select {
	width: 175px;
	font-size: x-small;
}

#email-page-error-message {
	text-align: center;
}

#email-page-buttons-container {
	clear: both;
}

#email-page-buttons {
	text-align: center;
}

.email-page-input-new {
	width: 175px;
}

/* System Status, Red with icon */

#st-system-status-alert {
	clear: both;
	width: 50%;
	margin-left: 25%;
	margin-top: 10px;
	padding: 5px;
	color: #c00;
	font-weight: bold;
	font-size: 80%;
	background: transparent url('../../images/st/system-message/important-note.gif') no-repeat 5px center;
	padding-left: 60px;
	min-height: 38px;
}
* html #st-system-status-alert {
	height: 38px;
}

/* System Status, Green */

#st-system-status {
	clear: both;
	text-align:center;
	width: 80%;
	margin-left: 10%;
	padding: 8px 0 3px 0;
	color: #0a0;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 80%;
}

.socialtextLogo {
	text-align: center;
}
/*}}}*/
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
/***
|''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");

}
//}}}
> *slobodni softver za podrลกku knjiลพniฤnom poslovanju*

^^ Dokumentacija o implementaciji "Koha"<http://koha-community.org/> softvera u "Knjiลพnici FFZG"<http://knjiznica.ffzg.unizg.hr>

{section}

^^^ MODULI

* [Korisnici]
* [Cirkulacija graฤ‘e]
* [Katalogizacija]
* [Katalozi]
* [Periodika]
* [Nabava]

^^^ PODACI

* "Konverzija podataka"<http://saturn.ffzg.hr/konverzija>
* "Migracija bibliografskih podataka"[Migracija podataka]
* [Podaci na korisniฤkim karticama]
* [Greลกke u podacima]

^^^ INTEGRACIJA S DRUGIM SUSTAVIMA

* [Pregled sustava] - Koha je povezana s joลก nekoliko softverskih sustava u "Knjiลพnici"<http://knjiznica.ffzg.unizg.hr> i u matiฤnoj ustanovi "Filozofskom fakultetu u Zagrebu"<http://www.ffzg.unizg.hr/>
* [Fotokopirni strojevi]
* [RFID sustav] - manipulacija i zaลกtita
* [Knjiลพniฤne Web stranice]

^^^ DOKUMENTACIJA I ZAJEDNICA KORISNIKA

* pretraลพivanje mailing lista: http://www.google.com/cse/home?cx=012030839526267669208:c5r4yzaftug
* "Koha dokumentacija i zajednica korisnika"[Dokumentacija i zajednica korisnika]
* [Prijevodi]

^^^ EDUKACIJA

* *[UPUTE]* za knjiลพniฤare
* [Edukacija] za vrijeme implementacije

{section}

| The word Koha is a maori word meaning gift or donation - or perhaps more "giving your specialty to the collective event". |
{include: koha-cug [prijevodi]}



^ FFZG lokalne promjene

nakon preuzimanja datoteke s koha-translate stranice, treba pokrenuti:

./translate update hr-HR

nakon toga popraviti ovo u hr-HR-i-opac-t-prog-v-3006000.po

.pre
#: opac-tmpl/prog/en/modules/opac-results.tt:445
#, c-format
msgid "Available for loan:"
msgstr "Dostupno za posudbu: "

#: opac-tmpl/prog/en/xslt/MARC21slim2OPACResults.xsl:1000
#, c-format
msgid "Available for use in library: "
msgstr "Dostupno za rad u ฤitaonici: "

#: opac-tmpl/prog/en/modules/opac-results.tt:504
#, c-format
msgid "Log in to add tags and create lists."
msgstr "Prijavite se ako ลพelite dodati tagove ili izraditi popis."

#: opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl:515
#, c-format
msgid "Responsiblity: "
msgstr "Odgovornost: "

#: opac-tmpl/prog/en/modules/opac-detail.tt:404
#: opac-tmpl/prog/en/modules/opac-detail.tt:408
#, c-format
msgid "Tags from this library:"
msgstr "Tagovi:"

#: opac-tmpl/prog/en/modules/opac-results.tt:468
#, c-format
msgid "No items available for loan:"
msgstr "Nema slobodnih primjeraka za posudbu: "


#: opac-tmpl/prog/en/modules/opac-sendbasket.tt:5
#, c-format
msgid ""
"Hi, %s %s (%s) sent you a cart from our online catalog. Please note that the "
"attached file is a MARC bibliographic records file which can be imported "
"into a Personal Bibliographic Software like EndNote, Reference Manager or "
"ProCite. "
msgstr ""
"Pozdrav, %s %s (%s) vam ลกalje popis iz knjiลพniฤnog kataloga. U privitku se "
"nalaze bibliografski zapisi u MARC formatu spremni za uฤitavanje u osobni "
"bibliografski softver kao ลกto je EndNote, Reference Manager ili ProCite. "

#: opac-tmpl/prog/en/modules/opac-user.tt:87
#, c-format
msgid ""
"Your account will expire on %s. If you use AAI@EduHR account please contact "
"the IT Services Department. If not, please contact the Library."
msgstr ""
"Vaลก korisniฤki raฤun istiฤe %s. Ako koristite AAI@EduHR raฤun, molimo "
"kontaktirajte Sluลพbu za informatiku. Ako vaลก raฤun nije AAI, obratite se u Knjiลพnicu."

pre
{toc: }

^ Upute

* {link: koha-cug [MARC Bibliographic framework] } (Koha CUG)
* "Koha User Manual"<http://koha.org/documentation/manual/3.2/administration/catalog-administration/marc-bibliographic-frameworks>

^ Kako napraviti export

Ako user na bazi nema potrebne ovlasti, kao root user treba prvo napraviti ovo:

.pre
mysql -u root koha
mysql>grant file on koha.* to 'kohaadmin'@'localhost';
.pre

a onda napraviti exprort:

.pre
select * into outfile '/tmp/mysql/lib-tags.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from marc_tag_structure where frameworkcode = 'LIB' ;

select * into outfile '/tmp/mysql/lib-subfields.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' from marc_subfield_structure where frameworkcode = 'LIB' ;
.pre

^ Export FFZG tablica

^^ LIB framework - Koha verzija 3.01.00.100

Koristi se za katalogizaciju knjiga

* {file: lib-tags.csv}
* {file: lib-subfields.csv}

^^ PER framework - Koha verzija 3.01.00.145

Koristi se za katalogizaciju ฤasopisa

* {file: per-tags.csv}
* {file: per-subfields.csv}



^ Plugins

[FFZG MARC frameworks plugins]
>> *UPUTE SU PRESELJENE NA http://saturn.ffzg.hr/knjiznica/*

^ OBRADA PRIMJERAKA (ITEM)

* [Upute za ฤipiranje]
* [Dodavanje primjerka]
* [Djela sa viลกe svezaka]
* [Upute za printanje naljepnica]
* [Izgubljeni primjerci]
* [Primjerci za otpis]
* [Primjerci za uvez]

* [Signiranje za OP]
* [Signiranje za ZS]

^ KATALOGIZACIJA

* [ORIGINALNA KATALOGIZACIJA]
* [DUPLICIRANJE ZAPISA] - Edit as new (Duplicate)
* [PREUZIMANJE ZAPISA]
* [Sakrivanje zapisa u javnom katalogu]
* [BRISANJE ZAPISA]
* [Spajanje zapisa]

* [UPUTE ZA MINIMALNI ZAPIS KNJIGE]
* [MARC21 upute - monografije]
* [MARC21 upute ฤasopisi]
* [MARC21 upute analitika]
* [Djela u viลกe svezaka]
* [Obrada diplomskih radnji, disertacija i magistarskih radnji]
* [Obrada nakladniฤkih cjelina]

* [Unos znakova za razliฤite jezike]
* [MARC 21 tablice kodova]

^ BARATANJE POPISIMA

* {file: Kako dodati zapis na popis.doc}

^ POSUDBA I KORISNICI

* [Upis korisnika]
* [AAI korisnicki racuni]
* [Anonimnost korisnika]
* [Zaduลพivanje i razduลพivanje graฤ‘e]
* "Pravila posudbe"[Posudba]
* [Cirkulacija ฤasopisa]
* [Cirkulacija knjiga iz Zatvorenog spremiลกta]

----

_vidi i:_ [UPUTE ZA KORISNIKE]
^ Instalacija zpl printera na Windowse

Nova verzija printanja koristi Koha Spine Label printanje i zahtjeva instalaciju Zebra printera na Windowsima prema
uputama na https://github.com/dpavlin/Printer-Zebra/blob/master/README

^^ Video instalacije

.html
<iframe width="560" height="315" src="http://www.youtube.com/embed/DMEo8rz-zo0?rel=0" frameborder="0" allowfullscreen></iframe>
.html

{section}

[Upute za instalaciju Zebra printera / Vivainfo]

Pritanje signatura zahtjeva "ODBC driver za MySQL"<http://dev.mysql.com/downloads/connector/odbc/> i korisnika na bazi sa kojim ฤ‡e se spajati program.

Nazivi korisnika:

* printer_zs - Zatvoreno spremiลกte
* printer - svi ostali printeri, migrirati na nazive

Dodavanje korisnika u MySQL:

.pre
dpavlin@koha:~$ mysql -u root mysql

mysql> create user printer_zs identified by 'password_za_ovaj_account' ;
Query OK, 0 rows affected (0.01 sec)

mysql> grant select,insert on koha.items_print_log to 'printer_zs' ;
Query OK, 0 rows affected (0.15 sec)

mysql> grant select on koha.items to 'printer_zs' ;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on koha.biblio to 'printer_zs' ;
Query OK, 0 rows affected (0.00 sec)
.pre

Passwordi za printere nalaze se na zaลกtiฤ‡enom wiki-ju: {link: ffzg-sysadmin [Zebra printer] }

Provjera:

.pre
mysql> select * from tables_priv ;
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
| Host | Db   | User       | Table_name      | Grantor        | Timestamp           | Table_priv    | Column_priv |
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
| %    | koha | printer    | items_print_log | root@localhost | 2009-03-27 12:12:17 | Select,Insert |             | 
| %    | koha | printer    | items           | root@localhost | 2009-03-27 12:14:38 | Select        |             | 
| %    | koha | printer    | biblio          | root@localhost | 2009-03-27 12:15:03 | Select        |             | 
| %    | koha | printer_zs | biblio          | root@localhost | 2010-03-09 14:26:30 | Select        |             | 
| %    | koha | printer_zs | items           | root@localhost | 2010-03-09 14:26:24 | Select        |             | 
| %    | koha | printer_zs | items_print_log | root@localhost | 2010-03-09 14:26:19 | Select,Insert |             | 
+------+------+------------+-----------------+----------------+---------------------+---------------+-------------+
6 rows in set (0.00 sec)
.pre

Stare biljeลกke:

> Iz tablice `items_print_log` obnoviti podatak `items.datelastseen`.
POKRENE SE INSTALACIJA PRINTERA SA PrnInstZBR.exe

ODABERE SE PROIZVOรAฤŒ ZDesigner (jedini na lijevom spisku)
odabere se model ZDesigner S4M-203dpi ZPL

hardversko podeลกavanje na samom printeru

tipka menu

DARKNESS: 15,2
TEAR OFF: 0
LABEL TOP: 0
LEFT POSITION: 0
MEDIA TYPE: MARK
SENSOR SELECT: REFLECTIVE
REMOVAL: TEAR
PRINT SPEED: 4 IPS
PRINT WIDTH: 831
LENGH: AUTO
ADVANCED: SETUP 3

ponov tipka menu, save changes: yes
tipka enter

softversko podeลกavanje u windowsima
control panel
printers & faxes
odaberemo ZDesigner S4M-203dpi ZPL
desnim miลกem i postavimo ga za default
desnim miลกem i properties

na strani general kliknemo dugme printig preferences

na tabu opcije

broj kopija: 1
brzina: 10,1
zatamnjenje: 0
format papira: user defined
format papira: mjere: cm
format papira: orijentacija: portrait
veliฤina: ลกirina 10,5
visina: 4,10
zona koja se NE moลพe tiskati
lijevo: 0
desno: 0,10
gore: 0
dolje: 0

na tabu zahtjevni parametri
naฤin rada: otkidanje
naฤin izbacivanja: termo
Senzor: senzor trake
poravnanje
gore: 0
otkidanje: 0
lijevi pomak: 0

klik na kalibracija.
^^ Pripreme

Na staroj produkciji pokrenuti

`sync_items_in_marc_bib.pl`
`rebuid_zebra.pl`

bibs wiht errors (corrupted)
248612
249478
250682
251126
251127
251128
253059
253170
253916
262292
268925
269096
269097
269099
269101
269102

^^ Koha sysadmin

* ukljuฤiti Amazon covers za intranet
* XSLT za sve osim za intranet results

*frameworks*

leader plugin
008 plugin

^^ Testiranje

* signature ZS

* selfcheck - cirkulacja + rezervacije

* ฤipiranje (ลกto se upisuje u title nakon upisivanja podataka na ฤip?)

* printanje signatura

* cirkulacija

^^ Prijevodi

* osim hrvatskog, dodati njemaฤki, francuski, ...

# download
# ./translate update hr-HR
# popraviti:
** Available for
** No items available...
** Your account will expire on
# ./translate install

^^ Upute za ฤipiranje

^^ Obavijesti

* obavijest za web
* obavijest za knjiลพniฤare
.pre
insert into biblio (select * from deletedbiblio where biblionumber=100);
delete from deletedbiblio where biblionumber=100;
insert in to items (select * from deleteditems where biblionumber=100);
delete from deleteditems where biblionumber=100;
insert in to biblioitems (select * from deletedbiblioitems where biblionumber=100);
delete from deletedbiblioitems where biblionumber=100;
.pre
How to make new batch using mysql?

.pre
mysql> select '232' as batch_id, itemnumber as item_number, 'SRE', 'Labels' 
into outfile '/tmp/zpm-label-batch.txt' from items where homebranch = 'ZPM' 
and enumchron is null order by copynumber + 0;

mysql> load data local infile '/tmp/zpm-label-batch.txt' into table 
creator_batches (batch_id, item_number, branch_code, creator);

.pre
Dokumentacija SIP2 protokola: {file: SIP2_3M_Standard_Interchange_Protocol_2.10.pdf}

{toc: }

^ Koha SIP2 server

Koha koristi SIPServer implementaciju sa https://github.com/atz/SIPServer

^^ SIPconfig.xml

Dodati korisniฤke raฤune *za svaki selfcheck jedan*

.pre
<accounts>
      <login id="sc1kat"  password="**password**" delimiter="|" error-detect="enabled" institution="FFZG" />
...
.pre

I instituciju

.pre
<institutions>
    <institution id="FFZG" implementation="ILS" parms="">
          <policy checkin="true" renewal="true" checkout="true"
                  status_update="false" offline="false"
                  timeout="100"
                  retries="5" />
    </institution>
.pre

^^ start server

run from lib directory with

.pre
perl -IC4/SIP -MILS C4/SIP/SIPServer.pm /etc/koha/SIPconfig.xml
.pre

http://bugs.koha.org/cgi-bin/bugzilla/show_bug.cgi?id=2362

^^ Skripta za pokretanje

.pre
dpavlin@koha:/srv$ sudo ./sip2-server.sh start
.pre

^^ syslog

SIP server zapisuje transakcije u syslog sa `local6` facility:

.pre
dpavlin@koha:/var/log$ grep LOG_SIP /usr/share/koha/lib/C4/SIP/SIPServer.pm 
use constant LOG_SIP => "local6"; # Local alias for the logging facility
.pre

Da bi preusmjerili logiranje u poseban file treba dodati slijedeฤ‡e u `/etc/syslog.conf`:

.pre
local6.*        -/var/log/sip2.log
.pre

^^ Analiza logova

Broj razliฤitih SIP2 poruka u naลกoj implementaciji

.pre
dpavlin@klin:/srv/ps-trend$ grep MSG sip.*/* | cut -d: -f6 | cut -d\' -f2 | cut -c-2 | sort | uniq -c
   6614 09
   3234 10
   7526 11
   3763 12
   4778 35
   2389 36
   4784 63
   2392 64
    828 93
    414 94
   2875 98
   5750 99
.pre

* 09 Checkin
* 10 Checkin Response

* 11 Checkout
* 12 Checkout Response

* 35 End Patron Session
* 36 End Session Response

* 63 Patron Information
* 64 Patron Information Response

* 93 Login
* 94 Login Response

* 98 ACS Status
* 99 SC Status

^ 3M SIP emulator

3M self check emulator kako iskonfigurirati
0d 00 ne radi
0d 0A radi

Popravak za taj problem sa "SIP2 server"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=commitdiff;h=6c6f530bc73826c2e8445f4febd6e888cd1acfc9> strane

^^ Putty tunnel

{image: putty-sip2-config.png}

^^ Konfiguracija

`C:\Program Files\3M Library Systems\3M SIP2 Development Kit\SC_Emulator`

{file: Settings.sc}

Jedina stvarno bitna promjena je:

.pre
[COM]
com_type = sockets

[TCP/IP]
ip_address = 127.0.0.1
host_name =
tcp_port = 6001
.pre

^^ Pokretanje pod wine-om

.pre
dpavlin@klin:/virtual/win$ sudo mount kvm-winxp.img /mnt/usb/ -o loop,offset=`expr 63 \* 512`,uid=dpavlin -t ntfs
dpavlin@klin:/virtual/win$ wine /mnt/usb/Program\ Files/3M\ Library\ Systems/3M\ SIP2\ Development\ Kit/Program/SCEmul.exe
.pre

Skripta za pokretanje: {file: SC_Emulator.sh} - provjerava da li je SIP server startan i povezuje se na njega

^ KOHA lokalne promjene

"u naลกem git-u"<http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git&a=search&h=ffzg2&st=commit&s=dpavlin>

^ BUGS

* "#250: SIP2 output encoding"<http://bugs.rot13.org/rt/Ticket/Display.html?id=250>
** "01-PatInfo.scs"<http://bugs.rot13.org/rt//Ticket/Attachment/1826/792/01-PatInfo.scs>
* "#400: Selfcheck konfiguracija"<http://bugs.rot13.org/rt/Ticket/Display.html?id=400>
* "#408: sip2: issuingrules.finedays nedostaje"<http://bugs.rot13.org/rt/Ticket/Display.html?id=408>

^ Nova implementacija

https://github.com/dpavlin/Biblio-SIP2

Primjer koriลกtenja:

.pre
dpavlin@klin:~/klin/Net-SIP2-Simple$ ACS=10.60.0.252:6001 ./sc-emulator.pl
.pre
.pre
LOAD DATA LOCAL INFILE 'importfile.csv' 
INTO TABLE _test_table_
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(field1, filed2, field3);
.pre
{toc: }

^ Resursi Koha zajednice

http://bugs.koha-community.org/

* Bugzilla
* Koha Gitweb
* Koha Wiki
* Koha YouTube Channel
* Vimeo Channel

^ Hrvatska udruga Koha korisnika

* "KohaCUG"<http://saturn.ffzg.hr/koha-cug> - Koha Croatian User Group

^ Koha dokumentacija i upute

* http://koha-community.org/documentation/
* http://lisolutions.org/content/learning-and-enhancing-koha
* http://wiki.koha-community.org/wiki/Category:Documentation
* http://www.pakban.net/brooke/ - ovdje vrijedi zaviriti u Newbie Guide

^ Mailing liste

* http://koha-community.org/support/koha-mailing-lists/

^ Prijevodi

* http://translate.koha-community.org/

^ Upute razne

*How To Install MarcEdit On Linux Under Wine*
http://wiki.koha.org/doku.php?id=en:record_manipulation:software:how_to:marcedit
^ Upute

* "UPUTE ZA KATALOGIZACIJU"{link: knjiznica[Katalogizacija]} na Wiki Knjiลพnice Filozofskog fakulteta

^ Frameworks & plugins

* [FFZG MARC frameworks]

* [Izrada predloลพaka]

* [FFZG MARC frameworks plugins]

* {link: koha-cug [Pisanje Koha plugina] }

* [Signature za zatvoreno spremiลกte]

^ Koha i RDA

* http://wiki.koha-community.org/wiki/RDA
* http://lists.koha-community.org/pipermail/koha-devel/2010-November/034590.html

^ Katalogizacija elektroniฤkih izvora

* http://lists.katipo.co.nz/pipermail/koha/2011-September/030419.html
* http://lists.katipo.co.nz/pipermail/koha/2011-September/030423.html
* http://lists.katipo.co.nz/pipermail/koha/2011-September/030511.html
Pojavio se problem kod brisanja zapisa. Kada je zapis brisan i dalje se pokazuje u rezultatima i dalje ga se moze pretraลพiti preko search plugin-a
(primjer inv.broj rom30517 drugi naslov -language and social context: selected readings). kada kliknes na njega pojavljuje se error 404!

^^^^ KATALOGIZACIJA ฤŒASOPISA:

* postaviti *LEADER*
* postaviti *008*
* srediti *item zapis* za ฤasopise (dogovoriti s mihelom, dubravkom ลกto im sve treba)
** signatura
** lokacija
** status za posuฤ‘ivanje
* *broj signature*: upisivao bi se s razmakom ispred zadnja tri broja (npr: 52 638) - moลพe li se postaviti da se pretraลพi i kao: 50 000 i kao 50.000 i kao 50000?
* postaviti da je *856 * u opacu vidljiv, kao i *URI * u zapisu o primjerku
* postaviti da *760 * ima vezu na drugi zapis (preko $w) - i da se vidi: nastavlja se... - tj. preko indikatora
* pitanje *posuฤ‘ivanja * dubleta ฤasopisa!
* postaviti vidljivim u OPAC-u fond ฤasopisa iz bib zapisa
Import korisnika iz ISVU sustava u Kohu

^ backup

.pre
dpavlin@koha:/srv/koha-upisi-2011$ mysqldump koha borrowers > borrowers-2011-08-23.sql
.pre

^ import users

.pre
dpavlin@koha:/srv/koha-upisi-2011$ ./koha-new-borrowers.pl 
+++++~+++++++_+++++~+++++++++~+++++_~++++++++++++++++++++++++++++++++++++~+++++++++++++++++ 100
+~++++++++++++++++++++++++++~++++++++++++++++++++++++++++++++++++++++++++~+++++++++++++++~+ 200
+++~++~+++++++++~+++++++++++++++++++++++++++++++++++++++~+~++++++++++++++++++++++++++++++++ 300
++++++++++++++++~++++++++++++~+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 400
+++++~++++++++++++++++++++++++++++_+++++++++++++++!+++++++_++++++++++++~++++++++++++++++++~ 500
+++++++++++++++++++++++++++++++++++++++++~~+++++++~++++++++++++++++++++++++++~+++++++++++++ 600
+~++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++~+++++++++++++_+++++++++++++ 700
+++++++++++++++++++++++++++++++++~++++++++~+++++++++++++++~+++++++++++++++++++~++++++++++~+++~+~++++ 800
+++++~++++++++++++++++++++++++++++ 834 { add => 794, err => 1, mod => 34, nop => 5 }
.pre

^ cardnumbers

.pre
dpavlin@koha:/srv/koha-rfid$ ./generate-cardnumber.pl --commit

# ...

# opened cardnumbers in this run: { 20101126 => 1, 20110721 => 1, 20110822 => 1, 20110823 => 2, 20110901 => 828 } at ./generate-cardnumber.pl line 128.
backup for borrowers table: backup/borrowers.2011-08-23T16:36:18.sql 4558012 bytes
generated print.2011-08-23T16:36:18.txt 37180 bytes
.pre
* [Nabava - radni procesi]

{toc: }

^ Funds i budget

* sredstva iz kojih se knjiga plaฤ‡a i koliko novaca je predviฤ‘eno
* odrediti kratice za funds - uskladiti s raฤunovodstvom
* ล to kad ne znamo unaprijed koliko novca je predviฤ‘eno? upisati 0 ili neki velili iznos?

^ Tablice u bazi

verzija: 3.01.00.100

aqbasket
aqbasketgroups
-aqbookfund-
aqbooksellers
aqbudgetperiods
aqbudgets
aqbudgets_planning
aqcontract
aqorderdelivery
aqorders
aqorders_items

^ Inventarni broj

Cilj: jedna inventarna knjiga

*Trenutno stanje:*

* svaka zbirka ima inventarnu knjigu iz stare knjiลพnice
* na primjerak se upisuje (polje 952i) stari invenrarni broj s prefiksom
* Primjerci bez inventarnog broja imaju samo prefiks.

^^ Novi inventarni broj

* od 1. sijeฤnja 2010
* broj odraลพava redoslijed unosa u bazu
* mora li inventarni broj biti redni broj? (slijed unosa u pri tom se zadrลพava, ali niz brojeva "ima rupe")

^^ Podaci za inventarnu knjigu

* datum
* naslov
* dobavljaฤ
* cijena
* raฤun

----

----

Stare biljeลกke:

Zadaci:

* opisati radni proces nabave knjiga
* opisati radni proces kontinuacije ฤasopisa

----

*Purchase suggestion*

* nesto ne valja s javljanjem korisniku u kojem je statusu njegov prijedlog (provjeriti joลก jednom)
* u trenutku kada knjiลพnica odluฤi ลกto ฤ‡e s knjigom (acceptat ili rejectat) korisniku se briลกe njegov zahtjev sa suฤelja. Ako promijeni opciju *suggested by* sa *anyone* na *me* i klikne *set filter*, tada mu se pojavljuju rezultati njegovih zahtjeva. Trebalo bi napraviti da je *me default*, jer preko *anyone* se ne dobiva zadovoljavajuฤ‡i rezultat.
* na korisniฤkom suฤelju trebalo bi dodati joลก i prozor za *naslov* i *ISBN* jer takav prozor ne postoji (postoje: summary, author, copyright date, publisher i note)
* treba vidjeti ลกto toฤno znaฤi *authorized values* u *reason* prozoru (iskreno, dorja bas i nije shvatila)
* moลพe li se ograniฤiti *purchase suggestion* opcija na neke *korisniฤke grupe* (tipa profesori, a ne i studenti) - ลกto znaฤi: hoฤ‡e li ta opcija biti legitimna komunikacija za profesorske deziderate?
* kad knjiลพniฤar vidi suggestion vidi samo ime "naruฤioca" ali ne i njegov status (prof, stud...) - moลพe li se poลกtimati?
* koliko je meni jasno, ta opcija je pod nabavom - treba vidjeti kako ฤ‡emo nabavu raditi i treba li nam uopฤ‡e ta opcija - hoฤ‡e li nabava biti centralizirana...
* moลพda bi bilo super (ako ฤ‡e *nabava* biti *centralizirana*) da je to naฤin komunikacije izmeฤ‘u voditelja zbirke i osobe zaduลพene za nabavu (naravno ako je moguฤ‡e na neki naฤin ograniฤiti ili pobliลพe objasniti "naruฤioca")

* Dobricin suggestion je nestao :) - smjestio se pod prihvaฤ‡ene

*Pretraลพivanje po naslovu*

Default je na pretraลพivenje po dobavljaฤu.
U formi za pretraลพivanje na vrhu stranice su dvije opcije - Supplier Search i Orders Search. Treba odabrati Orders Search. Nakon ลกto upiลกemo upuit i kliknemo na Submit (ili enter) moramo odabrati raspon datuma unutar kojih ลพelimo pretraลพivati narudลพbe. Onda kliknemo na Search i dobijemo narudลพbe.

*Printanje iz nabave*

* dodati funkciju printanja narudลพbi
^ Primjerci

* MAG, DIS, DIP pretvoriti u
* statusi stara posudba: oลกteฤ‡eno -> lost

* pomaknuti inventarni broj na poฤetak, u intranetu u editoru za iteme
^ Donacije

1.korak: izrada popisa pristiglih naslova

* odreฤ‘ivanje vrijednosti

* dogovorit se oko kriterije za odreฤ‘ivanje vrijednosti, prema godinama? prema izdavaฤu? prmjer: koliko vrijedi knjiga izdana sredstvima projekta neke nevladine organizacije?

* podaci o donatoru

ovaj korak mogli bi raditi praktikanti, demosi i ostali pomagaฤi

Postupak:
1. odabrati vendora Donacije

2. pod Basket name upisati ime donatora i datum, u ovakvom obliku: D.Masliฤ‡ - 2011-03-30; 
Internal note i vendor note nisu obavezni.
Pod internal note moลพe se upisati se napomena knjiลพniฤara. Pod Vendor note moลพe se upisati napomena i komentari donatora..

3. odabrati from existing record ili...

2. korak: zaprimanje i inventarizacija pristiglih primjeraka

Koraci:

* odabrati vendora
*

* zahvale za donacije?

^ Nabava stranih knjiga karticom

^ Nabava knjiga od domaฤ‡ih dobavljaฤa

* narudลพbenica

^ Nabava knjiga iz projekata
Raditi paralelno s {link: knjiznica [Knjiลพniฤne web stranice]}
Treba izdraditi normativne baze za:

* signature
* autore

*Biljeลกke:*

Provjeriti kako radi.
Postoji skripta za bulk import.
Postoje opcije u global system preferences.

http://koha.1045719.n5.nabble.com/bulk-BiblioAddsAuthorities-td3378000.html
Page renamed to [FFZG MARC frameworks (verzija 3.1)]
*[SafeQ integration]*
Integracija podataka o korisnicima iz sustava za kopiranje, Koha knjiลพniฤnog sustava i AAI sustava uz pomoฤ‡ LDAP protokola

*[Podaci na korisniฤkim karticama]*
Opis procesa pripreme podataka na karticama za koriลกtenje u 3M RFID sustavu i u sustavu za fotokopiranje

*[Printanje i programiranje kartica]*
Opis trenutne procedure printanja i programiranja kartica. Biljeลกke o razvoju nove procedure.

*[Iskaznice za kopiranje za grupu korisnika]*

^ Upute za otklanjanje problema

^^ RFID ฤitaฤi na kopirkama javljaju "Zabranjen pristup", i stroj nije pripremljen (tako neลกto...)

Pobrisati jobove na kopirci

^^ Ne radi printanje

Da bi radilo printanje sa studentskih raฤunala, korisnik *mora* imati AAIedu korisniฤki raฤun (za logiranje u raฤunala, oblika `login@ffzg.hr`) i mora imati isti login u Kohi pod OPAC login.

AAIedu login i zaporka se mogu provjeriti logiranjem na https://ldap.ffzg.hr/
{toc: }

^ Printanje u Beฤu

> Beฤ = batch (eng.) - u jednom cugu, za razliku od po potrebi

Napisati postojeฤ‡u proceduru printanja kartica (pokretanje skripte)

^ Naruฤivanje praznih kartica

Paziti da zadnja strana bude bijela, jer i tako moramo printati dvostrano, pa nam to daje veฤ‡u fleksibilnost.

^ Plan

* ฤitaฤ postaviti ispod printer-a tako da programirana kartica padne na ฤitaฤ i isprogramira se (moลพda malo alu-folije ako ฤitaฤ bude hvatao kartice iz spremnika)
* Linux stroj sa podrลกkom za pritanje kartica i barkoda na njima koji podatke sprema nazad direktno u Kohu

^ Workflow

* link sa intranet-a na lokalnu maลกinu (linux stroj) gdje se pokreฤ‡e pitanje na printer (moลพda lokalno spojen, moลพda mreลพom)
* kartica pada na ฤitaฤ koji je programira i ลกalje podatak u kohu sa postom na neki ssl cgi (moลพda sa svojim certifikatima?)

^ CUPS driver

{include: rot13 [Evolis Dualys 3 Smart]}
^^ Kronologija dogaฤ‘anja relevantnih za implementaciju softvera u Knjiลพnici Filozofskog fakulteta

^^^ kraj 2005.

U NSK osnovan Centralni tim za provoฤ‘enje projekta implementacije programskog paketa Voyager u knjiลพnice u sustavu znanosti i visokog obrazovanja.

Knjiลพnice FF-a odgovaraju na Upinik o implementaciji, potreban NSK u svrhu planiranja ฤitavog sustava.

24. studenoga 2005. godine potpisan je Stalni ugovor o raฤunalnom programu izmeฤ‘u Endeavor Information Systems Inc. i Nacionalne i sveuฤiliลกne knjiลพnice u Zagrebu koji predsttavlja glavni ugovor u odnosu na sve ostale akademske i istraลพivaฤke institucije u Republici Hrvatskoj.


^^^ 2006.

Zapoฤinje implementaicija Voyager-a u NSK. Otvorene su demo baze za sva ostala sveuฤiliลกta i odrลพani orijentacioni treninzi.

Krajem 2006. dovrลกeni graฤ‘evinski radovi nove Knjiลพnice Filozofskog fakulteta. ฤŒeka se II. faza kredita kako bi se moglo zapoฤeti s unuranjim ureฤ‘enjem i opremanjem.

Viลกe od 20. dislociranih knjiลพnica FF-a nema softver zadovoljavajuฤ‡ih karakteristika. Postoji samo primitivna softverska podrลกka pri obradi graฤ‘e i samostalno razvijen online katalog za pretraลพivanje fonda zadovoljavajuฤ‡ih osobina.

Filozofski fakultet imenuje koordinatora za implemeteciju Voyager-a u svojoj ustanovi.

^^^ poฤetak 2007.

NSK poฤinje s produkcijskim radom u Voyager softveru.

Filozofski fakultet aktivno se ukljuฤije u projekt implementacije Voyager-a.

Bez softverskog rjeลกenja koje ฤ‡e podrลพati sve najfrekventnije poslovne procese u novoj Knjiลพnici nije moguฤ‡e pustiti u pogon novu Knjiลพnicu. Trebalo je automatizirati minimalno obradu u posudbu (ลพalosna je ฤinjenica da su u tom trenutku Knjiลพnice FF-a biljeลพile podatke o posudbi ruฤno!)
Trebalo je pripremiti graฤ‘u za smjeลกtaj na police u novim ฤitaonicama, osmisliti novi sustav za smjeลกtaj graฤ‘e, svakom primjerku knjge pridijeliti odgovarajuฤ‡u oznaku i zapisati to u raฤunalnu bazu.

^^^ sredina 2007.

Zapoฤinje se sa samostalnim razvojem softvera (WebPAC2) za ureฤ‘ivanje i konverziju podataka kako bi se proces implementacije novoga softvera maksimalno ubrzao.

Knjiลพnice FF-a imale su u tome trenutku viลกe od 300.000 zapisa o knjigama i drugoj graฤ‘i, razlomljenih u viลกe od 20 odvojenih baza u softveru CDS/ISIS. Koristile su softver razliฤit od softvera kojeg je koristila NSK i zato je konverzija tih podataka ukljuฤivala drugaฤiju, prilagoฤ‘enu proceduru. Velik broj knjiลพnica unutar Sveuฤiliลกta u Zagrebu koristi takoฤ‘er CDS/ISIS. Softver za konverziju je objavljen pod slobodnom licencom i postojala je nada da ฤ‡e se iskoristiti i za druge knjiลพnice.

^^^ poฤetak 2008.

Nastavljaju se radovi na unutrarnjem ureฤ‘enju i opremanju zgrade nove Knjiลพnice. Raspisuje se natjeฤaj za RFID opremu i u dokumentaciji toga natjeฤaja treba navesti koji softver se koristi za knjiลพniฤno posovanje (sustavi moraju znati komunicirati).

U uลพoj i ลกiroj okolini nacionalnoga projekta za nabavu knjiลพniฤnoga softvera desile su se promjene zbog kojih su se aktivnosti usporile (<http://www.nsk.hr/Info.aspx?id=642>).

Knjiลพnice FF-a morale su krenuti u potragu za alternativnim rjeลกenjem, a potraga je bila voฤ‘ena s dva cilja na umu: rjeลกenje mora biti cjelovito i softver mora omoguฤ‡iti razmjenu podatake s drugim knjiลพnicama. Takoฤ‘er, rjeลกenje nije smjelo biti skupo jer se samostalna nabava softvera nije planirala.

^^^ oลพujak 2008.

Odabrana je Koha, slobodno dostupan softver. Zapoฤela je intenzivna edukacija o administraciji sustava i pripremanje sustava za prihvat konvertiranih podataka (migracija) i ostala potrebna podeลกavanja.

^^^ srpanj 2008.

Odabran dobavljaฤ RFID opreme. Zapoฤinje rad na implementaciji RFID sustava i integraciji s knjiลพniฤnim sustavom.

^^^ lipanj 2008.

Dovrลกena migracija podataka u Kohu. Zapoฤela obrada graฤ‘e za ฤitaonice u otvorenom prisutpu - pridjeljivanje novih oznaka za smjeลกtaj graฤ‘e i fiziฤka obrada primjeraka.

^^^ oลพujak 2009.

Knjiลพnica je sveฤano otvorena 11. oลพujka 2009., a 16. oลพujka krenuo je automatizirani upis korisnika i posudba. Podaci o korisnicima preuzimaju se iz fakultetskih sustava.

Na policama je ฤekalo preko 110.000 primjeraka knjiga opremljenih RFID oznakama i novim naljepnicama s oznakom smjeลกtaja, spremnih za koriลกtenje i posudbu. Uskoro su stavljeni u pogon i ureฤ‘aji za samoposudbu knjiga integrirani s Kohom.

^^^ lipanj 2009.

U tri mjeseca obraฤ‘eno je dodatnih oko 16.000 knjiga za ฤitaonice u otvorenom pristupu (oko 250 jedinica dnevno). U posudbi je uฤinjeno oko 30.000 transakcija (oko 500 jedinica dnevno). Nastavlja se s implementacijom ostatka knjiลพniฤnog poslovanja (nabava, obrada periodike, meฤ‘uknjiลพniฤna posudba).

Bilo kakva brzopleta zamjena softvera nekim drugim u ovome trenutku ozbiljno bi naruลกila funkcioniranje informacijskog sustava u Knjiลพnici FF-a. Zbog kompleksnosti cijeloga postupka knjiลพnice opฤ‡enito nemaju tendenciju migirati na drugi softver u ciklusima manjim od 5 godina.
stranica je preseljena na "drugi wiki"{link: knjiznica[Redizajn web stranica]}
*{link: knjiznica[UPUTE ZA ฤŒIPIRANJE]}*

{toc: }

^ Aplikacije

(dogovoriti s dobavljaฤem)

^^ oznaฤavanje graฤ‘e RFID oznakama

radni proces:

* pronaฤ‡i primjerak u bazi, postaviti se na suฤelje za editiranje primjerka
* nalijepiti naljepnicu na odgovarajuฤ‡e mjesto na knjizi
* poloลพiti knjigu na "ploฤu"
* provjeriti podatak o novoj signaturi
* kliknuti na polje barkod i izgenerirati barkod (alternativa: barkodi su unaprijed generirani)
* pritiskom na tipku (koju?) podatak iz polja barkod upisuje se na ฤip
* sustav mora signalizirati da je proces pisanja po ฤipu uspjeลกno zavrลกen

Unos podataka odvija se preko Koha suฤelja za unos podataka.
Moลพe li i treba li zaลกtiti pisanje/ฤitanje ฤipa lozinkom?

Potrebno je nekako evidentirati da je knjiga proลกla obradu.

Na suฤelje za unos podataka treba dodati indikator o poziciji naljepnice.

(ovdje treba opisati ลกta brojaฤ toฤno radi)

^^^ podaci na RFID oznaci

Konaฤni dogovor je da se naljepnice isporuฤuju prazne (bez podataka u ฤipu i bez isprinta na naljepnici).

Na RFID oznaku zapisuje se barkod. Barkod je serijski broj koji se sastoji od prefixa 130 i 7 znamenaka (ukupno 10 znamenaka). Brojevi se generiraju unutar knjiลพniฤnog softvera.

*raspraviti:*

ฤip se "zakljuฤava" nakon ลกto se podaci zakodiraju na njega - nemoguฤ‡e ga je preprogramirati

prednost: iskljuฤuje se rizik da netko izvana izbriลกe, zamijeni podatak u ฤipu i time uฤini zbrku meฤ‘u inventarom ili ukrade knjige
nedostatak: iskljuฤuje moguฤ‡nost bilo kakvog pokuลกaja da se smanji rizik od povrede privatnosti

naฤin na koji se moลพe smanjiti rizik od povrede privatnih podataka:

svaki put kad se knjiga zaduzi, na nju se upisuje upravo izgenerirani sluฤajni broj. veza izmeฤ‘u tog broja i identifikatora primjerka ฤuva se u posebnoj tablici, dostupnoj samo knjiลพniฤnom sustavu. u trenutku povratka knjige, broj se briลกe i na ฤip se kodira stara oznaka.

^^ printanje signatura

radni proces:

* knjiga se postavi na ploฤu
** pritisne se programska tipka (mora li to)?-
* naljepnica izaฤ‘e na printer

Na naljepnice treba isprintati:

* signaturu
* barkod
* naziv ustanove

format naljepnica: 105x40
preko naljepnice ide zaลกtitna folija

^^ inventura

* snimanje stanja na policama uz pomoฤ‡ ruฤnog ฤitaฤa i dobivanje ลพeljenih izvjeลกtaja
** koji izvjeลกtaji nam trebaju?
* oฤitavanje podataka o ฤipovima i promjene u bazi
** proฤitati podatke s ฤipa za neki set knjiga
** prekontrolirati i urediti te podatke prije daljneg procesiranja
** uฤiniti promjene u bazi na tom setu podataka (pr. proฤitati podatke na knjigama s police na 1. katu i u bazi oznaฤiti da su knjige na 1. katu)
* u kom formatu su podaci koje proฤita ฤitaฤ? u kom obliku se mogu exportati?

^^ evidencija prolazaka kroz vrata

zapisati statistiku prolazaka kroz vrata (u posebnu tablicu)

u tablicu treba zapisati:
datum i vrijeme
oznaku vrata
oznaku knjige

Ovo nije implementirano jer isporuฤena vrata ne znaju ฤitati identifikacijske podatke s ฤipa, samo binarni podatk o sigurnosti (otkljuฤano, zakljuฤano). To je puno bolje s aspekta ฤuvanja privatnosti.

^^ iskaznice

* isporuฤiti bazu
* nakon ลกto stigne roba, istestirati iskaznice
* probne imamo samo prazne

^^ ostalo

* traลพiti _protocol specification_ za komunikaciju s readerom (moded 810)

^ Biljeลกke

*Za proฤitati*

Use of RFID Technology in Libraries: a New Approach to Circulation, Tracking, Inventorying, and Security of Library Materials
http://www.webpages.uidaho.edu/~mbolin/shahid.htm

*Integracija ILS i RFID sustava*

* vrsta i format podataka koji ฤ‡e biti zapisani na ฤipove i kartice, imajuฤ‡i na umu cilj objedinjenoga sustava za knjiลพniฤno poslovanje na razini Sveuฤiliลกta
* integracija na radnom mjestu

*Sigurnost*

* opseg evidencije knjiga i korisnika na izlazu iz knjiลพnice
* opseg evidencije o posudbi knjiga
* pravila za sigurnost podataka u radu RFID i ILS sustava, popis 'uloga' u radu knjiลพniฤnoga sustava, pripadnost knjiลพniฤara i pomoฤ‡noga osoblja pojedinim ulogama, ovlaลกtenja uloga za pojedine operacije u sustavu za knjiลพniฤno poslovanje, ovlaลกtenja uloga za uvid u podatke i izmjene podataka, rokova u kojima se zapisi mogu vidjeti odnosno nakon kojih se moraju brisati i sl.

Sigurnost podataka u sustavu knjiลพniฤnog poslovanja i RFID sustavu snaลพno ovisi o moguฤ‡nosti nadzora dohvata i upotrebe tih podataka. Prvi uvjet za to je moguฤ‡nost pristupa podacima samo autenticiranih korisnika, a drugi da autenticirani korisnici mogu doฤ‡i do podataka u odreฤ‘enim operacijama samo ako su autorizirani za izvoฤ‘enje tih operacija.

*Podaci*

U svakom ฤipu ฤ‡e biti trajno zapisan niz znamenki koji predstavlja jedinstveni identifikator svakog sveska koji je raspoloลพiv za posudbu.

U procesu posudbe na ฤip se zapisuje status โ€žzaduลพenoโ€œ a kod razduลพivanja status โ€žnije zaduลพenoโ€œ. Izlazna vrata oฤitavaju ovaj podatak s ฤipa knjige koju korisnik iznosi kroz vrata i aktivira alarm ako knjiga ima u ฤipu zapisan status โ€žnije zaduลพenoโ€œ.

Ako je uspostavljena veza sa sustavom za knjiลพniฤno poslovanje, izlazna vrata doznaju naslov knjige koja nije zaduลพena kako bi se lakลกe moglo pronaฤ‡i problematiฤnu knjigu kad se na izlazu naฤ‘e nekoliko korisnika, svaki s po nekoliko knjiga. Alternativno, izlazna vrata drลพe popis svih naslova u knjiลพnici (i periodiฤki ga osvjeลพavaju) pa mogu znati naslov knjige i kad ne radi veza sa sustavom za knjiลพniฤno poslovanje.
(Ovo nije implementirano - to je argumentacija zaลกto ta moguฤ‡nost moลพe biti korisna, ali pitanje je koliko je to zapravo korisno. Isporuฤena vrata, na sreฤ‡u, mogu znati samo da li je knjiga uredno zaduลพena ili nije.)

*workflow*

* naljepi naljepnicu s identifikacijskom oznakom na knjigu
* upiลกi neki podatak o knjizi (nor. inventarni broj) u polje za pretraลพivanje
* ako je rezultat samo jedan, otvara se editor s ovim poljima: * polje za unos identifikacijske oznake (preko barkod ili RFID ฤitaฤa) * prikaz podataka koji omoguฤ‡uju i olakลกavaju identifikaciju graฤ‘e: * identifikacijski brojevi iz koha.items (biblionumber, itemnumber, biblioitemnumber - odrediti koji su potrebni?) * inventarni broj * naslov
* ako je rezultata viลกe, ispisuje se lista s koje treba odabrati odgovarajuฤ‡i primjerak, odabire se odgovarajuฤ‡i, pa se onda otvara editor

* da li se podaci upisuju direktno u bazu ili u posebnu? ako se piลกu u posebnu imamo problem sinkronizacije.
* da li moลพda dozvoliti moguฤ‡nost editiranja joลก nekih polja. zaลกto? ako da, kojih polja?

*Protokoli za komunikaciju*

NCIP, SIP2. SLNP, Z39.50

Koha razvija podrลกku za NCIP.

* http://openncip.org/
* http://wiki.koha.org/doku.php?id=en:development:roadmap3.0&s=ncip

*Samoposudba*

* u projektu nisu predviฤ‘ene stanice za vraฤ‡anje knjiga u preriodu kad je knjiลพnica zatvorena. ta usluga je poลพeljna
* stanice za self-check out moguฤ‡e je napraviti preko podrลกke za self-checkout u ILS-u

*Pitanja*

* koje podatke sadrลพi identifikacijska oznaka?
* da li se RFID moลพe ponovo kodirati - pr. sad upiลกemo samo neki automatski generirani redni broj, a kasnije se predomislimo i hoฤ‡emo joลก neke druge podatke?
* izaลกla vijest u novinama/netu: mozda se tiฤe jedinstvenog broja korisnika: http://www.net.hr/vijesti/hrvatska/page/2008/03/14/0852006.html - pogotovo za sustav (voyager...)

* Iva: ลกto je s iskaznicama korisnika? hoฤ‡e li one imati isti sustav identifikacije - barkode/rfid i kako/kad/tko ฤ‡e ih izraฤ‘ivati?

* preporuka za problem privatnosti
* pojaลกnjenje "security" opcije u 3M softveru
* da li tvorniฤki broj na ฤipu ostaje zauvijek zapisan
* ลกto ฤ‡e osigurati da se naลก ฤip zvoni na
* na koji naฤin zapisati
*24.10.2010.*

corrupted:
248612
249478
250682
251126
251127
251128
253059
253170
253916

*22.09.2010*.

corrupted:
253170
253059
251128
251127
251126
250682

(i joลก 2)
^ Itemlost status

*2010-10-24*

.pre
mysql> update items set itemlost = 2 where ccode='KOM' and location <> 'IZC' and itype <> 'PER' and itemlost = 1 ;
Query OK, 859 rows affected (1.88 sec)
Rows matched: 859  Changed: 859  Warnings: 0

mysql> update items set itemlost = 1 where ccode='KOM' and location = 'ZSPO' and itype <> 'PER' and itemcallnumber is null and itemlost = 0 ;
Query OK, 677 rows affected (1.92 sec)
Rows matched: 677  Changed: 677  Warnings: 0

.pre

^ Inventarni broj - public note (items.itemnotes)

Koha dolazi s poljem 952z mapiranim u items.itemnotes. Sadrลพaj tog polja pokazuje se u tablici s primjercima u koloni "Notes".
U FFZG se pod "Notes" u OPAC-u prikazuje stari inventarni broj koji je zapisan u polje 952i koje je mapirano u items.itemnotes.
Polje 952i ne postoji u default Koha MARC frameworku.

Public note je tako potroลกen za inventarni broj i nema moguฤ‡nosti unoลกenja stvarne javne napomene za primjerak.

Inicijalna implementacija uฤinjena je na ovaj naฤin, ลกto je kasnije promijenjeno.

^ Inventarni broj - copynumber

U veljaฤi 2010. (?) inventarni broj je preseljen u copynumber

Javna napomena (items.itemnotes) moลพe se sada upotrebljavati u svojem originalnom znaฤenju.

Postoji sada novo polje u Koha items tablici (dodali BibLibre) - stocknumber. To polje bi se zapravo trebalo koristiti za inventarni broj - nije mapirano u MARC21 polje, a trebalo bi biti.

^ Konverzija i migracija podataka iz CDS/ISIS-a

^^ Konvertirana polja

| *MARC* | *naziv polja* | *autorizirana vrijednost* | *Koha baza* | *znaฤenje* |
| 952$8 | Zbirka | CCODE | items.ccode | oznaka zbirke |
| 952$a | _home branch_ | branches | items.homebranch | FFZG |
| 952$b | _holding branch_ | branches | items.holdingbranch | FFZG |
| 952$c | Lokacija | LOC | items.location | kat i struฤna skupina (taj podatak je kodiran u signaturi) |
| 952$o | Signatura |  | items.itemcallnumber | signatura na primjerku |
| 952$p | barcode |  | items.barcode | barkod, tj. broj u ฤipu |
| 952$i | Inventarni broj |  | items.itemnotes | stari inventarni broj s prefiksom zbirke - kasnije preseljeno u copynumber = 952$t |

^^ Migracija

U migraciji Koha ฤita podatke o primjercima iz polja 952. Moguฤ‡e je te podatke staviti i u neko drugo polje, no u tom sluฤaju treba napraviti odgovarajuฤ‡e linkove u MARC framework.

*Samo 1 MARC tag* moลพe biti mapiran u iteme (postoji framefork test).

    * <https://koha-dev.rot13.org:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=952&frameworkcode>=
    * <https://koha-dev.rot13.org:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?op=add_form&tagfield=952&frameworkcode>=

Prilikom {link: konverzija [Konverzija podataka] }, podaci o primjercima generirani na temelju inventarnog broja iz ponovljivog polja 991 u CDS/ISIS bazi. Polje 991 je zadrลพano u konvertiranim bibliografskim zapisima, ali se viลกe ne odrลพava (ne briลกu se oni koji su izbrisani u Kohi niti se nadopisuju novi). Inventarnom broju dodan je prefix - kratica sare knjiลพnice (sada zbirke).
Ova stranica dokumentira naลกa podeลกavanja (i pokuลกaje) za ลกto brลพom Koha instalacijom.

{toc: }

^ Apache deflate kompresija

Smanjuje veliฤinu stranice koja se isporuฤije browersu.

{fetchrss: http://sysadmin-cookbook.rot13.org/rss/apache2.xml full}

^ Session

.pre
dpavlin@koha:~$ sudo ./mk-query-digest /var/log/mysql/mysql-slow.log

# Profile
# Rank Query ID           Response time    Calls R/Call   Item
# ==== ================== ================ ===== ======== ================
#    1 0xC7A803CDD4FE9A36 30517.0000 45.5%   349  87.4413 INSERT UPDATE sessions
#    2 0xB4F2B316DFE865C8  8027.0000 12.0%   119  67.4538 SELECT sessions
#    3 0x6019E0D94A244FF5  3952.0000  5.9%   275  14.3709 SELECT opac_news
#    4 0x1F809CA9753CDEE7  2753.0000  4.1%    23 119.6957 SELECT biblio
#    5 0x27CE7D5D2BC5F598  2305.0000  3.4%   206  11.1893 SELECT fieldmapping
#    6 0xB0F504DD073A49CB  2192.0000  3.3%    30  73.0667 SELECT issues items biblio biblioitems
#    7 0x8ED635CB153D27A5  2146.0000  3.2% 19313   0.1111 SELECT reserves reserveconstraints
#    8 0xDB6DC1962741AB10  1978.0000  3.0%     7 282.5714 SELECT biblio biblioitems itemtypes
#    9 0x32783383AEA5AD49  1642.0000  2.4%    10 164.2000 SELECT items
#   10 0x6DD9F09DA2455228  1361.0000  2.0%     8 170.1250 DELETE sessions
.pre

Promjeniti `SessionStorage` u "as temporary files" i opcionalno pomaknuti ih u `/dev/shm` umjesti o u `/tmp/`:

.pre
dpavlin@koha:~$ diff -urw /srv/koha/C4/Auth.pm /usr/share/koha/lib/C4/Auth.pm
--- /srv/koha/C4/Auth.pm        2010-02-20 21:41:34.000000000 +0100
+++ /usr/share/koha/lib/C4/Auth.pm      2010-04-26 16:03:17.671211497 +0200
@@ -1341,7 +1341,7 @@
     }
     else {
         # catch all defaults to tmp should work on all systems
-        $session = new CGI::Session("driver:File;serializer:yaml;id:md5", $sessionID, {Directory=>'/tmp'});
+        $session = new CGI::Session("driver:File;serializer:yaml;id:md5", $sessionID, {Directory=>
.pre

^ Profile

^^ Devel::NYTProf

instalacija:

.pre
root@koha-dev-git-reorg:~# cpan Devel::NYTProf
.pre

profile search query:

.pre
root@koha-dev-git-reorg:/usr/share/koha/opac/cgi-bin/opac# time perl -d:NYTProf -I/usr/share/koha/lib/ opac-search.pl q=human | wc
   1553    3259   58648

real    0m4.001s
user    0m3.152s
sys     0m0.560s
.pre

generate html report:

.pre
root@koha-dev-git-reorg:/usr/share/koha/opac/cgi-bin/opac# nytprofhtml 
Generating report...
Reading nytprof.out
Writing report to nytprof directory
.pre

^^^ koha-240

First run

.pre
dpavlin@koha-240:/tmp$ time perl -d:NYTProf -I/usr/share/koha/lib/ /usr/share/koha/opac/cgi-bin/opac/opac-search.pl q=human | wc
Use of uninitialized value $borrowernumber in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 483.
Use of uninitialized value in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 486.
   1962    3177   64512

real    0m8.561s
user    0m5.708s
sys     0m0.724s
.pre

Second run

.pre
dpavlin@koha-240:/tmp$ time perl -d:NYTProf -I/usr/share/koha/lib/ /usr/share/koha/opac/cgi-bin/opac/opac-search.pl q=human | wc
Use of uninitialized value $borrowernumber in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 483.
Use of uninitialized value in string eq at /usr/share/koha/opac/cgi-bin/opac/opac-search.pl line 486.
   1962    3177   64512

real    0m6.664s
user    0m5.636s
sys     0m0.816s
.pre

Drop caches and run profile:

.pre
dpavlin@koha-240:/tmp$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
.pre

^^ Zebra reindex

.pre
dpavlin@koha-240:/srv/koha$ sudo -u koha ./misc/migration_tools/rebuild_zebra.pl -b -v -r -d /tmp/indexing -k -x -nosanitize

.pre
Dodati za `952$o` plugin `https://10.60.0.252:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?tagfield=952&frameworkcode=LIB`

https://10.60.0.252:8443/cgi-bin/koha/admin/marc_subfields_structure.pl?op=add_form&tagfield=952&frameworkcode=LIB

Dodatni plugin: http://koha-dev.rot13.org:8081/cgi-bin/gitweb.cgi?p=koha-ffzg.git;a=shortlog;h=refs/heads/rt-390-signatura-zatvorenog-spremista

{link: koha-cug [Pisanje Koha plugina] }
Ova stranica opisuje postupak koji prolaze podaci da bi novootvoreni korisnici preko Koha suฤelja
a) dobili ฤlanski broj (broj kartice)
b) pojavili se u SafeQ sustavu.

SafeQ sustav povlaฤi podatke o korisnicima iz Kohe preko LDAP-a. LDAP je implementiran direktno na podacima u Kohi (vidi [SafeQ integration]), ali SafeQ ne moลพe proฤitati broj korisnika sa kartice, nego samo serijski broj kartice koji koristi RFID protokol (SID).

Taj broj postoji jedino u log datotekama 3M sustava, a kako raฤunalo na kojem se programiraju ฤipovi za sad nije spojeno na mreลพu, cijela procedura ipak ovisi o povremenom presnimavanju podataka na server.

*U razvoju je zamjena za cijelu ovu proceduru koja bi omoguฤ‡ila printanje novih isprogramiranih kartica odmah nakon ลกto se korisnik prvi puta ulogira u Kohu* (tj. odmah ฤim aktivira ฤlanstvo u knjiลพnici).

^ trenutno stanje

{fetchrss: http://via.rot13.org/10.60.0.12/SQL2RSS/koha/ full}

{toc: }

^ Generiranje brojeva kartica

Prvi korak je dodjeljivanje brojeva kartica u obliku 200908240042 gdje su prve znamenke datum a zadnje ฤetiri redni broj korisnika u tom danu. To je jedinstveni broj korisnika koji koriste svi ostali servisi (npr. 3M Selfcheck) ali ne i SafeQ-a!

^^ Generiranje brojeva kartica

*ovaj korak radi se na produkcijskoj bazi*

.pre
dpavlin@koha:/srv/koha-rfid$ ./generate-cardnumber.pl --commit
.pre

provjeriti ispis i pokrenuti ponovo sa --commit da bi se promjene zapisale u bazu

generira takoฤ‘er backup borrowers tablice

Ispisuje na kraju generirato ime log datoteke:

.pre
backup for borrowers table: backup/borrowers.2010-09-02T15:05:09.sql 3838484 bytes
generated print.2010-09-02T15:05:09.txt 41879 bytes
.pre

Format loga: cardnumber <tab> login <tab> ime <tab> prezime

.pre
dpavlin@klin:~/klin/Biblio-RFID$ head -1 print.2010-09-02T15\:05\:09.txt 
201007140004    kohatest@ffzg.hr        Koha    Testiฤiฤ‡ Probiลกiฤ‡ ฤลพ
.pre

^ Printanje iskaznica

*ovaj korak se radi na maลกini sa koje se printaju iskaznice*

^^ Podaci za pritanje

.pre
dpavlin@klin:~/klin/Biblio-RFID$ rsync -v koha:/srv/koha-rfid/print*.*.txt .
.pre

^^ Pokretanje printanja

Printanje ฤeka da se kartica makne na RFID ฤitaฤa da bi nastavilo!

.pre
dpavlin@klin:~/klin/Biblio-RFID$ ./scripts/print.pl print.2010-09-02T15\:05\:09.txt

...

QUEUE EMPTY - printing finished
log.print/2010-08-17T16:36:27.txt 100 bytes created
.pre

^^ Kopiranje SID-ova za Kohu

.pre
dpavlin@klin:~/klin/Biblio-RFID$ rsync -rav log.print/ koha.ffzg.hr:/srv/koha-rfid/log.print/
.pre

^ Import SID-ova u Kohu

.pre
dpavlin@koha-dev:/srv/koha-rfid$ ./rfid2koha-borrower-attribute.pl log.print/2010-08-17T16\:36\:27.txt
.pre

----

^ Import 3M log datoteka

*ovaj korak je stara procedura i ne koristi se viลกe*

^^ kopiranje novih logova na koha-dev

`*.LOG` datoteke iz 3M softwarera se kopiraju u `/srv/koha-rfid/log`

.pre
dpavlin@koha:~$ sudo mount /mnt/koncar/
dpavlin@koha:~$ cp -v /mnt/koncar/* /srv/koha-rfid/log/
dpavlin@koha:~$ sudo umount /mnt/koncar/
.pre

^^ preimenovanje u intervale koje pokrivaju

.pre
dpavlin@koha:/srv/koha-rfid$ make rename
find log/ -name "*.LOG" | xargs -i ./rename-log.sh {}
chmod 644 log/*.log

dpavlin@koha:/srv/koha-rfid$ ls -al log | head
total 27860
drwxr-xr-x 4 dpavlin dpavlin   4096 2010-03-01 16:33 .
drwxrwxr-x 6 dpavlin dpavlin   4096 2010-02-25 15:18 ..
-rw-r--r-- 1 dpavlin dpavlin 524488 2010-02-21 02:10 20080922-20081111.log
-rw-r--r-- 1 dpavlin dpavlin 524334 2010-02-21 02:10 20081015-20081024.log
-rw-r--r-- 1 dpavlin dpavlin 524606 2010-02-21 02:10 20081024-20081103.log
-rw-r--r-- 1 dpavlin dpavlin 524322 2010-02-21 02:10 20081027-20081027.log
-rw-r--r-- 1 dpavlin dpavlin 524510 2010-02-21 02:10 20081027-20081029.log
-rw-r--r-- 1 dpavlin dpavlin 524296 2010-02-21 02:10 20081029-20081103.log
-rw-r--r-- 1 dpavlin dpavlin 524366 2010-02-21 02:10 20081103-20081106.log
.pre

^^ provjera novih podataka

.pre
cd log
git status
git add *.log
git commit -m 'new data'
.pre

^^ parse log

.pre
dpavlin@koha-dev:/srv/koha-rfid$ make rfid

...

wc -l rfid.txt
12196 rfid.txt
echo "`cat rfid.txt | cut -d, -f2 | sort -u | wc -l` different tags"
11243 different tags
echo "`cat rfid.txt | cut -d, -f2- | grep ',20' | sort -u | wc -l` card tags"
4151 card tags
.pre

^^ Kopiranje borrowers tablice s produkcije na development

.pre
dpavlin@koha-dev:/srv/koha-rfid$ ./update-borrowers.sh
.pre

Ovo ฤ‡e stvoriti `borrowers2` tablicu na developmentu i prekopirati sve nove korisnike u `borrowers` tablicu, a postojeฤ‡im korisnicima upisati cardnumber ako je on u meฤ‘uvremenu generiran na produkciji.

^^ update kohe

(pokreฤ‡e sam i parsanje log dataoteka)

.pre
dpavlin@koha-dev:/srv/koha-rfid$ make rfid2koha
.pre
{toc: }

^ Pripreme

| + | Koha 3.0 instalacija - koha.rot13.org - virtualna maลกina na mjesecu | Dobrica | 05.03.2008. |
| + | testni import podataka | Marijana | 05.03.2008. |
| + | demonstracija voditelju knjiลพniฤne i informatiฤke sluลพbe | Marijana | 07.03.2008. |
| + | okupljanje uลพe grupe za implementaciju
[Plan za prvi tjedan (10.03. do 14.03.2008)]
[Tjedan drugi (17.03.2008. - 21.03.2008.)] |  |  |
| + | otvaranje mailing liste, postavljanje wikija | Iva, Marijana | 11.03.2008 |
| + | sluลพbena obavijest svim knjiลพniฤarima o Kohi, na sastanku o preseljeljenju | Mihel | {link: [09-04-08]} |

^ IMPLEMENTACIJA

| + | Koha 3.0 instalacija na koha.ffzg.hr - test | Dobrica | 07.04.08. |
| + | Instalacija produkcijske verzije | Dobrica | 05.05.08. |
| +/- | globalni [parametri sustava] | Iva i Marijana |  |
| + | instalacija servera dobivenog na koriลกtenje od informatiฤke sluลพbe i seljenje Koha produkcije na taj server | Dobrica | 24.05.08. |
| + | [MARC21 struktura zapisa] | Dorja i Marijana | 26.05.08. |
| - | [Izrada predloลพaka] (_frameworks_) | Dorja i Marijana |  |
| + | utvrฤ‘ivanje polja za "podatke o primjercima"{link: knjiznica [Koha podaci o primjercima]} | Marijana, Iva | 30.04.08. |
| - | "odreฤ‘ivanje vrste graฤ‘e, tipova korisnika i pravila posudbe"[Posudba] | Viลกnja | 30.04.08. |
| - | utvrฤ‘ivanje naฤina komunikacije sa zatvorenim spremiลกtem |  | 30.04.08. |
| + | pripreme za prevoฤ‘enje (po fajlovi) | Marijana | 14.04.08. |
| - | upute za prevoฤ‘enje |  |  |
| +/- | prevoฤ‘enje |  | 31.05.08. |
| - | plan edukacije knjiลพniฤara i materijali za edukaciju | Dorja | 31.05.08. |
| - | edukacija knjiลพniฤara | Dorja | lipanj 2008, rujan 2008 i kontinuiarano |
| - | izrada predloลพaka za printanje naljepnica sa signaturama |  |  |
| + | prilagoฤ‘avanje suฤelja za unos posataka za jednostavniji pristup podacima o primjercima | Dobrica i Marijana | 19.05.08. |
| - | ureฤ‘ivanje prikaza podataka na OPAC-u | Marijana |  |
| - | ureฤ‘ivanje prikaza podataka na intranetu | Marijana |  |
| - | izrada normative za signature |  |  |

^ *PLAN RADA*

^^ MAPIRANJE

โ€ข pretpostavka migracije
โ€ข pretpostavka signiranja

^^ MIGRACIJA

โ€ข sreฤ‘eni fond
โ€ข ako je mapiranje gotovo

^^ TEHNIฤŒKA PODRล KA

-โ€ข izraditi --_searchplugin_-- za Firefox i --toolbare-
-โ€ข instalirati firefox 3-
โ€ข instalacija pad-ova

^^ EDUKACIJA PRESIGNIRANJE

โ€ข upute
โ€ข redoslijed prema migraciji
โ€ข individualno

^^ PRESELJENJE ฤŒASOPISA

โ€ข signiranje zavrลกeno
โ€ข slijedi fiziฤko preseljenje
โ€ข ฤeka se da je podrum gotov
โ€ข kada prostor gotov, oฤistiti (treba vidjeti tko ฤisti โ€“ izvoฤ‘aฤ ili faks)
โ€ข urediti ulaz u sam podrum (rampa, nosaฤi?)
โ€ข trebaju koลกare
โ€ข svakako netko gore i netko dolje tko ฤ‡e nadzirati rad
โ€ข svakako evidencija
โ€ข lijepiti oznake na kompaktuse

^^ PRESELJENJE PASIVNOG FONDA

โ€ข neobraฤ‘eni fond
โ€ข pasivni fond
โ€ข oลกteฤ‡eni fond
โ€ข oznaฤiti u bazi lokaciju

^^ ฤŒIPIRANJE

โ€ข ฤipiramo li sve knjige ili samo aktivni fond?
โ€ข u starom prostoru
โ€ข ฤim doฤ‘u naljepnice i printer
โ€ข demosi ili praktikanti
โ€ข treba paziti na mjesto lijepljenja ฤipova (3 razliฤite lokacije na zadnjoj stranici prije omota, ali ลกto bliลพe hrptu)

^^ PRESELJENJE AKTIVNOG FONDA

โ€ข koลกare
โ€ข evidencija
โ€ข kontrola
โ€ข nosaฤi pomoฤ‡ni radnici
โ€ข lijepljenje naljepnica na kompaktuse
โ€ข ฤiลกฤ‡enje knjiga (alkohol, vata??)

^^ PRESIGNIRANJE

โ€ข u novom prostoru
โ€ข samo aktivni fond
โ€ข zaลกtita naljepnica (zaลกtitna folija - 
โ€ข odrediti mjesto lijepljenja naljepnica 
โ€ข upisati u bazu (gdje, kako, na ฤemu?)

^^ EDUKACIJA KATALOGIZACIJA

โ€ข upute (originalna i copy katalogizacija)
โ€ข revizija napravljenog
โ€ข organizacija edukacije

> o prvo oni kojima se podaci prvi migriraju
> o vjerojatno individualno (zbog nemoguฤ‡nosti pronalaska adekvatnog prostora)
> o oni koji su preselili graฤ‘u i koji mogu poฤeti katalogizirati (ili prije?)

^^ EDUKACIJA โ€“ DRUGI POSLOVI

โ€ข nabava
โ€ข posudba
โ€ข rezervacije
โ€ข veza sa zatvorenim spremiลกtem

^ POTREBNO NABAVITI

โ€ข zaลกtitna folija
โ€ข alkohol
โ€ข vata (ili neลกto drugo za ฤiลกฤ‡enje knjige)
โ€ข ลกkare
โ€ข olovke
โ€ข "naljepnice za signature"<http://www.marbet.hr/neschen1.php>
โ€ข naljepnice za kompaktuse
โ€ข ฤipovi
^ OPAC templates:

/+/ dodati ikonice za vrstu graฤ‘e (LDR/06) i bibliografsku razinu (LDR/07)

http://www.loc.gov/marc/bibliographic/bdleader.html

.pre
LDR

06 - Type of record
a - Language material
c - Notated music
d - Manuscript notated music
e - Cartographic material
f - Manuscript cartographic material
g - Projected medium
i - Nonmusical sound recording
j - Musical sound recording
k - Two-dimensional nonprojectable graphic
m - Computer file
o - Kit
p - Mixed materials
r - Three-dimensional artifact or naturally occurring object
t - Manuscript language material

07 - Bibliographic level
a - Monographic component part
b - Serial component part
c - Collection
d - Subunit
i - Integrating resource
m - Monograph/Item
s - Serial
.pre

/+/ templates pospremiti u git

* Expanded ne pokazuje Sort by na dobroj poziciji kad je ekran uzak
* Kako dodati/maknuti jezike u limiteru? Nema hrvatskog, nekih jezika nemamo u bazi a nalaze se na popisu, treba provjeriti koji joลก fale
* Kineski i japanski znakovi u Language limiteru?

^ Intranet templates

* advsearch.tmpl - Boolov operator izmeฤ‘u vrsta graฤ‘e i zbirke treba biti AND

^ Items

[Itype migracija - pravila posudbe]
Migraciji je predhodilo ฤiลกฤ‡enje podataka i izrada alata za konverziju. 
Dokumentacija o konverziji - http://saturn.ffzg.hr/konverzija

.

| *Teme*

* [Mapiranje u nove signature]
* [Tablice za mapiranje signatura]
* [Redoslijed migracije]
* [Migracija u testnu bazu]
* [Migracija u produkcijsku bazu]
* [Koha bulk import]
* [Koha podaci o primjercima]
* [Lokalne promjene]
* [Holdings - MARC21 standard]
* [Migracija podataka o posudbi] | *!! AKTUALNO !!*

* {link: konverzija[Konvezija ocjenskih radova]}

^^^^ ล to treba napraviti prije migracije?

* definirati "lokacije"[parametri_sustava] (home i holding)
* definirati "vrste graฤ‘e za posudbu"[posudba]
* utvrditi sustav mapiranja za signature -- {link: nova_knjiznica[raspored graฤ‘e u otvorenom pristupu]}
* odrediti pravila za "katalogizaciju"{link: knjiznica [katalogizacija]}
* utvrditi koji se podaci zapisuju na RFID i da li se podaci generiraju u Kohi? |

.

Biljeลกke

* Mora li se MARC framework postaviti prije importa podatka?
* ล to ako se ne postavi?
* Moลพe li se kasnije raditi export u MARC za polja koja se zapisuju u koha bazu, a nisu mapirana?
* [Implementacija posudbe u Kohi]

* [Kalendar]

* [Produลพivanje roka posudbe]

* [Rezervacije u Kohi - implemetacija]

* {link: knjiznica [Pravilnici za posudbu i meฤ‘uknjiลพniฤnu posudbu]}
{toc: }

^ upgrade Kohe

[Upgrade ljeto 2010]

^ printanje iskaznica

* [Printanje i programiranje kartica]
* batch od 100 iskaznica (feeder size)
* members/cardnumbers-generate.pl
* members/cardnumbers-print.pl
* izgubljene iskaznice (blokiranje iskaznice 14 dana, borrowernumber za selfcheck, RFID SID za kopirke)

^ eprints3 upgrade

* Marijana

^ WebGUI

* Upgrade 2010
* LDAP login na ldap.ffzg.hr

^ socialtext

^ monitoring

^ arh-hw zfs pool

* proradio disk controller

^ upgrade WebConvergera za kataloge

^ RFID

* RFID::Serial splitout
** CPR support
Upisi se obavljaju u D-VII u istom danu kad se studenti upisu na faks. Nakon podizanja AAI@EduHr korisniฤkog raฤuna, trebaju se prijaviti u katalog s adrese:

* *https://koha.ffzg.hr/cgi-bin/koha/opac-userupdate.pl*

Tu trebaju provjeriti svoje podatke, popuniti ลกto nedostaje i ispraviti ลกto je krivo. Ako su mijenjali podatke odaberu *"Poลกalji promjene"* pa se onda odjave, a ako je sve u redu samo se odjave.

Time su poslali zahtjev u Knjiลพnicu za izdavanje korisniฤke iskaznice. Iskaznicu ฤ‡e moฤ‡i podiฤ‡i na jesen kad se knjiลพnica otvori.
* imaju veฤ‡u koliฤinu seminarskih radnji koje bi trebalo obraditi
* obradu bi radili asistenti
* dio graฤ‘e bi se digitalizirao
* graฤ‘a bi (kasnije) bila na raspolaganju svim korisnicima Knjiลพnice

^^ Framework Seminarske radnje
{toc: }

^ Postupak oznaฤavanja primjeraka predloลพenih za otpis

U editoru za primjerke, pod statusom "*0 - Otpis*" treba odabrati jednu od ovih oznaka:

> Prijedlog za otpis - uniลกteno
> Prijedlog za otpis - dotrajalo
> Prijedlog za otpis - zastarjelo

Treba detaljnije obrazloลพiti ลกta znaฤi koji od ovih razloga:

Npr. ovo je naฤ‘eno u nekim uputama koje se pozivaju na Pravilnik:
1. Uniลกtena graฤ‘a
       - neupotrebljiva graฤ‘a
       - izgubljena, otuฤ‘ena graฤ‘a
       - nevraฤ‡ena
2. Dotrajala graฤ‘a
3. Zastarjela graฤ‘a

^ Izvjeลกtaji

Izvjeลกtaji s primjercima oznaฤenim ovim oznakama nalazi se na stranici:

* https://koha.ffzg.hr:8443/reports/otpis/

Izvjeลกtaji se obnavljaju svake noฤ‡i.

Trenutno je u bazi 143 primjerka koji su veฤ‡ oznaฤeni kao otpisani. Treba provjeriti ลกta je to toฤno - da li su to primjerci predloลพeni za otpis?

^ Raspraviti

1.
Ovi razlozi prepisani su iz Pravilnika. Treba li dodati joลก koji razlog? Moลพe li po zakonu postojati joลก koji razlog? - npr. kako obrazloลพiti otpis graฤ‘e koje imamo u prevelikom broju primjeraka?

2.
Ove oznake vide se u OPAC-u. Treba li ih moลพda nekako drugaฤije nazvati (znaฤenje im ostaje isto). Npr. moลพemo ostaviti samo "uniลกteno", "dotrajalo" ili "zastarjelo" (ili ลกto veฤ‡ treba navesti pod razloge.

^ Dokumenti i literatura

* http://narodne-novine.nn.hr/clanci/sluzbeni/308262.html
* http://www.nsk.hr/UserFiles/File/otpis_i_revizija.ppt
Page renamed to [AAI_korisnicki_racuni]
Kad se uvede elektroniฤka inventarna knjiga, bilteni prinova radit ฤ‡e se drukฤije.

Ovo je privremeno rjeลกenje i loลกe je jer je podatke teลกko obnavljati ako se uoฤi greลกka.

Bilteni su na webu: http://mjesec.ffzg.hr/webpac-dev-prinove (ovo je razvojna verzija, kad bude gotovo otiฤ‡i ฤ‡e na novu adresu)

Zapisi su sortirani po autoru i naslovu.

Copy paste u Word trebao bi proฤ‡i uredno. U Wordu se onda doda joลก ลกta treba (naslovnica, header, footer, brojevi stranica...) i pretvori u pdf da se lakลกe printa ako se ลกalje nekome tko ลพeli printati.

_vidi:_ [Kako pretvoriti podatke u pdf?]

*ล to se joลก moลพe napraviti s prikazom podatka?*

* dodati joลก podataka (npr. UDK).
* grupirati (po UDK moลพda? moลพda bolje po struฤnim skupinama iz signatura)

*ล ta da radim kad uoฤim greลกku?*

Ako ih je malo:
Ispraviti u Wordu, ali ispraviti i u Koha bazi (na dva mjesta!)

Ako ih je puno i sve su sliฤne?
Ispraviti samo u Kohi i javiti da treba nove podatke ubaciti u bilten.
{toc: }

^ MySQL baza iz komandne linije

^^ Backup

.pre
$ mysqldump --add-drop-table --single-transaction -u _kohauser_ -p koha > 2008-11-11_koha.sql
$ mysqldump --add-drop-table -u _kohauser_ -p koha issues > 2008-11-11_koha.issues.sql
.pre

http://www.nabble.com/Backing-up-3.0-to21076508.html

^^ Restore

.pre
$ mysql -u _kohauser_ -p koha < 2008-11-11_koha.sql
$ mysql -u _kohauser_ -p koha.issues < 2008-11-11_koha.issues.sql
.pre

^ Restore sa zfs

^^ opr - zfs backup server

.pre
# Find backup snapshot to restore
dpavlin@opl:~$ ./veid2hostname.sh 
212052 koha-dev.rot13.org
212056 webpac2.rot13.org
212226 koha.ffzg.hr
dpavlin@opl:~$ sudo zfs list | grep 212226 | tail -3
opl/backup/212226@2010-01-05   662M      -  25.4G  -
opl/backup/212226@2010-01-06    28K      -  25.4G  -
opl/clone/212226-mlin         30.0M  24.5G  25.4G  /opl/clone/212226-mlin

# make clone to access files
dpavlin@opl:~$ sudo zfs clone opl/backup/212226@2010-01-06 opl/clone/koha-2010-01-06
dpavlin@opl:~$ df -h /opl/clone/koha-2010-01-06
Filesystem            Size  Used Avail Use% Mounted on
opl/clone/koha-2010-01-06
                       50G   26G   25G  51% /opl/clone/koha-2010-01-06
.pre

^^ cpio file transfer

* mlin - hardware which provide resources
* opl - machine with backup files

.pre
root@mlin:/virtual.clone# mkdir koha-2010-01-06
root@mlin:/virtual.clone# cd koha-2010-01-06/

# start listener for cpio data transfer
root@mlin:/virtual.clone/koha-2010-01-06# nc -l -p 8888 | pv | cpio --extract --make-directories --preserve-modification-time --numeric-uid-gid --sparse
.pre

.pre
dpavlin@opl:~$ sudo bash
root@opl:~# cd /opl/clone/koha-2010-01-06
root@opl:/opl/clone/koha-2010-01-06# find . | cpio --create | pv | nc 10.60.0.93 8888
.pre

^^ rsync file update

.pre
dpavlin@mlin:~$ sudo rsync -ravH --numeric-ids --sparse --delete --exclude 'backup*' \
  10.60.0.90:/opl/clone/koha-2010-01-06/ /virtual.clone/koha-2010-01-06/

real    24m48.767s
user    5m0.027s
sys     2m3.656s
.pre

Kopiranje postojeฤ‡e virtualne maลกine prije rsync-a da bi se smanjilo broj promjena koje treba prenjeti rsync-om:

.pre
dpavlin@mlin:/virtual.clone/koha.ffzg.hr$ time sudo cp -ar * ../koha-2010-01-06/

real    14m59.742s
user    0m0.932s
sys     0m38.278s
.pre

^ Virtualna maลกina

Nakon restora sa zfs-a treba napraviti sljedeฤ‡a podeลกavanja:

^^ Pokrenuti screen u kojem ฤ‡e biti virtualna maลกina

.pre
dpavlin@mlin:~$ screen -S koha-upgrade
.pre

^^ Filesystem

.pre
lvcreate -s /dev/vg/koha -L 80G -n koha-upgrade

root@mlin:~# mount /dev/vg/koha-upgrade /virtual.clone/koha-upgrade/
root@mlin:~# df /virtual.clone/koha-upgrade/
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg-koha--upgrade
                      82569904  56551456  26018448  69% /virtual.clone/koha-upgrade
.pre

^^ Start LXC

.pre
root@mlin:~# cd /srv/sysadmin-cookbook/recepies/lxc/
root@mlin:/srv/sysadmin-cookbook/recepies/lxc# ./ve2lxc.sh /virtual.clone/koha-upgrade/ 10.60.0.253 koha-upgrade
.pre

^^ Setup inside LXC

* ugasiti monit `apt-get remove monit`
* -provjeriti IP adrese u `/etc/apache2/sites-enabled/`-

^ BTRFS

.pre
root@opl:~# zfs clone opl/backup/212226@2010-03-06 opl/clone/koha-2010-03-06
.pre

.pre
root@prod:/virtual# time rsync -rav --exclude 'backup/*' --delete 10.60.0.90::clone/koha-2010-03-06/ /virtual/koha/
receiving incremental file list
...

sent 3297036 bytes  received 4392640729 bytes  6527004.85 bytes/sec
total size is 23473104677  speedup is 5.34

real    11m13.873s
user    1m15.985s
sys     0m39.890s

root@prod:/virtual# btrfsctl -s /virtual/koha@2010-03-06 /virtual/koha
operation complete
Btrfs Btrfs v0.19

root@prod:/virtual# btrfsctl -s /virtual/koha-242 /virtual/koha
operation complete
Btrfs Btrfs v0.19

dpavlin@prod:~$ sudo bash ve2lxc.sh /virtual/koha-242 10.60.0.242 koha-242

.pre
Datum isteka ฤlanstva za studente sada je usklaฤ‘en je s podacima iz LDAP-a (to je baza u kojoj se ฤuvaju AAI korisniฤki raฤuni), tako da ne treba viลกe studentima pruduลพivati ฤlanstvo ruฤno. Ako sad u Kohi piลกe da im je isteklo ฤlanstvo, to znaฤi da im je istekao AAI korisniฤki raฤun. Svim studentima za koje postoji podatak iz referade da su upisani na studij, taj datum je automatski unesen. Narvno uvijek sluฤajeva za koje to nije bilo moguฤ‡e uฤiniti automatski (najฤeลกฤ‡e stariji studenti). Takve studente treba zamoliti da odu produลพiti AAI raฤun Draganu Doลกenu (ponedjeljkom i srijedom od 12 do 14 sati) koji ฤ‡e im to ฤlanstvo produลพiti ako imaju na to pravo. 
Kad se novi korisnik upiลกe u bazu, taj datum mu se odmah uฤita iz LDAP-a (nije viลกe godina dana od uฤlanjenja, veฤ‡ datum kad im istiฤu studentska prava).

Uvidom u bazu korisnika otkrivena je velika koliฤina korisnika koji su upisani bez AAI korisniฤkog raฤuna. To stvara probleme na raznim razinama, pa bi trebalo sto vise reducirati upisivanje korisnika bez AAI i ฤiniti to u stvarno iznimnim sluฤajevima.

*Pitanja i odgovori:*

*P:* Veฤ‡ smo imali nekoliko korisnika kojima smo ruฤno produljili ฤlanstvo. Zanima me da li je to nemogu uฤniti ako nemaju prava ili produljen AAI raฤun. Jer ako je moguฤ‡e onda smo malo zeznuli stvar.
ili
Ako sam SLUฤŒAJNO stisla renewal; i produลพila starom korisniku ฤlanstvo (korisnik ima prava do 9.mj. 2010.), ฤlanstvo se produลพilo do 04.03.2011... mogu li i trebam li je slati u informatiฤku?

*O:* Ne, sve je u redu. U sljedeฤ‡em obnavljanju podataka koje ฤ‡emo raditi periodiฤki, stvar ฤ‡e se sama uskladiti sa stanjem u LDAP bazi.
{toc: }

^ Opac

Poboljลกan *prikaz podataka* u OPAC-u, na stranici s rezultatima i na stranici s detaljnim opisom:

* Dodan prikaz svih lokacija i signatura na stranicu s rezultatima pretraลพivanja.
* Postojanje polja 856u na stranici s rezultatima viลกe ne uzrokuje nestajanje podataka o fiziฤkoj dostupnosti.
* Sakriven podatak o izgubljenim primjercima na stranici s rezultatima.
* Dodano polje 245c (odgovornost) - prije nije bilo jasno tko je autor, prevodioc, urednik i dr.
* Dodano mjesto izdavanja. Ureฤ‘en prikaz podataka za sluฤajeve s viลกe mjesta izdavanja i viลกe izdavaฤa.

Doลกlo s novom verzijom:

* (djelomiฤno) popravljen prikaz lokacije i signature na stranici s rezultatima
* lost items na stranici s rezultatima ne prikazati (niti na detaljnoj stranici, ali tamo je radilo i prije)
* search history
* pretraลพivanje po jeziku (ne radi!)
* more searches - sada se to radi preko admin suฤelja, ne viลกe kroz template
* slanje e-maila iz carta omoguฤ‡eno je samo logiranim korisnicima

*Treba joลก:*

* urediti kriterije za sortiranje rezultata
* refine search - dodati lokaciju ili struฤnu oznaku iz signature (razmisliti kako dobiti taj podatak, raspraviti)
* pretraลพivanje po jeziku
* prikaz nakladniฤke cjeline kad je u polju 490
* more searches - dodati relevantne izvore
* _OpacNav_ - dodatna navigacija s korisnim linkovima - gdje to staviti (lijevo, desno) i kako formatirati?
* urediti i prevesti poruke koje se primaju iz popisa i odabranih naslova - treba li joลก koji podatak, npr. broj iskaznice dodati u mail koji se dobije iz Carta
* kada si na skraฤ‡enom zapisu, kao drugu opciju zapisa vidis samo Potpuni zapis (MARC), a kada si na Potpunom zapisu onda imas i Expanded MARC View i ISBD View
* u normalnom prikazu, na kraju svake skupine se vidi tocka (iza razmaka) - bilo bi dobro da se tocka vidi samo iza godine

*Raspraviti:*

U normalnom prikazu (tj. skracenom zapisu) i u eng. verziji trenutno pise "predmetnice" za subjects, a malo su problematicni i autori (additional authors), a i 'serija' je upitna.

U rezultatima pretrazivanja ISBN se ne vidi. Vidi se u detaljnom prikazu. Treba li se vidjeti i na rezultatima?

moze li se u opacu sakriti samo jedan od itema, onako kako se moze sakriti zapis...radi se o itemima koji su kod nas u kancelarijama i koji nikad nece ici u fond iako su u bazi, tipa Verona, UDK itd...
(moลพda to nekako drukฤije oznaฤiti, povezano s problemom obrade knjiga koje se nabavljaju iz projekata)

LibraryName ?

^ Intranet

^^ Cirkulacija

Cirkulacija nije testirana za sve sluฤajeve pa se desilo da je Koha poฤela *onemoguฤ‡avati posudbu* onim korisnicima koji su prekoraฤili rok za vraฤanje.
To je dobra opcija, ali je nezgodno ispalo ลกto to nismo najavili.

*Treba:*

Sloลพiti tako da se korisniku progleda kroz prste dan ili dva, a ne ovako kako je sada da im ne omoguฤ‡ava posuditi novo ฤak i ako im danas istiฤe rok posudbe.

*Bugs:*

* selfcheck na papiriฤ‡u koji izbaci pod "dokumente vratiti do" ne piลกe datum nego neki broj ili kod...

*Raspraviti:*

_Location processing_
permanent_location - sysprefs <http://koha.org/documentation/manual/3.2/circulation/in-processing-book-cart-locations>.
Da li nam treba PROC i CART?

^^ Katalog - prikaz podataka i pretraลพivanje

*NORMAL prikaz* sada izgleda kao ISBD! Na mjestu napomene je samo podatak iz 500a (za ocjenske radove joลก i 567a, a treba dodati i 502a). Sve napomene (polja 50X) trebale bi se nalaziti se pod _Descriptions_ tabom.

*Prikaz ISBD maknut* je iz menija zato ลกto prikaz Normal sada ima ISBD fromat. Taj prikaz imao je puno nedostataka, a meฤ‘u najvaลพniji su prikaz podataka o izdavanju, URL-a i problemi s intepunkcijama.

Dodani su *linkovi na povezani zapis* - od skupnog prema primjercima (Look for related records) i od primjeraka prema skupnom (Collection). Treba popraviti tako da pretraลพuje samo preko polja 035a, a ne preko kljuฤnih rijeฤi. Link bi se trebalo pokazivati samo na onim zapisima koji u leaderu imaju oznaku za related record.

*Inventarni broj se sada prikazuje u tablici s primjercima* na obje stranice rezultata (results i detail).

Dodana je moguฤ‡nost *pretraลพivanja po zbirci* preko suฤelja za napredno preraลพivanje.

Napravljen novi *firefox plugin* za pretraลพivanje kataloga prema 
inventarnom broju

*Treba joลก:*

* vratiti inv. broj na stranicu s rezultatima
* Koje napomene prikazati u ISBD-u, a koje ispod taba "Descriptions"
** napomena o transliteraciji
* edukacija o pretraลพivanju uz pomoฤ‡ ccl sintakse
* LCCN (tj. 035$a) maknuti iz prikaza podataka u Z39.50 klijentu, koลกari i popisima
* popraviti pretraลพivanje po jeziku
* sloลพiti zebru tako da pogaฤ‘a rijeฤi u pretraลพivanju za sva polja osim signature (koje joลก polje ne treba pogaฤ‘anje rijeฤi?)
* maknuti authority nomber iz prikaza podataka u detaljnom prikazu
* popraviti gresku koja se javlja nakon brisanja zapisa (vidi: [Zebra indexing])
* u rezultatima pretraลพivanja pokazati ISBN i ISSN

*Upstream:*

* Keywords to MARC mapping - prikaz podataka u intranet normal view

^^ Obrada

Moguฤ‡nost *micanja primjeraka* s jednog na - tehniฤki radi, praktiฤno treba definirati postupak - koji zapis ostaje koji se briลกe, tko smije brisati zapis, na ลกta sve treba paziti. (vidi: [Premjeลกtanje primjeraka s jednog na drugi bibliografski zapis])

No, imamo i moguฤ‡nost *spajanje zapisa* preko jako dobrog suฤelja (moramo ga istestirati prije nego krenemo za pravo raditi).

ล to ฤ‡e nam micanje primjeraka ako imamo spajanje zapisa? Moลพda dobro doฤ‘e ako podjelimo uloge ลกta ko radi. Moลพda pomoฤ‡ni mogu micati primjerke kad ih uoฤe, a predmetni kasnije spajaju bib zapise.... ne znam, nekako, treba vidjeti ลกta je praktiฤno a opet s druge strane da se ne dese greลกke.

*Plugin za 008* - link na "MARC Code List ....)"<http://www.loc.gov/marc/languages/language_code.html> sada se otvara
 u novom prozoru.

Doลกlo s novom verzijom:

* moguฤ‡nost dodavanja viลกe primjeraka odjednom
* moguฤ‡nost micanja primjeraka s jednog na drugi bib zapis
* granularne ovlasti za katalogizaciju

*Treba joลก:*

* Instalirati dodatak za generiranje signatura u zatvorenom spremiลกtu - {link: koha-cug [Pisanje Koha plugina] }
* Barcode - window title: kad je naslov predugaฤak onda se barcode ne vidi, pa se ne moลพe ฤipirati
* nestao minusiฤ‡ kod inventarnog broja i kod 035 plus dosta toga na nuli
* provjeriti plugine za leader i 008

*Raspraviti:*

Kad se dodaje novi zapis, nakon klika na Save otvara se suฤelje "Add Item", a ako se zapis editira, onda se otvara normal (koji izgleda kao ISBD).
Kako bi se to trebalo ponaลกati?

----

Postojao je bug u OPAC-u kod brisanja zapisa, no taj bug se moลพe jednostavno zaobiฤ‡i. Naime, kad pobriลกemo zapis, u OPAC-u se na neko vrijeme potrga pretraลพivanje po rijeฤima koje daju u rezultatima taj zapis. Ako je rezultat za taj zapis na prvoj stranici, onda se ne dobiju nikakvi rezultati nego priliฤno loลกa greลกka. Ako je rezultat za taj zapis na drugoj stranici onda se strga na toj stranici. Greลกka se deลกava zbog toga ลกto Zebra (program za indeksiranje zapisa) nije joลก stigla obnoviti zapis, a suฤelje za pretraลพivanje ga ne zna preskoฤiti. Bug smo uspjeli zaobiฤ‡i, sada OPAC radi bez greลกke, ali to treba pooraviti kako spada. Da nismo zaobiลกli ovaj bug, greลกka bi se se mogla izbjeฤi tako da zapis najprije oznaฤimo oznakom "Sakrij u 
OPAC-u" u polju 942, a tek onda ga obriลกemo.

^^ Novosti na naslovnici

Treba dati svim knjiลพniฤarima ovlasti da piลกu obavijesti koje se vide na poฤetnoj stranici u intranetu.

^ Prijevodi

Dio oznaka na engleskom suฤelju je napisano na hrvatskom. To treba popraviti, al nije jednostavno.

Doลกlo s novom verzijom:

* novi wrapper za instalaciju prijevoda - ne radi :)

^ Instalacija

.pre
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Graphics::Magick not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite IPC::Cmd 0.46 not found. We have 0.401.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Lingua::Stem::Snowball 0.952 not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Memoize::Memcached 0.03 not found.
[Tue Feb 16 15:29:31 2010] Makefile.PL: Warning: prerequisite Number::Format 1.52 not found.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite PDF::API2::Simple 1 not found.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite PDF::Table not found.[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Storable 2.21 not found. We have 2.18.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Test::More 0.8 not found. We have 0.72.
[Tue Feb 16 15:29:32 2010] Makefile.PL: Warning: prerequisite Text::CSV::Encoded 0.09 not found.

.pre

* [SIP2]
* [LDAP]

^ Admin

iskljuฤiti Amazon, ukljuฤiti Google
Enhanced content: Amazon AWS private key (naknadno, treba li nam uopฤ‡e?)

*Upstream:*

* lijepo novo suฤelje za sysprefs
* nove sysprefs opcije

^ Migracija items.itemnotes u items.copynumber

* backup items.itemnotes
* itemnotes je mediumtext, copynumber je varchar(32) - treba ispraviti zapise u itemnotes duลพe od 32 znaka
* premapirati items.itemnotes
* pokrenuti skriptu `./misc/maintenance/sync_items_in_marc_bib.pl` ( _Replaces the item data embedded in the MARC bib records (for indexing) with the authoritative item data as stored in the items table. If Zebra is used, run rebuild_zebra.pl -b -r after running this script. _ )

.pre
mysql> update items set copynumber = itemnotes ;
Query OK, 316711 rows affected, 11 warnings (59.70 sec)
Rows matched: 317021  Changed: 316711  Warnings: 11

mysql> SHOW WARNINGS ;
+---------+------+------------------------------------------------------+
| Level   | Code | Message                                              | bib       item
+---------+------+------------------------------------------------------+
| Warning | 1265 | Data truncated for column 'copynumber' at row 10021  | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 12687  | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 133128 | 
| Note    | 1265 | Data truncated for column 'copynumber' at row 148603 | 118292    149220    lin13531
| Warning | 1265 | Data truncated for column 'copynumber' at row 234903 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 240681 | 
| Note    | 1265 | Data truncated for column 'copynumber' at row 252496 | 203477    253517    etn6059
| Note    | 1265 | Data truncated for column 'copynumber' at row 267457 | 216220    268698    psiF-54
| Warning | 1265 | Data truncated for column 'copynumber' at row 272653 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 277954 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 282443 | 
+---------+------+------------------------------------------------------+
11 rows in set (0.00 sec)

mysql> select biblionumber, itemnumber, itemnotes , copynumber from items where itemnotes != copynumber ;
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| biblionumber | itemnumber | itemnotes                                                                        | copynumber                        |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
|         7468 |      10092 | slf56588 (nisu otisnute sve str.)                                                | slf56588 (nisu otisnute sve str.  | 
|         8899 |      12778 | slf67394 (bibliofilski primjerak)                                                | slf67394 (bibliofilski primjerak  | 
|       104612 |     133701 | filDodatni pod. o odgovornosti: Gottfried Gabriel                                | filDodatni pod. o odgovornosti:   | 
|       189568 |     235908 | rom13568,13569,13569/f-a,13569/f-b,13569/f-c,13569/f-d,13569/f-e,13569/f-f,13570 | rom13568,13569,13569/f-a,13569/f  | 
|       192861 |     241688 | rom1792/2,1792/4,1792/5,1792f/f,1792f/h,26379E                                   | rom1792/2,1792/4,1792/5,1792f/f,  | 
|       220139 |     273925 | pum66/1996 (u RS, nedostaju str. s tablama: 208-215 )                            | pum66/1996 (u RS, nedostaju str.  | 
|       224967 |     279247 | pumล AR/1987a(neuvezani primjerak)                                                | pumล AR/1987a(neuvezani primjerak | 
|       227773 |     283828 | ang1000/AMS do 1084/AMS (84 copies)                                              | ang1000/AMS do 1084/AMS (84 copi  | 
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
8 rows in set (0.95 sec)

mysql> update items set itemnotes = null ;
Query OK, 316711 rows affected (43.04 sec)
Rows matched: 317021  Changed: 316711  Warnings: 0

.pre

^ Koha to MARC mapping

|  | upgrade | sada u produkciji | demo | default framework | irb |
| biblio.frameworkcode | 942b | 942b |  | nema polja |  |
| biblio.notes |  | 653a | 500a | 500a | 500a |
| biblio.copyrightdate |  | niลกta | 260c | 260c | 260c* |
| biblio.abstract | 080a | 080a | 520a | 520a | 520a |
| biblioitems.volume | 245p | 245n | 440v | 440v | 440v |
| biblioitems.number | 245n | 942d | 440n | 440n | 440n |
| biblioitems.publicationyear | 260c | 260c | niลกta | niลกta | 260c* |
| biblioitems.volumedesc | 362a | 245p | 362a | 362a | 362a |
| biblioitems.collectiontitle | 773t | 773t | niลกta | niลกta | niลกta |
| biblioitems.collectionissn | 773z | niลกta | niลกta | niลกta | niลกta |
| biblioitems.collectionvolume | 773g | 773g | niลกta | niลกta | niลกta |
| biblioitems.editionstatement | 250a | 250a | niลกta | niลกta | niลกta |
| biblioitems.lccn | 035a | 035a | 010a | 010a | 010a |
| items.itemnotes | 952z | 952i** | 952z | 952z | 952z |
| items.copynumber | 952t | niลกta | 952t | 952t | 952t |

*mapirano dva puta

**polje dodano u framework (nema ga default framework)

^^ Rebuild biblio tables

.pre
mglavica@koha-2010-02-15:/usr/share/koha/bin$ ./batchRebuildBiblioTables.pl -c

..................................................225350 in 37818.0600130558 s
...Can't call method "field" on an undefined value at ./batchRebuildBiblioTables.pl line 64.
.pre

editirati zapis 225354 i pokuลกati ponovo

^^ Sync items in marc bib

.pre
mglavica@koha-2010-02-15:/usr/share/koha/bin/manintenance/sync_items_in_marc_bib.pl --run-update

Could not retrieve bib 225771 from the database - record is corrupt.
Could not retrieve bib 225773 from the database - record is corrupt.
Could not retrieve bib 225774 from the database - record is corrupt.
Could not retrieve bib 229768 from the database - record is corrupt.
Could not retrieve bib 229811 from the database - record is corrupt.
Could not retrieve bib 231170 from the database - record is corrupt.
Could not retrieve bib 236269 from the database - record is corrupt.
Could not retrieve bib 231170 from the database - record is corrupt.
Could not retrieve bib 241167 from the database - record is corrupt.
Could not retrieve bib 241457 from the database - record is corrupt.
Could not retrieve bib 242341 from the database - record is corrupt.
Could not retrieve bib 245586 from the database - record is corrupt.


Embedded item synchronization report
------------------------------------
Number of bibs checked:                   246606
Number of bibs modified:                  232417
Number of item fields removed from bibs:  317032
Number of item fields added to bibs:      317030
Number of bibs with errors:               11
.pre

.pre
mysql> select title, biblioitems.biblionumber, biblioitems.biblioitemnumber, marc, marcxml from biblioitems joiitems.biblionumber where marcxml = '' ;
+--------------------------------------------------+--------------+------------------+------+---------+
| title                                            | biblionumber | biblioitemnumber | marc | marcxml |
+--------------------------------------------------+--------------+------------------+------+---------+
| Priruฤni anatomski atlas :                       |       225771 |           225771 | NULL |         |
| Priruฤni anatomski atlas :                       |       225773 |           225773 | NULL |         |
| Priruฤni anatomski atlas :                       |       225774 |           225774 | NULL |         |
| Zlatan ฤovek                                     |       229768 |           229768 | NULL |         |
| Tko govori, tko piลกe :                           |       229811 |           229811 | NULL |         |
| Stupnjevi organskog i ฤovjek :                   |       231170 |           231170 | NULL |         |
| Ispravci i dopune starijoj hrvatskoj historiji / |       236269 |           236269 | NULL |         |
| Deutsch :                                        |       241167 |           241167 | NULL |         |
| Tradition och fรถrnyelse inom sprรฅket :           |       241457 |           241457 | NULL |         |
| Geneza ustaลกkog pokreta :                        |       242341 |           242340 | NULL |         |
| Social emergence :                               |       245586 |           245585 | NULL |         |
+--------------------------------------------------+--------------+------------------+------+---------+
11 rows in set (3 min 48.40 sec)
.pre

pobrisati te zapise.

{file: bib-bez-marc.xls}

.pre
mysql> delete from biblio where biblionumber = 225771 or biblionumber = 225773 or biblionumber = 225774 or biblionumber = 229768 or biblionumber = 229811 or biblionumber = 231170 or biblionumber = 236269 or biblionumber = 241167 or biblionumber = 241457 or biblionumber = 242341 or biblionumber = 245586 ;
Query OK, 11 rows affected (0.68 sec)
.pre

drugi pokuลกaj rebuild biblio tables zapne ovako

.pre
..................................................241600 in 4839.90223407745 s
..................................................241650 in 4843.83456802368 s
.................Can't call method "field" on an undefined value at ./batchRebuildBiblioTables.pl line 64.


mysql> select * from biblioitems where biblionumber = 242219 ;
Empty set (0.00 sec)

.pre

i taj zapis treba pobrisati

.pre
mysql> delete from biblio where biblionumber = 242219 ;
Query OK, 1 row affected (0.31 sec)
.pre

^ Izvjeลกtaji

* signature

* biblioitems.publisherdate -> biblio.copyrightdate

^ Patrons

`EnhancedMessagingPreferences`

Upstream:

* popravljen encoding u slanju e-maila preko opac user update

^ Serials

promjenjeno, testitari

Admin - Cataloging preferences - Record Structure - Routing Serials:
*Add* extra information to items automatically added to serials.

*Upstream:*

* popravljeno dodavanje primjeraka
* doraฤ‘ene reklamacije

^ Nabava

Ovlasti za knjiลพniฤare

definirati uloge za nabavu i sukladno tome podesiti ovlasti

*Upstream*

* novi modul - granular permissions, hijerarhije budลพeta, planiranje
* opcije za stvaranje primjeraka - prilikom nabave, u prijemu, u katalogizaciji

^ Procedura za produkciju

* prije instalacije pobrisane sessions i zebraqueue tablice

* pobrisani bibliografski zapisi bez biblio.marc polja (saฤuvati pobrisane zapise)

.pre
mysql> select title, biblioitems.biblionumber, biblioitems.biblioitemnumber, marc, marcxml from biblioitems join biblio on biblio.biblionumber=biblioitems.biblionumber where marc is null ;
+--------------------------------------------------+--------------+------------------+------+---------+
| title                                            | biblionumber | biblioitemnumber | marc | marcxml |
+--------------------------------------------------+--------------+------------------+------+---------+
| Priruฤni anatomski atlas :                       |       225771 |           225771 | NULL |         | 
| Priruฤni anatomski atlas :                       |       225773 |           225773 | NULL |         | 
| Priruฤni anatomski atlas :                       |       225774 |           225774 | NULL |         | 
| Zlatan ฤovek                                     |       229768 |           229768 | NULL |         | 
| Tko govori, tko piลกe :                           |       229811 |           229811 | NULL |         | 
| Stupnjevi organskog i ฤovjek :                   |       231170 |           231170 | NULL |         | 
| Ispravci i dopune starijoj hrvatskoj historiji / |       236269 |           236269 | NULL |         | 
| Deutsch :                                        |       241167 |           241167 | NULL |         | 
| Tradition och fรถrnyelse inom sprรฅket :           |       241457 |           241457 | NULL |         | 
| Geneza ustaลกkog pokreta :                        |       242341 |           242340 | NULL |         | 
| Social emergence :                               |       245586 |           245585 | NULL |         | 
+--------------------------------------------------+--------------+------------------+------+---------+
11 rows in set (34.63 sec)

mysql> delete from biblio where biblionumber = 225771 or biblionumber = 225773 or biblionumber = 225774 or biblionumber = 229768 or biblionumber = 229811 or biblionumber = 231170 or biblionumber = 236269 or biblionumber = 241167 or biblionumber = 241457 or biblionumber = 242341 or biblionumber = 245586 ;
Query OK, 11 rows affected (0.10 sec) ;
.pre

{file: bib-bez-marc.xls}

* pobrisan biblio zapis bez podataka u biblioitems tablici

.pre
delete from biblio where biblionumber = 242219 ;
Query OK, 1 row affected (0.00 sec)
.pre

{file: biblio-bez-biblioitems.xls}

.pre
mysql> select count(*) from biblio ;
+----------+
| count(*) |
+----------+
|   246779 |
+----------+
1 row in set (0.20 sec)

mysql> select count(*) from biblioitems ;
+----------+
| count(*) |
+----------+
|   246779 |
+----------+
1 row in set (11.73 sec)

mysql> select count(*) from items ;
+----------+
| count(*) |
+----------+
|   317896 |
+----------+
1 row in set (0.50 sec)

mysql> select count(*) from items where itemnotes is null ;
+----------+
| count(*) |
+----------+
|      322 |
+----------+
1 row in set (1.00 sec)
.pre

* preseliti itemnotes u copynumber

.pre
mysql> update items set copynumber = itemnotes ;
Query OK, 317574 rows affected, 8 warnings (57.21 sec)
Rows matched: 317896  Changed: 317574  Warnings: 8

mysql> show warnings ;
+---------+------+------------------------------------------------------+
| Level   | Code | Message                                              |
+---------+------+------------------------------------------------------+
| Warning | 1265 | Data truncated for column 'copynumber' at row 10021  | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 12687  | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 133126 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 234900 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 240678 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 272650 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 277951 | 
| Warning | 1265 | Data truncated for column 'copynumber' at row 282440 | 
+---------+------+------------------------------------------------------+
8 rows in set (0.00 sec)

mysql> select biblionumber, itemnumber, itemnotes , copynumber from items where itemnotes != copynumber ;
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
| biblionumber | itemnumber | itemnotes                                                                        | copynumber                        |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
|         7468 |      10092 | slf56588 (nisu otisnute sve str.)                                                | slf56588 (nisu otisnute sve str.  |
|         8899 |      12778 | slf67394 (bibliofilski primjerak)                                                | slf67394 (bibliofilski primjerak  |
|       104612 |     133701 | filDodatni pod. o odgovornosti: Gottfried Gabriel                                | filDodatni pod. o odgovornosti:   |
|       189568 |     235908 | rom13568,13569,13569/f-a,13569/f-b,13569/f-c,13569/f-d,13569/f-e,13569/f-f,13570 | rom13568,13569,13569/f-a,13569/f  |
|       192861 |     241688 | rom1792/2,1792/4,1792/5,1792f/f,1792f/h,26379E                                   | rom1792/2,1792/4,1792/5,1792f/f,  |
|       220139 |     273925 | pum66/1996 (u RS, nedostaju str. s tablama: 208-215 )                            | pum66/1996 (u RS, nedostaju str.  |
|       224967 |     279247 | pumล AR/1987a(neuvezani primjerak)                                                | pumล AR/1987a(neuvezani primjerak  |
|       227773 |     283828 | ang1000/AMS do 1084/AMS (84 copies)                                              | ang1000/AMS do 1084/AMS (84 copi  |
+--------------+------------+----------------------------------------------------------------------------------+-----------------------------------+
8 rows in set (1.20 sec)

mysql> update items set itemnotes = 0 ;
Query OK, 317896 rows affected (28.21 sec)
Rows matched: 317896  Changed: 317896  Warnings: 0

.pre

* Koha to MARC mapping - premapirana polja
* pokrenut rebuildBiblioTables
* Keywords to MARC mapping - definirane keywords
* sysadmin - staff - intranetstylesheet
* sysadmin - opac - stylesheet
* popravljeni frameworks - 952i 952z 952r
* pokrenut syncitems

.pre
Embedded item synchronization report
------------------------------------
Number of bibs checked:                   246779
Number of bibs modified:                  232631
Number of item fields removed from bibs:  317898
Number of item fields added to bibs:      317896
Number of bibs with errors:               0
.pre

* pokrenuti rebuild zebra

.pre
...
06:35:43-21/02 zebraidx(1905) [log] Records: 246779 i/u/d 246510/269/0
...
NOTHING cleaned : the export /tmp/KXMJFxLzlj has been kept.
...
.pre

* prijevodi

* testirano slanje maila iz cart i liste
* testirano update user record (popravljen encoding!)

* preseliti (kako?) more_subfields_xml u itemnotes
* maknuti sliฤice s mjeseca
* testirati nove template - ne radi select all

----

Mozda sam negdje preskocila u tekstu - ali ne radi bas pretrazivanje preko kohe - npr. ako utipkam u onaj mali prozorcic gore ped15322 ne izbaci mi nista jer ulovi jos neke oznake prije. isto se dogodilo i kad sam isla preko search s naslovom knjige.

_contributed by {user: vnovosel@ffzg.hr} on {date: 2010-02-22 11:13:56 GMT}_
Na testnoj instalaciji Kohe - https://koha-upgrade.vbz.ffzg.hr:8443/ moลพe se probati spajanje zapisa. Detaljnije ฤ‡emo o tome razgovarati u ฤetvrtak, 04.03.2010. kad se vidimo, a ako neko ลพeli prije toga istraลพivati sam, evo kratkih uputa:

1. Identificirati zapise koje treba spojiti i odabrati jedan najpotpuniji, zapisati njegov biblionumber
2. Dodati zapise na listu, prema uputama na stranici [upute] u poglavlju Baratanje popisima. Popis neka bude javan (public) - na taj naฤin ฤ‡e svi knjiลพniฤari moฤ‡i vidjeti da je taj zapis veฤ‡ u proceduri i to ฤ‡e sprijeฤiti situaciju da dvije osobe rade na spajanju istog naslova. Popis treba nazvati nekako prema sebi (staviti svoje ime, inicijale, ลกta god.. dogovorit ฤ‡emo se u ฤetvrtak)
3. Otiฤ‡i na taj popis - tu ฤ‡ete uoฤiti opciju "Merge selected items" - odabrati dva zapisa s liste i kliknuti na taj gumbiฤ‡
4. isprobavati ลกta se deลกava

Bilo bi jako dobro da probate, tako da se ลกto bolje pripremimo za ฤetvrtak.
Popravljeni su problemi s upisom korisnika. Od sada znaฤi upisujemo po starom - prvo se ฤovjek logira u OPAC, a onda ga mi naฤ‘emo preko intraneta, provjerimo "povuฤene" podatke i nadopunimo ลกta fali. Identifikacijski brojevi opet po starom idu u posebna polja. Primijetit ฤ‡ete da se meฤ‘u tim identifikacijskim brojevima pojavio i jedan novi, zove se RFID_SID. To ne dirate, podatak se u to polje upisuje automatski, a sluลพi sustavu kopiranja.
Popravljen je Firefox dodatak za pretraลพivanje Kohe prema inv. broju. Novu verziju moลพete instalirati sa stranice <http://mjesec.ffzg.hr/koha/firefox/>. Najprprije obavezno treba maknuti staru verziju, ovako:
klik na strelicu - manage search engines - klikk na Koha ID - remove - OK
^^ Komponente sustava

Shema prikazuje komponente softverskog sustava u "Knjiลพnici Filozofskog fakulteta u Zagrebu"<http://knjiznica.ffzg.hr/>.

{image: sustav.png}

^^ Virtual LDAP

Za prijenos podataka o korisnicima meฤ‘u sustavima koristi se [LDAP].

{image: virtual_ldap.png}
http://contribs.koha.org/extensions.php?category=9

created by Kyle Hall, http://www.kylehall.info
Na stranici [Upgrade drugi] nalaze se biljeลกke o nadogradnji sustava uฤinjenoj 20.02.2010. Molimo sve knjiลพniฤare da prate sadrลพaj u prva tri poglavlja (OPAC, Intranet i Prijevodi) i da jave sve ลกto tamo ne piลกe, a trebalo bi. Slobodno javite mailom i one stvari koje veฤ‡ piลกu, tako ฤ‡emo lakลกe odrediti prioritete.