xquery version "1.0"; (: $Id: admin.xql 14995 2011-07-30 19:57:47Z dizzzz $ :) (: Main module of the database administration interface. :) declare namespace admin = "http://exist-db.org/xquery/admin-interface"; declare namespace request = "http://exist-db.org/xquery/request"; declare namespace session = "http://exist-db.org/xquery/session"; declare namespace util = "http://exist-db.org/xquery/util"; declare namespace xdb = "http://exist-db.org/xquery/xmldb"; import module namespace status = "http://exist-db.org/xquery/admin-interface/status" at "status.xqm"; import module namespace browseprojects = "http://exist-db.org/xquery/admin-interface/browse-projects" at "browse-projects.xqm"; import module namespace rev = "http://exist-db.org/xquery/admin-interface/revisions" at "versions.xqm"; (: modules which might be used import module namespace backup="http://exist-db.org/xquery/admin-interface/backup" at "backup.xqm"; import module namespace grammar="http://exist-db.org/xquery/admin-interface/grammar" at "grammar.xqm";disp :) (: unused modules import module namespace browse = "http://exist-db.org/xquery/admin-interface/browse" at "browse.xqm"; import module namespace users = "http://exist-db.org/xquery/admin-interface/users" at "users.xqm"; import module namespace xqueries = "http://exist-db.org/xquery/admin-interface/xqueries" at "xqueries.xqm"; import module namespace shut = "http://exist-db.org/xquery/admin-interface/shutdown" at "shutdown.xqm"; import module namespace setup = "http://exist-db.org/xquery/admin-interface/setup" at "setup.xqm"; import module namespace prof="http://exist-db.org/xquery/profiling" at "trace.xqm"; import module namespace install="http://exist-db.org/xquery/install-tools" at "install.xqm"; import module namespace fundocs="http://exist-db.org/xquery/admin/fundocs" at "fundocs.xqm"; :) import module namespace correction="http://exist-db.org/xquery/rebind/correction" at "correction.xqm"; (:import module namespace metadata="http://exist-db.org/xquery/rebind/edit-metadata" at "edit-metadata.xqm";:) import module namespace metadata="http://exist-db.org/xquery/rebind/edit-metadata" at "xform-eml.xqm"; (: if a page needs custom html headers :) declare function admin:header() as element()* { let $panel := request:get-parameter("panel", "status")[1] return if ($panel eq "editMetadata") then ( metadata:header() ) else () }; (: Select the page to show. Every page is defined in its own module :) declare function admin:panel() as element() { let $panel := request:get-parameter("panel", "status")[1] (:let $isLoggedIn := admin:isLoggedIn() let $userParam := request:get-parameter("user", ()) let $passwdParam := request:get-parameter("pass", ()) let $login := xdb:login( "/db", $userParam, $passwdParam, true()):) return (:if(not($login)) then ( admin:display-login-form() ) else :) if($panel eq "browse") then ( browseprojects:main() ) else if ($panel eq "correction") then ( correction:main() ) else if ($panel eq "editMetadata") then ( metadata:main() ) else if ($panel eq "revisions") then ( rev:main() ) else ( if(xdb:is-admin-user(xdb:get-current-user())) then ( status:main() ) else (

Information for Contributing Scientists!

) ) }; declare function admin:panelfromeml() as element()* { let $action := request:get-parameter("action", ())[1] return if($action eq "save-form") then( let $fileName := request:get-parameter("name", "test.xml")[1] return (
File '{$fileName}' was successfully saved!
,metadata:main()) )else( metadata:main() ) }; (:~ Display the login form. :) declare function admin:display-login-form() as element() { reBiND - Project Data portal
{admin:display-login-margin()}
Welcome to the reBIND data portal. Here you can browse biodiversity datasets that have been published via the reBIND data standardisation and archiving workflow.

To submit a new dataset to the reBIND portal please login.

To read more about the reBIND project please visit the reBIND web-site.





}; declare function admin:display-login-margin() as element() {
Username :
Password:
{ for $param in request:get-parameter-names() return if ( $param = ("user","pass") ) then () else }
}; declare function admin:display-login-form-old() as element() {
Login

This is a protected resource. Only registered database users can log in.

{ for $param in request:get-parameter-names() return if ( $param = ("user","pass") ) then () else }
}; declare function admin:isLoggedIn() as xs:boolean{ let $userParam := request:get-parameter("user", ()) let $passwdParam := request:get-parameter("pass", ()) return if(xdb:get-current-user() eq "guest") then ( (: is this a login attempt? :) if($userParam and not(empty($passwdParam)))then ( if($userParam = ("", "guest") )then ( (: prevent the guest user from accessing the admin webapp :) false() ) else ( (: try and log the user in :) xdb:login( "/db", $userParam, $passwdParam, true() ) ) ) else ( (: prevent the guest user from accessing the admin webapp :) false() ) ) else ( (: if we are already logged in, are we logging out - i.e. set permissions back to guest :) if(request:get-parameter("logout",()))then ( let $null := xdb:login("/db", "guest", "guest") let $inval := session:invalidate() return false() ) else ( (: we are already logged in and we are not the guest user :) true() ) ) }; declare option exist:serialize "indent=yes method=xhtml media-type=text/html doctype-public=-//W3C//DTD XHTML 1.0 Strict//EN doctype-system=http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"; (: main entry point :) let $isLoggedIn := admin:isLoggedIn() return ( {rebind:getSetting('project-name')} Data Administration {admin:header()}
{ let $colName := request:get-parameter("collection", "/db")[1] return if($isLoggedIn) then (
{browseprojects:process-action($colName)}
) else () }
{ let $link := session:encode-url(request:get-uri()) let $protectedRoot := rebind:getSetting('db-protected-folder') return if($isLoggedIn)then ( browseprojects:show-project-menu() ) else () } { if($isLoggedIn)then ( admin:panel() ) else ( admin:display-login-form() ) }
)