diff --git a/locales/en-US/messages.lang.php b/locales/en-US/messages.lang.php deleted file mode 100644 index 0b3239f5..00000000 --- a/locales/en-US/messages.lang.php +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/locales/nl-NL/dac.rdf.po b/locales/nl-NL/dac.rdf.po new file mode 100644 index 00000000..a8dd7135 --- /dev/null +++ b/locales/nl-NL/dac.rdf.po @@ -0,0 +1,22 @@ +msgid "" +msgstr "" +"Project-Id-Version: TAO 3.3.0-sprint86\n" +"PO-Revision-Date: 2018-09-26T12:04:43\n" +"Last-Translator: TAO Translation Team \n" +"MIME-Version: 1.0\n" +"Language: nl-NL\n" +"sourceLanguage: en-US\n" +"targetLanguage: nl-NL\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +# http://www.tao.lu/Ontologies/TAO.rdf#DacAdministrator +msgctxt "http://www.w3.org/2000/01/rdf-schema#label" +msgid "Data Access Administrator" +msgstr "" + +# http://www.tao.lu/Ontologies/TAO.rdf#DacAdministrator +msgctxt "http://www.w3.org/2000/01/rdf-schema#comment" +msgid "Data Access Administrator role" +msgstr "" + diff --git a/locales/nl-NL/messages.po b/locales/nl-NL/messages.po new file mode 100644 index 00000000..17aebba8 --- /dev/null +++ b/locales/nl-NL/messages.po @@ -0,0 +1,75 @@ +msgid "" +msgstr "" +"Project-Id-Version: TAO 3.3.0-sprint86\n" +"PO-Revision-Date: 2018-09-26T12:04:43\n" +"Last-Translator: TAO Translation Team \n" +"MIME-Version: 1.0\n" +"Language: nl-NL\n" +"sourceLanguage: en-US\n" +"targetLanguage: nl-NL\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Basepath: ../../\n" +"X-Poedit-KeywordsList: __\n" +"X-Poedit-SearchPath-0: .\n" + +msgid "Access can not be revoked for the current user." +msgstr "" + +msgid "Access control" +msgstr "Toegangscontrole" + +msgid "Access Permissions for" +msgstr "Toegangspermissies voor" + +msgid "Actions" +msgstr "Acties" + +msgid "Add role(s)" +msgstr "Voeg rol(len) toe" + +msgid "Add user(s)" +msgstr "Voeg gebruiker(s) toe" + +msgid "grant" +msgstr "geven" + +msgid "Name" +msgstr "Naam" + +msgid "Permissions saved" +msgstr "Permissies opgeslagen" + +msgid "read" +msgstr "lezen" + +msgid "Recursive" +msgstr "Recursief" + +msgid "Remove" +msgstr "Verwijderen" + +msgid "role" +msgstr "rol" + +msgid "Roles" +msgstr "Rollen" + +msgid "Save" +msgstr "Opslaan" + +msgid "Type" +msgstr "Type" + +msgid "user" +msgstr "gebruiker" + +msgid "Users" +msgstr "Gebruikers" + +msgid "write" +msgstr "schrijven" + +msgid "You must have one role or user that have the manage permission on this element." +msgstr "U dient een rol of gebruiker te hebben met toestemming om dit element te beheren" + diff --git a/locales/nl-NL/messages_po.js b/locales/nl-NL/messages_po.js new file mode 100644 index 00000000..8370769d --- /dev/null +++ b/locales/nl-NL/messages_po.js @@ -0,0 +1 @@ +{" and ":" en "," has been deleted successfully":" is succesvol verwijderd"," has been installed":" is ge\u00efnstalleerd"," next":" volgende"," requires a subgrid adapter":"Heeft een subgrid adapter nodig","%1$s expected but %2$s detected":"%1$s verwacht maar %2$s gevonden","%d day":"%d dag","%d days":"%d dagen","%h hour":"%h uur","%h hours":"%h uren","%i minute":"%i minuut","%i minutes":"%i minuten","%m month":"%m maand","%m months":"%m maanden","%s (%s kb)":"%s (%s kb","%s Class saved":"%s van de klasse opgeslagen","%s could not be released":"\u0027%s kon niet worden vrijgegeven","%s extension(s) to install.":"%s van de te installeren extensie(s)","%s has been deleted":"%s is verwijderd","%s has been released":"%s is vrijgegeven","%s is of a type that cannot be published":"%s is van een type dat niet gepubliceerd kan worden","%s Locked":"%s Geblokkeerd","%s\u0022 is not a valid index identifier. It must start with a letter and contain letters, numbers or underscores only":"%s\u0022 is geen valide indexnaam. Het moet starten met een letter en mag alleen letters, getallen en lage streepjes bevatten","%y year":"%y jaar","%y years":"%y jaren","(empty)":"(leeg)","... reloading page.":"...pagina aan het herladen","Filters<\/del>":"Filters<\/del>","Options<\/del>":"Opties<\/del>","> Extension %s succesfully installed.":"> Extensie %s is succesvol ge\u00efnstalleerd.","> Installation done.":"> Installatie is gedaan.","A fatal error occured during the installation process.":"Er is een kritieke fout opgetreden tijdens de installatie.","A message with further instructions has been sent to your email address: %s":"Een bericht met verdere instructies is gestuurd naar uw e-mail adres: %s","Access control":"Toegangscontrole","Access Denied":"Toegang geweigerd","Access denied. Please renew your authentication!":"Toegang geweigerd. Gelieve uw verificatie opnieuw in te voeren!","Access Permissions for":"Toegangspermissies voor","Action":"Handeling","Actions":"Acties","Add":"Toevoegen","Add a CSV file":"Voeg een CSV bestand toe","Add a user":"Voeg een gebruiker toe","Add an RDF\/XML file":"Voeg een RDF\/XML bestand toe","Add Consumer":"Voeg eindgebruiker toe","Add file(s)":"Voeg bestand(en) toe","Add property":"Voeg eigenschap toe","Add role(s)":"Voeg rol(len) toe","Add user(s)":"Voeg gebruiker(s) toe","Advanced Mode":"Geavanceerde modus","all":"Alle","All data will be removed in %s":"Alle data wordt verwijderd in %s","All fields are required":"Alle velden zijn verplicht","All rights reserved.":"Alle rechten voorbehouden","Alpha version":"Alpha versie ","An email has been sent":"Er is een e-mail is verzonden","Are you sure to delete the versioned resource?\nThe history will be lost as well.":"Weet u zeker dat u de bron met deze versie wilt verwijderen?\nDe geschiedenis gaat dan ook verloren.","Are you sure you want to delete it?":"Weet u zeker dat u het wilt verwijderen?","Assessment Activity":"Examen activiteit","Assign User to role":"Wijs een gebruiker aan een rol toe","Assign Users":"Gebruikers toewijzen ","Author":"Auteur","Author Item":"Auteur Item","Authoring":"Construeren","Available":"Beschikbaar","Available Extensions":"Beschikbare Extensies","Back to listing":"Terug naar vermeldingen","Beta version":"B\u00e8ta-versie","Browse folders:":"Blader mappen door:","Browse...":"Bladeren\u2026","Calendar":"Kalender","Cancel":"Afbreken","cancel":"afbreken","cancel the action":"breek de actie af","Cannot be edited":"Kan niet worden gewijzigd","Change password":"Wachtwoord wijzigen","Change the password":"Wijzig het wachtwoord","Check all":"Alles selecteren","Check All":"Alles selecteren","Check-in":"Inchecken","Choose export format":"Kies export formaat:","Choose import format":"Kies import formaat:","class selected":"Geselecteerde klasse","Column":"Kolom","Combine a selection of items into tests.":"Combineer een selectie van items in toetsen","comment...":"Commentaar...","Commit":"Doorvoeren","Confirm":"Bevestigen","Connect to the TAO platform":"Verbind met het TAO platform","Continue":"Doorgaan","Create":"Aanmaken","Create instance of ":"Maak een instantie aan van ","CSV":"CSV","CSV Options":"CSV opties","Current language":"Huidige taal","Data imported":"Data ge\u00efmporteerd","Data imported successfully":"Data is succesvol ge\u00efmporteerd","Data imported. Some records are invalid.":"Data is ge\u00efmporteerd. Sommige records zijn ongeldig.","Data language":"Data taal","Data Language":"Data taal","Data not imported. All records are invalid.":"Data is niet ge\u00efmporteerd. Alle records zijn ongeldig.","Date":"Datum","Default search":"Standaard zoekopdracht","Define the default values":"Definieer de standaardwaarden","Delete":"Verwijderen","Deliveries":"Pakketten","Deliveries library":"Pakketten bank","Demo Sandbox":"Demo Sandbox","Disabled %s":"Uitgeschakeld %s","Do you wish to install the following extension(s):\n%s?":"Wilt u de volgende extensie(s) instaleren:\n%s?","does not match":"Komt niet overeen","Don\u0027t set":"Niet instellen","Download":"Download","Download this file":"Download dit bestand","Drag file here":"Sleep het bestand naar hier","Drag files here":"Sleep bestanden hierheen","Drop the files to upload":"Drop de bestanden voor upload","Duplicate":"Dupliceer","Edit":"Aanpassen","Edit a user":"Gebruiker aanpassen","Edit class %s":"Pas klasse %s aan","Edit Instance":"Pas instantie aan","Edit result server":"Bewerk resultaat server","Edit Tree":"Pas boom aan","Element":"Element","Element deleted.":"Element verwijderd","Email":"E-mail","Enter":"Enter","Error":"Fout","Error during file import":"Fout bij het importeren","Event Log":"Eventlog","Exclusive (OR)":"Exclusive (OR)","Export":"Exporteer","Export ":"Exporteren","Export Irregularities":"Onregelmatigheden bij export","Export Metadata as RDF\/XML file":"Exporteer metadata als RDF\/XML bestand","Export Table":"Export tabel","Extension ":"Extensie","Extensions manager":"Extensiebeheer","False":"Onwaar","Field delimiter":"Veldscheidingsteken","Field encloser":"Kader om veld","File":"Bestand","File name":"Bestandsnaam","File Properties":"Bestandseigenschappen","file selected":"geselecteerd bestand","File Uploader":"Bestandsuploader","files selected":"geselecteerde bestanden","Filter":"Filter","Filtering mode":"Filter modus","First Name":"Voornaam","First row column names":"Eerste rij bevat kolomnamen","Force Release":"Forceer het uitgeven","Forgot your password?":"Uw wachtwoord vergeten?","Fuzzy Matching":"Fuzzy matching","Go Back":"Ga terug","grant":"geven","Group test takers according to global features and classifications.":"Groepeer kandidaten conform globale kenmerken en classificaties.","Groups":"Groepen","Groups library":"Groepen bank","Height":"Hoogte","Help":"Hulp","Hi, %s
You indicated that you have forgotten your TAO password.":"Hallo, %s
U heeft aangegeven dat u uw TAO wachtwoord bent vergeten.","Hide detailed report":"Verberg het uitgebreide rapport","History":"Geschiedenis","hours":"uren","Identifier":"Naam","If you do not wish to reset your password, just ignore this email and your password will remain the same.":"Als u uw wachtwoord niet wilt resetten, negeer dan deze e-mail en uw wachtwoord zal ongewijzigd blijven.","Import":"Importeer","Import ":"Importeer","Import Metadata from CSV file":"Importeer Metadata vanuit een CSV bestand","Import Metadata from RDF file":"Importeer Metadata vanuit een RDF bestand","Inclusive (AND)":"Inclusief (AND)","Index":"Index","Indexing has been run":"Indexering heeft gedraaid","Install":"Installeren","Installation done.":"Installatie is gereed.","Installation...":"Installatie...","Installed Extensions":"Ge\u00efnstalleerde extensies","Installing extension %s...":"Ge\u00efnstalleerde extensie %s...","Instance saved":"Instantie is opgeslagen","Interface language":"Taal van de omgeving","Interface Language":"Taal van de omgeving","Invalid date range (must be after or the same as: %s)":"Onjuist datum bereik (moet liggen na of op: %s)","Invalid date range (must be after: %s)":"Onjuist datum bereik (moet liggen na: %s)","Invalid date range (must be before or the same as: %s)":"Onjuist datum bereik (moet liggen voor of op: %s)","Invalid date range (must be before: %s)":"Onjuist datum bereik (moet liggen voor: %s)","Invalid field length":"Onjuiste veldlengte","Invalid field range (maximum value: %s)":"Onjuiste veld waarde (maximum waarde: %s)","Invalid field range (minimum value: %1$s, maximum value: %2$s)":"Onjuiste veld waarde (minimum waarde: %1$s, maximum waarde: %2$s)","Invalid field range (minimum value: %s)":"Onjuiste veld waarde (minimum waarde: %s)","Invalid file size (minimum %1$s bytes, maximum %2$s bytes)":"Niet toegestane bestandsgrootte (minimum %1$s bytes, maximum %2$s bytes)","Invalid file type!":"Onjuiste bestandstype!","Invalid login or password. Please try again.":"Onjuiste login of wachtwoord. Probeer het opnieuw.","invalid regular expression":"Onjuiste reguliere expressie.","Items":"Items","Items library":"itembank","Label":"Label","Language":"Taal","Last Name":"Achternaam","less than a minute":"Minder dan een minuut","List":"Lijst","List - Multiple choice - Check box":"Lijst - Meerkeuze - Selectievakje","List - Single choice - Drop down":"Lijst - Enkele keuze - Keuzelijst","List - Single choice - Radio button":"Lijst - Enkele keuze - Radioknop","Lists":"Lijsten","Loaded":"Geladen","Loaded at Startup":"Bij het starten geladen","Loading":"Bezig met laden","Log in":"Aanmelden","Log Out":"Afmelden","Login":"Aanmelden","Login available":"Aanmelden beschikbaar","LTI":"LTI","LTI Consumers":"LTI eindgebruikers","Manage Access Rights":"Beheer toegangsrechten","Manage data list":"Beheer data lijst","Manage groups":"Groepen beheren","Manage items":"Beheer items","Manage Media":"Beheer media","Manage Result Servers":"Beheer resultaat servers","Manage Results":"Beheer resultaten","Manage roles":"Beheer rollen","Manage Roles and apply them to users.":"Beheer rollen en wijs ze aan gebruikers toe.","Manage test takers":"Beheer kandidaten","Manage tests":"Beheer toetsen","Manage users":"Gebruikers beheren","Manage Versioned File":"Beheer bestand met versie","Map the properties to the CSV columns":"Combineer de eigenschappen met de overeenkomende CSV kolommen","Media":"Media","Media Manager":"Media beheer","Media Manager extension":"Media beheer extensie","Message":"Bericht","Migrate":"Migreren","minutes":"minuten","More":"Meer","Move":"Verplaatsen","Move role":"Verplaats rol","Move to":"Verplaats naar","Moving this element will replace the properties of the previous class by those of the destination class :":"Het verplaatsen van dit element zal de eigenschappen van de vorige klasse overschrijven met die van de doel klasse :","Moving this element will replace the properties of the previous class by those of the destination class:":"Het verplaatsen van dit element zal de eigenschappen van de vorige klasse overschrijven met die van de doel klasse:","Multiple values delimiter":"Scheidingsteken tussen meerdere waarden","must be numeric":"moet numeriek zijn","My settings":"Mijn instellingen","My settings (%s)":"Mijn instellingen (%s)","Name":"Naam","New class":"Nieuw klasse","New delivery":"New pakket","New Group":"Nieuwe groep","New item":"Nieuw item","New password":"Nieuw wachtwoord","New result server":"Nieuwe resultaat server","New role":"Nieuwe rol","New test":"Nieuwe toets","New test-taker":"Nieuwe kandidaat","Next":"Volgende","No":"Nee","No action specified":"Geen handeling aangegeven","No extensions available.":"Geen extensies beschikbaar.","no file not found in this location":"geen bestand gevonden op deze locatie","No file selected":"Geen bestand geselecteerd","No files":"Geen bestanden","no label":"geen label","No Preview available":"Geen voorbeeld beschikbaar","No preview available":"Geen voorbeeld beschikbaar","No results found":"Geen resultaten gevonden","Nothing imported":"Niets ge\u00efmporteerd","Nothing to install !":"Niets om te installeren !","Nothing to list!":"Niets om te laten zien!","Number of elements":"Aantal segmenten","of":"van","Ok":"Ok","OK":"OK","Old Password":"Oud wachtwoord","or":"of","Page":"Pagina","Password":"Wachtwoord","Password changed":"Wachtwoord gewijzigd.","Password reset":"Wachtwoord gereset","Password successfully changed":"Paswoord succesvol veranderd!","Passwords are not matching":"Wachtwoorden komen niet overeen","Permissions saved":"Permissies opgeslagen","Please confirm deletion":"Bevestig a.u.b. verwijdering","Please confirm property deletion!":"Bevestig a.u.b. verwijdering van de eigenschap!","Please confirm this operation.":"Bevestig a.u.b. deze handeling.","Please contact %s or an administrator to release it":"Neem a.u.b. contact op met %s of een administrator om het uit te geven","Please give a message to your commit":"Geef a.u.b. een bericht bij u bevestiging","Please provide a reason":"Geef a.u.b. een reden","Post install processing":"Post installatie verwerking","Prepare, publish deliveries sessions.":"Voorbereiden, publiceren pakketten sessie","Preparing installation...":"Installatie wordt voorbereid...","Preview":"Voorbeeld","Previous":"Vorige","Properties":"Eigenschappen","Provided URL is not valid":"De gegeven URL is niet geldig","RDF":"RDF","read":"lezen","Record and manage test takers.":"Vastleggen en beheren van kandidaten","Recursive":"Recursief","Release":"Uitgave","Releasing the lock might cause the work in progress by %s to be lost.":"Het vrijgeven van de blokkade kan ervoor zorgen dat het gedane werk door %s verloren gaat.","Remove":"Verwijderen","Remove Message":"Verwijder bericht","Remove this file":"Verwijder dit bestand","Rename":"Hernoemen","Repeat new password":"Herhaal het nieuwe wachtwoord","Request a password reset via Email.":"Vraag een wachtwoord reset aan per e-mail.","required length":"benodigde lengte","Requires":"Benodigd","Reset":"Resetten","Resource":"Bron","Resource not imported due to multiple super classes":"Bron is niet ge\u00efmporteerd vanwege meerdere super klassen","Resource not imported due to multiple types":"Bron is niet ge\u00efmporteerd vanwege meerdere typen","Resource saved":"Bron is opgeslagen","Responsive mode":"Responsive modus","Result Server Manager":"Resultaat server beheer","Result Servers library":"Resultaat server bibliotheek","Results":"Resultaten","Results library":"Resultaat bank","Return to sign in page":"Keer terug naar de login pagina","Right click the tree to manage your lists":"Klik rechts op de boom om de lijsten te beheren","role":"rol","Role saved":"Rol opgeslagen","Roles":"Rollen","Roles library":"Rollen bank","Save":"Opslaan","Scope":"Bereik","Search":"Zoeken","Search %s":"Zoek %s","Search sub-classes":"Zoek sub-klassen","seconds":"seconden","select":"selecteren","Select":"Selecteren","Select a language":"Selecteer een taal","Select the element destination":"Selecteer doellocatie voor het element","Select this file":"Selecteer dit bestand","select...":"selecteer...","Selected file:":"Geselecteerd bestand:","Selection saved successfully":"Selectie is succesvol opgeslagen","Settings":"Instellingen","Settings updated":"Instellingen geupdate","Show detailed report":"Toon gedetailleerd rapport","Simple Mode":"Eenvoudige modus","Size":"Grootte","Success":"Succes","Successfully imported \u0022%s":"Succesvol ge\u00efmporteerd \u0022%s","Successfully imported %s tripples":"%s Trippels succesvol ge\u00efmporteerd ","Successfully imported class \u0022%s":"Klasse \u0022%s succesvol ge\u00efmplementeerd ","Supported export formats":"Ondersteunde export formaten","Tao Default Theme":"Tao standaard thema","TAO Home":"TAO thuis","TAO Login":"TAO login","Test takers library":"Kandidaten bank","Test-takers":"Kandidaten","Tests":"Toets","Tests library":"Toets bank ","Text - Long - Box":"Tekst - lang - Box","Text - Long - HTML editor":"Tekst - lang - HTML editor","Text - Short - Field":"Tekst - kort - veld","The action will be applied to":"De handeling zal worden uitgevoerd op","The action will be applied to the following":"De handeling zal worden uitgevoerd op de volgende","The column ":"De kolom ","The format of this field is not valid.":"Het formaat van dit veld is niet geldig","The imported file is not properly UTF-8 encoded.":"Het ge\u00efmporteerde bestand is niet correct UTF-8 gecodeerd.","The index identifier should not be empty":"De index naam mag niet leeg zijn","The lock has been released":"De blokkade is opgeheven","The uploaded file is too large (maximum %s bytes)":"Het ge\u00fcploade bestand is te groot (maximum %s bytes)","The value for the property \u0022%s\u0022 must be unique.":"De waarde voor eigenschap \u0022%s\u0022 moet uniek zijn.","The value of this field must be a valide date format, e.g. YYYY-MM-DD":"De waarde van dit veld moet een geldig datum formaat hebben, oftewel JJJJ-MM-DD","The value of this field must be an integer":"De waarde van dit veld moet een integer zijn","The value of this field must be numeric":"De waarde van dit veld moet numeriek zijn","There is nothing to list!":"Er is niets om te laten zien!","This %s is currently checked out":"Dit %s is momenteel uitgechecked","This field is required":"Dit veld is vereist","This field is too long":"Dit veld is te lang","This field is too short":"Dit veld is te kort","This is not a valid email address.":"Dit is geen geldig e-mail adres","this is required":"dit is vereist","This Login is already in use":"Deze loginnaam is al in gebruik","This password reset link is no longer valid. It may have already been used. If you still wish to reset your password please request a new link":"Deze wachtwoord reset link is niet langer geldig. Het kan zijn dat het al eerder is gebruikt. Vraag een nieuwe link aan als u nog steeds een wachtwoord reset wilt.","This resource is locked":"Deze bron is geblokkeeerd","This role is still given to one or more users. Please remove the role to these users first.":"Deze rol is nog steeds uitgereikt aan een of meer gebruikers. Verwijder a.u.b. deze rol eerst van deze gebruiker(s).","This should equal %s":"Dit zou gelijk moeten zijn aan %s","This should not equal %s":"Dit moet niet gelijk zijn aan %s","Time zone":"Tijdzone","To reset your password, click the link below, or paste it into your browser. You will then be prompted to create a new password.":"Klik op de link hieronder om uw wachtwoord te resetten, of plak de link in uw browser. U zal dan gevraagd worden een nieuw wachtwoord te maken.","to translate":"vertalen","Tokenizer":"Tokenizer","Too many suggestions match your query. Only a few are listed":"Er komen te veel suggesties overeen met uw zoekopdracht. Er worden er slechts een beperkt aantal getoond.","Tools":"Hulpmiddelen","Translate":"Vertalen","Translate to":"Vertalen naar","Translation parameters":"Vertaal parameters","Translation saved":"Vertaling opgeslagen","Tree - Multiple node choice ":"Boom - Meervoudige knooppunten keuze ","Trees":"Bomen","True":"Waar","Type":"Type","Unable to access your account?":"Kunt u geen toegang krijgen tot uw account?","Unable to change passwords in demo mode":"U kunt geen wachtwoorden wijzigen in demo modus","Unable to delete %s":"Kan %s niet verwijderen","Unable to delete the selected resource":"Kan de geselecteerde bron niet verwijderen","Unable to open file %s":"Kan bestand %s niet openen","Unable to release the lock":"Kan de blokkade niet vrijgeven","Unable to remove the property.":"Kan eigenschap niet verwijderen","Unable to send the password reset request":"Kan wachtwoord reset aanvraag niet versturen","Unable to upload file":"Kan het bestand niet uploaden","Unable to upload file %s : %s":"Kan het bestand %s : %s niet uploaden","Uncheck all":"Alles uitvinken","Uncheck All":"Alles uitvinken","Undo":"Ongedaan maken","Uninstall of %s failed":"De-installatie van %s is mislukt","Uninstalled %s":"%s gede\u00efnstalleerd","unknown":"onbekend","Unknown Error":"Onbekende fout","Update":"Bijwerken","Upload":"Uploaden","Upload into:":"Uploaden naar:","Usage: ImportRdf RDF_FILE [MODEL_ID]":"Gebruik: ImportRdf RDF_FILE [MODEL_ID]","Use default value":"Gebruik standaardwaarde(n)","user":"gebruiker","User":"Gebruiker","User added":"Gebruiker toegevoegd","User deleted successfully":"Gebruiker succesvol verwijderd","User not found":"Gebruiker niet gevonden","User saved":"Gebruiker opgeslagen","User Settings":"Gebruikersinstellingen","Users":"Gebruikers","Version":"Versie","View and format the collected results.":"Bekijk en formateer de verzamelde resultaten.","View Tree":"Bekijk boomstructuur","Width":"Breedte","write":"schrijven","Yes":"Ja","You are not authorised to remove this lock":"U heeft geen rechten om deze blokkade te verwijderen","You cannot delete the root node":"U kunt het basis knooppunt niet verwijderen","You currently have no access to the platform":"U heeft momenteel geen toegang tot het platform","You do not have the required rights to edit this resource.":"U heeft niet de benodigde rechten om deze bron aan te passen","You must activate JavaScript in your browser to run this application.":"U dient Javascript te activeren in uw browser om deze applicatie te starten.","You must have one role or user that have the manage permission on this element.":"U dient een rol of gebruiker te hebben met toestemming om dit element te beheren","Your mail":"Uw mail","Your TAO Password":"Uw TAO wachtwoord"} \ No newline at end of file diff --git a/manifest.php b/manifest.php index 413054c0..b9a2b50a 100644 --- a/manifest.php +++ b/manifest.php @@ -28,7 +28,7 @@ 'label' => 'extension-tao-dac-simple', 'description' => 'extension that allows admin to give access to some resources to other people', 'license' => 'GPL-2.0', - 'version' => '2.7.3', + 'version' => '2.7.4', 'author' => 'Open Assessment Technologies SA', 'requires' => array( 'taoBackOffice' => '>=1.4.0', diff --git a/scripts/update/Updater.php b/scripts/update/Updater.php index 95450e0d..1248c63c 100644 --- a/scripts/update/Updater.php +++ b/scripts/update/Updater.php @@ -137,6 +137,6 @@ public function update($initialVersion) { $this->setVersion('2.7.0'); } - $this->skip('2.7.0', '2.7.3'); + $this->skip('2.7.0', '2.7.4'); } } diff --git a/views/js/controllers.min.js b/views/js/controllers.min.js index 8790e503..41d34d51 100644 --- a/views/js/controllers.min.js +++ b/views/js/controllers.min.js @@ -1,14 +1,17 @@ -define("taoDacSimple/controller/routes",[],function(){"user strict";return{AdminAccessController:{css:"admin",actions:{adminPermissions:"controller/admin/index"}}}}),define("tpl!taoDacSimple/controller/admin/line",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,options,buffer="",functionType="function",escapeExpression=this.escapeExpression,helperMissing=helpers.helperMissing;return buffer+="\n ",(helper=helpers.label)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.label, -stack1=typeof helper===functionType?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\n \n ",(helper=helpers.type)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.type,stack1=typeof helper===functionType?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n"})}),define("taoDacSimple/controller/admin/index",["jquery","lodash","i18n","tpl!taoDacSimple/controller/admin/line","helpers","ui/feedback","ui/autocomplete","util/httpErrorParser","ui/tooltip","jqueryui"],function($,_,__,lineTpl,helpers,feedback,autocomplete,httpErrorParser){"use strict";var linesThreshold=10,errorMsgManagePermission=__("You must have one role or user that have the manage permission on this element."),tooltipConfigManagePermission={theme:"warning",content:{text:__(errorMsgManagePermission) -}},_checkManagers=function(container){var $managers=$(container).find(".privilege-GRANT:checked"),checkOk=!0;return $managers.length||(checkOk=!1),checkOk},_preventManagerRemoval=function(container){var $form=$(container).closest("form"),$submitter=$(":submit",$form);$submitter.qtip(tooltipConfigManagePermission),_checkManagers($form)?($submitter.removeClass("disabled"),$submitter.qtip("disable")):($submitter.addClass("disabled"),$submitter.qtip("enable"),feedback().warning(errorMsgManagePermission))},_disableAccessOnGrant=function(container){var $container=$(container),$managersChecked=$container.find(".privilege-GRANT:checked").closest("tr"),$cantChangeWrite=$managersChecked.find(".privilege-WRITE"),$cantChangeRead=$managersChecked.find(".privilege-READ"),$managers=$container.find(".privilege-GRANT").not(":checked").closest("tr"),$canChangeWrite=$managers.find(".privilege-WRITE"),$canChangeRead=$managers.find(".privilege-READ"); -$canChangeWrite.removeClass("disabled"),$canChangeRead.removeClass("disabled"),$cantChangeWrite.addClass("disabled").attr("checked",!0),$cantChangeRead.addClass("disabled").attr("checked",!0),_preventManagerRemoval($container),_disableAccessOnWrite($container)},_disableAccessOnWrite=function(container){var $container=$(container),$writersChecked=$container.find(".privilege-WRITE:checked").closest("tr"),$cantChangeRead=$writersChecked.find(".privilege-READ"),$writers=$container.find(".privilege-WRITE").not(":checked").closest("tr"),$canChangeRead=$writers.find(".privilege-READ");$canChangeRead.removeClass("disabled"),$cantChangeRead.addClass("disabled").attr("checked",!0); -},_deletePermission=function(element){var $this=$(element),$container=$this.closest("table"),type=$this.data("acl-type"),user=$this.data("acl-user"),label=$this.data("acl-label");_.isEmpty(type)||_.isEmpty(user)||_.isEmpty(label)||$this.closest("tr").remove(),_preventManagerRemoval($container),_manageTabsDisplay()},_checkPermission=function(container,type,id){var $btn=$(container).find('button[data-acl-user="'+id+'"]'),$line=$btn.closest("tr");return!!$line.length&&($line.effect("highlight",{},1500),!0)},_addPermission=function(container,type,id,label){var $container=$(container),$body=$container.find("tbody").first();_checkPermission($container,type,id)||($body.append(lineTpl({ -type:type,user:id,label:label})),_disableAccessOnGrant($container),_manageTabsDisplay())},_installListeners=function(container){var $container=$(container);$container.on("click",".privilege-GRANT:not(.disabled) ",function(){_disableAccessOnGrant($container)}).on("click",".privilege-WRITE:not(.disabled) ",function(){_disableAccessOnWrite($container)}).on("click",".delete_permission:not(.disabled)",function(event){event.preventDefault(),_deletePermission(this)})},_manageTabsDisplay=function(){var $focused,index,$tabs=$(".permission-tabs"),needsTabs=$tabs.find(".privilege-GRANT").length>linesThreshold;needsTabs?($tabs.find("ul").show(),$tabs.hasClass("ui-tabs")||($focused=$tabs.find(":focus").closest(".permission-tabs-panel"), -index=Math.max(0,$focused.index()-1),$tabs.tabs({selected:index,active:index})),$(".msg-edit-area label span").hide()):($tabs.hasClass("ui-tabs")&&($tabs.find(".ui-tabs-hide").removeClass("ui-tabs-hide"),$tabs.tabs("destroy")),$tabs.find("ul").hide(),$(".msg-edit-area label span").show())},_searchFactory=function(element,options){return _.isFunction(options)&&(options={onSelectItem:options}),options=_.assign({isProvider:!0,preventSubmit:!0},options||{}),autocomplete(element,options)},mainCtrl={start:function(){var $container=$(".permission-container"),$form=$("form",$container),$submitter=$(":submit",$form);_disableAccessOnGrant("#permissions-table-users"),_disableAccessOnGrant("#permissions-table-roles"), -_searchFactory("#add-user",function(event,value,label){$("#add-user").focus(),_addPermission("#permissions-table-users","user",value,label)}),_searchFactory("#add-role",function(event,value,label){$("#add-role").focus(),_addPermission("#permissions-table-roles","role",value,label)}),_installListeners("#permissions-table-users"),_installListeners("#permissions-table-roles"),_manageTabsDisplay(),$form.on("submit",function(e){e.preventDefault(),e.stopImmediatePropagation()}),$submitter.on("click",function(e){if(e.preventDefault(),!$submitter.hasClass("disabled")){if(!_checkManagers("form"))return void feedback().error(errorMsgManagePermission);$submitter.addClass("disabled"), -$.ajax({url:$form.attr("action"),type:"POST",data:$form.serialize(),global:!1}).done(function(data){feedback().success(__("Permissions saved")),data&&data.tokenName&&data.token&&$('[name="'+data.tokenName+'"]',$form).val(data.token)}).fail(function(jqXHR,textStatus,errorThrown){var error=httpErrorParser.parse(jqXHR,textStatus,errorThrown);feedback().error(error.message)}).complete(function(){$submitter.removeClass("disabled")})}})}};return mainCtrl}); +define("taoDacSimple/controller/routes",[],function(){"user strict";return{AdminAccessController:{css:"admin",actions:{adminPermissions:"controller/admin/index"}}}}),define("tpl!taoDacSimple/controller/admin/line",["handlebars"],function(hb){return hb.template(function(Handlebars,depth0,helpers,partials,data){this.compilerInfo=[4,">= 1.0.0"],helpers=this.merge(helpers,Handlebars.helpers),data=data||{};var stack1,helper,options,buffer="",escapeExpression=this.escapeExpression,helperMissing=helpers.helperMissing;return buffer+="\n ",(helper=helpers.label)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.label, +stack1="function"==typeof helper?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+"\n \n ",(helper=helpers.type)?stack1=helper.call(depth0,{hash:{},data:data}):(helper=depth0&&depth0.type,stack1="function"==typeof helper?helper.call(depth0,{hash:{},data:data}):helper),buffer+=escapeExpression(stack1)+'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n"})}), +define("taoDacSimple/controller/admin/index",["jquery","lodash","i18n","tpl!taoDacSimple/controller/admin/line","helpers","ui/feedback","ui/autocomplete","util/httpErrorParser","ui/tooltip","jqueryui"],function($,_,__,lineTpl,helpers,feedback,autocomplete,httpErrorParser){"use strict";var errorMsgManagePermission=__("You must have one role or user that have the manage permission on this element."),tooltipConfigManagePermission={theme:"warning",content:{text:__(errorMsgManagePermission)}},_checkManagers=function(container){var $managers=$(container).find(".privilege-GRANT:checked"),checkOk=!0;return $managers.length||(checkOk=!1),checkOk +},_preventManagerRemoval=function(container){var $form=$(container).closest("form"),$submitter=$(":submit",$form);$submitter.qtip(tooltipConfigManagePermission),_checkManagers($form)?($submitter.removeClass("disabled"),$submitter.qtip("disable")):($submitter.addClass("disabled"),$submitter.qtip("enable"),feedback().warning(errorMsgManagePermission))},_disableAccessOnGrant=function(container){ +var $container=$(container),$managersChecked=$container.find(".privilege-GRANT:checked").closest("tr"),$cantChangeWrite=$managersChecked.find(".privilege-WRITE"),$cantChangeRead=$managersChecked.find(".privilege-READ"),$managers=$container.find(".privilege-GRANT").not(":checked").closest("tr"),$canChangeWrite=$managers.find(".privilege-WRITE"),$canChangeRead=$managers.find(".privilege-READ");$canChangeWrite.removeClass("disabled"),$canChangeRead.removeClass("disabled"),$cantChangeWrite.addClass("disabled").attr("checked",!0),$cantChangeRead.addClass("disabled").attr("checked",!0),_preventManagerRemoval($container),_disableAccessOnWrite($container) +},_disableAccessOnWrite=function(container){var $container=$(container),$writersChecked=$container.find(".privilege-WRITE:checked").closest("tr"),$cantChangeRead=$writersChecked.find(".privilege-READ");$container.find(".privilege-WRITE").not(":checked").closest("tr").find(".privilege-READ").removeClass("disabled"),$cantChangeRead.addClass("disabled").attr("checked",!0)},_deletePermission=function(element){var $this=$(element),$container=$this.closest("table"),type=$this.data("acl-type"),user=$this.data("acl-user"),label=$this.data("acl-label");_.isEmpty(type)||_.isEmpty(user)||_.isEmpty(label)||$this.closest("tr").remove(),_preventManagerRemoval($container), +_manageTabsDisplay()},_checkPermission=function(container,type,id){var $btn=$(container).find('button[data-acl-user="'+id+'"]'),$line=$btn.closest("tr");return!!$line.length&&($line.effect("highlight",{},1500),!0)},_addPermission=function(container,type,id,label){var $container=$(container),$body=$container.find("tbody").first();_checkPermission($container,0,id)||($body.append(lineTpl({type:type,user:id,label:label})),_disableAccessOnGrant($container),_manageTabsDisplay())},_installListeners=function(container){var $container=$(container);$container.on("click",".privilege-GRANT:not(.disabled) ",function(){_disableAccessOnGrant($container) +}).on("click",".privilege-WRITE:not(.disabled) ",function(){_disableAccessOnWrite($container)}).on("click",".delete_permission:not(.disabled)",function(event){event.preventDefault(),_deletePermission(this)})},_manageTabsDisplay=function(){var $focused,index,$tabs=$(".permission-tabs"),needsTabs=$tabs.find(".privilege-GRANT").length>10;needsTabs?($tabs.find("ul").show(),$tabs.hasClass("ui-tabs")||($focused=$tabs.find(":focus").closest(".permission-tabs-panel"),index=Math.max(0,$focused.index()-1),$tabs.tabs({selected:index,active:index})), +$(".msg-edit-area label span").hide()):($tabs.hasClass("ui-tabs")&&($tabs.find(".ui-tabs-hide").removeClass("ui-tabs-hide"),$tabs.tabs("destroy")),$tabs.find("ul").hide(),$(".msg-edit-area label span").show())},_searchFactory=function(element,options){return _.isFunction(options)&&(options={onSelectItem:options}),options=_.assign({isProvider:!0,preventSubmit:!0},options||{}),autocomplete(element,options)};return{start:function(){var $container=$(".permission-container"),$form=$("form",$container),$submitter=$(":submit",$form);_disableAccessOnGrant("#permissions-table-users"),_disableAccessOnGrant("#permissions-table-roles"), +_searchFactory("#add-user",function(event,value,label){$("#add-user").focus(),_addPermission("#permissions-table-users","user",value,label)}),_searchFactory("#add-role",function(event,value,label){$("#add-role").focus(),_addPermission("#permissions-table-roles","role",value,label)}),_installListeners("#permissions-table-users"),_installListeners("#permissions-table-roles"),_manageTabsDisplay(),$form.on("submit",function(e){e.preventDefault(),e.stopImmediatePropagation()}),$submitter.on("click",function(e){if(e.preventDefault(),!$submitter.hasClass("disabled")){if(!_checkManagers("form"))return void feedback().error(errorMsgManagePermission) +;$submitter.addClass("disabled"),$.ajax({url:$form.attr("action"),type:"POST",data:$form.serialize(),global:!1}).done(function(data){feedback().success(__("Permissions saved")),data&&data.tokenName&&data.token&&$('[name="'+data.tokenName+'"]',$form).val(data.token)}).fail(function(jqXHR,textStatus,errorThrown){var error=httpErrorParser.parse(jqXHR,textStatus,errorThrown);feedback().error(error.message)}).complete(function(){$submitter.removeClass("disabled")})}})}}}); //# sourceMappingURL=controllers.min.js.map \ No newline at end of file diff --git a/views/js/controllers.min.js.map b/views/js/controllers.min.js.map index 67e57e15..eac46feb 100644 --- a/views/js/controllers.min.js.map +++ b/views/js/controllers.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["routes.js","admin/line!tpl","admin/index.js"],"names":["define","AdminAccessController","css","actions","adminPermissions","hb","template","Handlebars","depth0","helpers","partials","data","this","compilerInfo","merge","stack1","helper","options","buffer","functionType","escapeExpression","helperMissing","label","call","hash","type","user","__","$","_","lineTpl","feedback","autocomplete","httpErrorParser","linesThreshold","errorMsgManagePermission","tooltipConfigManagePermission","theme","content","text","_checkManagers","container","$managers","find","checkOk","length","_preventManagerRemoval","$form","closest","$submitter","qtip","removeClass","addClass","warning","_disableAccessOnGrant","$container","$managersChecked","$cantChangeWrite","$cantChangeRead","not","$canChangeWrite","$canChangeRead","attr","_disableAccessOnWrite","$writersChecked","$writers","_deletePermission","element","$this","isEmpty","remove","_manageTabsDisplay","_checkPermission","id","$btn","$line","effect","_addPermission","$body","first","append","_installListeners","on","event","preventDefault","$focused","index","$tabs","needsTabs","show","hasClass","Math","max","tabs","selected","active","hide","_searchFactory","isFunction","onSelectItem","assign","isProvider","preventSubmit","mainCtrl","start","value","focus","e","stopImmediatePropagation","error","ajax","url","serialize","global","done","success","tokenName","token","val","fail","jqXHR","textStatus","errorThrown","parse","message","complete"],"mappings":"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","file":"routes.js","sourcesContent":["/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\ndefine('taoDacSimple/controller/routes',[],function(){\n 'user strict';\n return {\n 'AdminAccessController' : {\n 'css': 'admin', \n 'actions' : {\n 'adminPermissions' : 'controller/admin/index'\n }\n }\n };\n});\n\n","\ndefine('tpl!taoDacSimple/controller/admin/line', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n \\n \";\n if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n return buffer;\n });\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\ndefine('taoDacSimple/controller/admin/index',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'tpl!taoDacSimple/controller/admin/line',\n 'helpers',\n 'ui/feedback',\n 'ui/autocomplete',\n 'util/httpErrorParser',\n 'ui/tooltip',\n 'jqueryui'\n], function ($, _, __, lineTpl, helpers, feedback, autocomplete, httpErrorParser) {\n 'use strict';\n\n /**\n * The amount of displayed lines that fires the tabs mode\n * @type {Number}\n */\n var linesThreshold = 10;\n\n /**\n * The warning message shown when all managers have been removed\n * @type {String}\n */\n var errorMsgManagePermission = __('You must have one role or user that have the manage permission on this element.');\n\n /**\n * Config object needed by the tooltip used to display warning if all managers have been removed\n * @type {Object}\n */\n var tooltipConfigManagePermission = {\n theme : 'warning',\n content: {\n text: __(errorMsgManagePermission)\n }\n };\n\n /**\n * Checks the managers, we need at least one activated manager.\n * @param {jQuery|Element|String} container\n * @returns {Boolean} Returns `true` if there is at least one manager in the list\n * @private\n */\n var _checkManagers = function (container) {\n var $managers = $(container).find('.privilege-GRANT:checked');\n var checkOk = true;\n\n if (!$managers.length) {\n checkOk = false;\n }\n return checkOk;\n };\n\n /**\n * Avoids to remove all managers\n * @param {jQuery|Element|String} container\n * @private\n */\n var _preventManagerRemoval = function(container){\n var $form = $(container).closest('form');\n var $submitter = $(':submit', $form);\n\n $submitter.qtip(tooltipConfigManagePermission);\n if (!_checkManagers($form)) {\n $submitter.addClass('disabled');\n $submitter.qtip('enable');\n feedback().warning(errorMsgManagePermission);\n } else {\n $submitter.removeClass('disabled');\n $submitter.qtip('disable');\n }\n };\n\n /**\n * Allow to enable / disable the access checkbox based on the state of the grant privilege\n * @param {jQuery|Element|String} container\n * @private\n */\n var _disableAccessOnGrant = function (container) {\n var $container = $(container);\n\n var $managersChecked = $container.find('.privilege-GRANT:checked').closest('tr');\n var $cantChangeWrite = $managersChecked.find('.privilege-WRITE');\n var $cantChangeRead = $managersChecked.find('.privilege-READ');\n\n var $managers = $container.find('.privilege-GRANT').not(':checked').closest('tr');\n var $canChangeWrite = $managers.find('.privilege-WRITE');\n var $canChangeRead = $managers.find('.privilege-READ');\n\n $canChangeWrite.removeClass('disabled');\n $canChangeRead.removeClass('disabled');\n\n $cantChangeWrite.addClass('disabled').attr('checked', true);\n $cantChangeRead.addClass('disabled').attr('checked', true);\n\n _preventManagerRemoval($container);\n _disableAccessOnWrite($container);\n };\n\n /**\n * Allow to enable / disable the access checkbox based on the state of the write privilege\n * @param {jQuery|Element|String} container\n * @private\n */\n var _disableAccessOnWrite = function (container) {\n var $container = $(container);\n\n var $writersChecked = $container.find('.privilege-WRITE:checked').closest('tr');\n var $cantChangeRead = $writersChecked.find('.privilege-READ');\n\n var $writers = $container.find('.privilege-WRITE').not(':checked').closest('tr');\n var $canChangeRead = $writers.find('.privilege-READ');\n\n $canChangeRead.removeClass('disabled');\n\n $cantChangeRead.addClass('disabled').attr('checked', true);\n };\n\n /**\n * Delete a permission row for a user/role\n * @param {DOM Element} element DOM element that triggered the function\n * @private\n */\n var _deletePermission = function (element) {\n // 1. Get the user / role\n var $this = $(element);\n var $container = $this.closest('table');\n var type = $this.data('acl-type');\n var user = $this.data('acl-user');\n var label = $this.data('acl-label');\n\n // 2. Remove it from the list\n if (!_.isEmpty(type) && !_.isEmpty(user) && !_.isEmpty(label)) {\n $this.closest('tr').remove();\n }\n\n _preventManagerRemoval($container);\n _manageTabsDisplay();\n };\n\n /**\n * Checks if a permission has already been added to the list.\n * Highlight the list if the permission is already in the list.\n * @param {jQuery|Element|String} container\n * @param {String} type role/user regarding what it will be added.\n * @param {String} id The identifier of the resource.\n * @returns {boolean} Returns true if the permission is already in the list\n * @private\n */\n var _checkPermission = function (container, type, id) {\n var $btn = $(container).find('button[data-acl-user=\"' + id + '\"]'),\n $line = $btn.closest('tr');\n\n if ($line.length) {\n $line.effect('highlight', {}, 1500);\n return true;\n }\n\n return false;\n };\n\n /**\n * Add a new lines into the permissions table regarding what is selected into the add-* select\n * @param {jQuery|Element|String} container\n * @param {String} type role/user regarding what it will be added.\n * @param {String} id The identifier of the resource.\n * @param {String} label The label of the resource.\n * @private\n */\n var _addPermission = function (container, type, id, label) {\n var $container = $(container),\n $body = $container.find('tbody').first();\n\n // only add the permission if it's not already present in the list\n if (!_checkPermission($container, type, id)) {\n $body.append(lineTpl({\n type: type,\n user: id,\n label: label\n }));\n _disableAccessOnGrant($container);\n _manageTabsDisplay();\n }\n };\n\n /**\n * Ensures that if you give the manage (GRANT) permission, access (WRITE and READ) permissions are given too\n * Listens all clicks on delete buttons to call the _deletePermission function\n * @param {jQuery|Element|String} container The container on which apply the listeners\n * @private\n */\n var _installListeners = function(container) {\n var $container = $(container);\n $container.on('click', '.privilege-GRANT:not(.disabled) ', function () {\n _disableAccessOnGrant($container);\n }).on('click', '.privilege-WRITE:not(.disabled) ', function () {\n _disableAccessOnWrite($container);\n }).on('click', '.delete_permission:not(.disabled)', function (event) {\n event.preventDefault();\n _deletePermission(this);\n });\n };\n\n /**\n * Manages the display of tabs.\n * If the total amount of lines per tables is too big, display the tabs. Otherwise, hide them.\n * @private\n */\n var _manageTabsDisplay = function() {\n var $tabs = $('.permission-tabs');\n var needsTabs = $tabs.find('.privilege-GRANT').length > linesThreshold;\n var $focused, index;\n\n if (needsTabs) {\n $tabs.find('ul').show();\n if (!$tabs.hasClass('ui-tabs')) {\n // get the current focused panel\n $focused = $tabs.find(':focus').closest('.permission-tabs-panel');\n index = Math.max(0, $focused.index() - 1);\n\n // install the tabs, but keep the current panel focused\n $tabs.tabs({\n // use two options to be compatible with both older and current version of jQueryUI\n selected: index,\n active: index\n });\n }\n $('.msg-edit-area label span').hide();\n } else {\n if ($tabs.hasClass('ui-tabs')) {\n $tabs.find('.ui-tabs-hide').removeClass('ui-tabs-hide');\n $tabs.tabs('destroy');\n }\n $tabs.find('ul').hide();\n $('.msg-edit-area label span').show();\n }\n };\n\n /**\n * Installs a search purpose autocompleter onto an element.\n * @param {jQuery|Element|String} element The element on which install the autocompleter\n * @param {Object} options A list of options to set\n * @returns {Autocompleter} Returns the instance of the autocompleter component\n */\n var _searchFactory = function (element, options) {\n if (_.isFunction(options)) {\n options = {\n onSelectItem: options\n };\n }\n\n options = _.assign({\n isProvider: true,\n preventSubmit: true\n }, options || {});\n\n return autocomplete(element, options);\n };\n\n var mainCtrl = {\n 'start': function () {\n\n var $container = $('.permission-container');\n var $form = $('form', $container);\n var $submitter = $(':submit', $form);\n\n _disableAccessOnGrant('#permissions-table-users');\n _disableAccessOnGrant('#permissions-table-roles');\n\n // install autocomplete for user add\n _searchFactory('#add-user', function (event, value, label) {\n $('#add-user').focus();\n _addPermission('#permissions-table-users', 'user', value, label);\n });\n\n // install autocomplete for role add\n _searchFactory('#add-role', function (event, value, label) {\n $('#add-role').focus();\n _addPermission('#permissions-table-roles', 'role', value, label);\n });\n\n // ensure that if you give the manage (GRANT) permission, access (WRITE and READ) permissions are given too\n _installListeners('#permissions-table-users');\n _installListeners('#permissions-table-roles');\n\n _manageTabsDisplay();\n\n $form.on('submit', function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n $submitter.on('click', function (e) {\n e.preventDefault();\n\n if ($submitter.hasClass('disabled')) {\n return;\n }\n\n if (!_checkManagers('form')) {\n feedback().error(errorMsgManagePermission);\n return;\n }\n\n $submitter.addClass('disabled');\n\n $.ajax({\n url : $form.attr('action'),\n type : 'POST',\n data : $form.serialize(),\n global : false\n }).done(function (data) {\n feedback().success(__('Permissions saved'));\n if(data && data.tokenName && data.token) {\n $('[name=\"' + data.tokenName + '\"]', $form).val(data.token);\n }\n }).fail(function(jqXHR, textStatus, errorThrown) {\n var error = httpErrorParser.parse(jqXHR, textStatus, errorThrown);\n feedback().error(error.message);\n })\n .complete(function () {\n $submitter.removeClass('disabled');\n });\n });\n }\n };\n\n return mainCtrl;\n});\n\n"]} \ No newline at end of file +{"version":3,"sources":["routes.js","admin/line!tpl","admin/index.js"],"names":["define","AdminAccessController","css","actions","adminPermissions","hb","template","Handlebars","depth0","helpers","partials","data","this","compilerInfo","merge","stack1","helper","options","buffer","escapeExpression","helperMissing","label","call","hash","type","user","__","$","_","lineTpl","feedback","autocomplete","httpErrorParser","errorMsgManagePermission","tooltipConfigManagePermission","theme","content","text","_checkManagers","container","$managers","find","checkOk","length","_preventManagerRemoval","$form","closest","$submitter","qtip","removeClass","addClass","warning","_disableAccessOnGrant","$container","$managersChecked","$cantChangeWrite","$cantChangeRead","not","$canChangeWrite","$canChangeRead","attr","_disableAccessOnWrite","$writersChecked","_deletePermission","element","$this","isEmpty","remove","_manageTabsDisplay","_checkPermission","id","$btn","$line","effect","_addPermission","$body","first","append","_installListeners","on","event","preventDefault","$focused","index","$tabs","needsTabs","show","hasClass","Math","max","tabs","selected","active","hide","_searchFactory","isFunction","onSelectItem","assign","isProvider","preventSubmit","start","value","focus","e","stopImmediatePropagation","error","ajax","url","serialize","global","done","success","tokenName","token","val","fail","jqXHR","textStatus","errorThrown","parse","message","complete"],"mappings":"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","file":"routes.js","sourcesContent":["/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\ndefine('taoDacSimple/controller/routes',[],function(){\n 'user strict';\n return {\n 'AdminAccessController' : {\n 'css': 'admin', \n 'actions' : {\n 'adminPermissions' : 'controller/admin/index'\n }\n }\n };\n});\n\n","\ndefine('tpl!taoDacSimple/controller/admin/line', ['handlebars'], function(hb){ \nreturn hb.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\nhelpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n \\n \";\n if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n return buffer;\n });\n});\n\n","/**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\ndefine('taoDacSimple/controller/admin/index',[\n 'jquery',\n 'lodash',\n 'i18n',\n 'tpl!taoDacSimple/controller/admin/line',\n 'helpers',\n 'ui/feedback',\n 'ui/autocomplete',\n 'util/httpErrorParser',\n 'ui/tooltip',\n 'jqueryui'\n], function ($, _, __, lineTpl, helpers, feedback, autocomplete, httpErrorParser) {\n 'use strict';\n\n /**\n * The amount of displayed lines that fires the tabs mode\n * @type {Number}\n */\n var linesThreshold = 10;\n\n /**\n * The warning message shown when all managers have been removed\n * @type {String}\n */\n var errorMsgManagePermission = __('You must have one role or user that have the manage permission on this element.');\n\n /**\n * Config object needed by the tooltip used to display warning if all managers have been removed\n * @type {Object}\n */\n var tooltipConfigManagePermission = {\n theme : 'warning',\n content: {\n text: __(errorMsgManagePermission)\n }\n };\n\n /**\n * Checks the managers, we need at least one activated manager.\n * @param {jQuery|Element|String} container\n * @returns {Boolean} Returns `true` if there is at least one manager in the list\n * @private\n */\n var _checkManagers = function (container) {\n var $managers = $(container).find('.privilege-GRANT:checked');\n var checkOk = true;\n\n if (!$managers.length) {\n checkOk = false;\n }\n return checkOk;\n };\n\n /**\n * Avoids to remove all managers\n * @param {jQuery|Element|String} container\n * @private\n */\n var _preventManagerRemoval = function(container){\n var $form = $(container).closest('form');\n var $submitter = $(':submit', $form);\n\n $submitter.qtip(tooltipConfigManagePermission);\n if (!_checkManagers($form)) {\n $submitter.addClass('disabled');\n $submitter.qtip('enable');\n feedback().warning(errorMsgManagePermission);\n } else {\n $submitter.removeClass('disabled');\n $submitter.qtip('disable');\n }\n };\n\n /**\n * Allow to enable / disable the access checkbox based on the state of the grant privilege\n * @param {jQuery|Element|String} container\n * @private\n */\n var _disableAccessOnGrant = function (container) {\n var $container = $(container);\n\n var $managersChecked = $container.find('.privilege-GRANT:checked').closest('tr');\n var $cantChangeWrite = $managersChecked.find('.privilege-WRITE');\n var $cantChangeRead = $managersChecked.find('.privilege-READ');\n\n var $managers = $container.find('.privilege-GRANT').not(':checked').closest('tr');\n var $canChangeWrite = $managers.find('.privilege-WRITE');\n var $canChangeRead = $managers.find('.privilege-READ');\n\n $canChangeWrite.removeClass('disabled');\n $canChangeRead.removeClass('disabled');\n\n $cantChangeWrite.addClass('disabled').attr('checked', true);\n $cantChangeRead.addClass('disabled').attr('checked', true);\n\n _preventManagerRemoval($container);\n _disableAccessOnWrite($container);\n };\n\n /**\n * Allow to enable / disable the access checkbox based on the state of the write privilege\n * @param {jQuery|Element|String} container\n * @private\n */\n var _disableAccessOnWrite = function (container) {\n var $container = $(container);\n\n var $writersChecked = $container.find('.privilege-WRITE:checked').closest('tr');\n var $cantChangeRead = $writersChecked.find('.privilege-READ');\n\n var $writers = $container.find('.privilege-WRITE').not(':checked').closest('tr');\n var $canChangeRead = $writers.find('.privilege-READ');\n\n $canChangeRead.removeClass('disabled');\n\n $cantChangeRead.addClass('disabled').attr('checked', true);\n };\n\n /**\n * Delete a permission row for a user/role\n * @param {DOM Element} element DOM element that triggered the function\n * @private\n */\n var _deletePermission = function (element) {\n // 1. Get the user / role\n var $this = $(element);\n var $container = $this.closest('table');\n var type = $this.data('acl-type');\n var user = $this.data('acl-user');\n var label = $this.data('acl-label');\n\n // 2. Remove it from the list\n if (!_.isEmpty(type) && !_.isEmpty(user) && !_.isEmpty(label)) {\n $this.closest('tr').remove();\n }\n\n _preventManagerRemoval($container);\n _manageTabsDisplay();\n };\n\n /**\n * Checks if a permission has already been added to the list.\n * Highlight the list if the permission is already in the list.\n * @param {jQuery|Element|String} container\n * @param {String} type role/user regarding what it will be added.\n * @param {String} id The identifier of the resource.\n * @returns {boolean} Returns true if the permission is already in the list\n * @private\n */\n var _checkPermission = function (container, type, id) {\n var $btn = $(container).find('button[data-acl-user=\"' + id + '\"]'),\n $line = $btn.closest('tr');\n\n if ($line.length) {\n $line.effect('highlight', {}, 1500);\n return true;\n }\n\n return false;\n };\n\n /**\n * Add a new lines into the permissions table regarding what is selected into the add-* select\n * @param {jQuery|Element|String} container\n * @param {String} type role/user regarding what it will be added.\n * @param {String} id The identifier of the resource.\n * @param {String} label The label of the resource.\n * @private\n */\n var _addPermission = function (container, type, id, label) {\n var $container = $(container),\n $body = $container.find('tbody').first();\n\n // only add the permission if it's not already present in the list\n if (!_checkPermission($container, type, id)) {\n $body.append(lineTpl({\n type: type,\n user: id,\n label: label\n }));\n _disableAccessOnGrant($container);\n _manageTabsDisplay();\n }\n };\n\n /**\n * Ensures that if you give the manage (GRANT) permission, access (WRITE and READ) permissions are given too\n * Listens all clicks on delete buttons to call the _deletePermission function\n * @param {jQuery|Element|String} container The container on which apply the listeners\n * @private\n */\n var _installListeners = function(container) {\n var $container = $(container);\n $container.on('click', '.privilege-GRANT:not(.disabled) ', function () {\n _disableAccessOnGrant($container);\n }).on('click', '.privilege-WRITE:not(.disabled) ', function () {\n _disableAccessOnWrite($container);\n }).on('click', '.delete_permission:not(.disabled)', function (event) {\n event.preventDefault();\n _deletePermission(this);\n });\n };\n\n /**\n * Manages the display of tabs.\n * If the total amount of lines per tables is too big, display the tabs. Otherwise, hide them.\n * @private\n */\n var _manageTabsDisplay = function() {\n var $tabs = $('.permission-tabs');\n var needsTabs = $tabs.find('.privilege-GRANT').length > linesThreshold;\n var $focused, index;\n\n if (needsTabs) {\n $tabs.find('ul').show();\n if (!$tabs.hasClass('ui-tabs')) {\n // get the current focused panel\n $focused = $tabs.find(':focus').closest('.permission-tabs-panel');\n index = Math.max(0, $focused.index() - 1);\n\n // install the tabs, but keep the current panel focused\n $tabs.tabs({\n // use two options to be compatible with both older and current version of jQueryUI\n selected: index,\n active: index\n });\n }\n $('.msg-edit-area label span').hide();\n } else {\n if ($tabs.hasClass('ui-tabs')) {\n $tabs.find('.ui-tabs-hide').removeClass('ui-tabs-hide');\n $tabs.tabs('destroy');\n }\n $tabs.find('ul').hide();\n $('.msg-edit-area label span').show();\n }\n };\n\n /**\n * Installs a search purpose autocompleter onto an element.\n * @param {jQuery|Element|String} element The element on which install the autocompleter\n * @param {Object} options A list of options to set\n * @returns {Autocompleter} Returns the instance of the autocompleter component\n */\n var _searchFactory = function (element, options) {\n if (_.isFunction(options)) {\n options = {\n onSelectItem: options\n };\n }\n\n options = _.assign({\n isProvider: true,\n preventSubmit: true\n }, options || {});\n\n return autocomplete(element, options);\n };\n\n var mainCtrl = {\n 'start': function () {\n\n var $container = $('.permission-container');\n var $form = $('form', $container);\n var $submitter = $(':submit', $form);\n\n _disableAccessOnGrant('#permissions-table-users');\n _disableAccessOnGrant('#permissions-table-roles');\n\n // install autocomplete for user add\n _searchFactory('#add-user', function (event, value, label) {\n $('#add-user').focus();\n _addPermission('#permissions-table-users', 'user', value, label);\n });\n\n // install autocomplete for role add\n _searchFactory('#add-role', function (event, value, label) {\n $('#add-role').focus();\n _addPermission('#permissions-table-roles', 'role', value, label);\n });\n\n // ensure that if you give the manage (GRANT) permission, access (WRITE and READ) permissions are given too\n _installListeners('#permissions-table-users');\n _installListeners('#permissions-table-roles');\n\n _manageTabsDisplay();\n\n $form.on('submit', function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n });\n $submitter.on('click', function (e) {\n e.preventDefault();\n\n if ($submitter.hasClass('disabled')) {\n return;\n }\n\n if (!_checkManagers('form')) {\n feedback().error(errorMsgManagePermission);\n return;\n }\n\n $submitter.addClass('disabled');\n\n $.ajax({\n url : $form.attr('action'),\n type : 'POST',\n data : $form.serialize(),\n global : false\n }).done(function (data) {\n feedback().success(__('Permissions saved'));\n if(data && data.tokenName && data.token) {\n $('[name=\"' + data.tokenName + '\"]', $form).val(data.token);\n }\n }).fail(function(jqXHR, textStatus, errorThrown) {\n var error = httpErrorParser.parse(jqXHR, textStatus, errorThrown);\n feedback().error(error.message);\n })\n .complete(function () {\n $submitter.removeClass('disabled');\n });\n });\n }\n };\n\n return mainCtrl;\n});\n\n"]} \ No newline at end of file