Ignore:
Timestamp:
Oct 21, 2010, 5:28:04 PM (10 years ago)
Author:
robert@…
Message:

Authentication and authorization for studies is added, according to ticket 118

Location:
trunk/grails-app/taglib/dbnp
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r959 r976  
    33import org.codehaus.groovy.grails.plugins.web.taglib.JavascriptTagLib
    44import dbnp.studycapturing.*
     5import dbnp.authentication.SecUser
    56import dbnp.data.*
    67import cr.co.arquetipos.crypto.Blowfish
     
    1920 */
    2021class WizardTagLib extends JavascriptTagLib {
     22
     23        def AuthenticationService
     24       
    2125        // define the tag namespace (e.g.: <wizard:action ... />
    2226        static namespace = "wizard"
     
    649653         */
    650654        def studySelect = { attrs ->
    651                 // for now, just fetch all studies
    652                 attrs.from = Study.findAll()
     655                // Find all studies the user has access to
     656                def user = AuthenticationService.getLoggedInUser()
     657
     658                def c = Study.createCriteria()
     659                attrs.from = c.list {
     660                    or {
     661                        eq( "owner", user )
     662                        writers {
     663                            eq( "id", user.id )
     664                        }
     665                    }
     666                }
    653667
    654668                // got a name?
     
    13111325                out << "Role: " + select(selectAttrs)
    13121326        }
     1327
     1328
     1329        def UserSelectElement = { attrs, body ->
     1330                // render list with publications currently available
     1331                baseElement.call(
     1332                        '_userList',
     1333                        attrs,
     1334                        body
     1335                )
     1336
     1337                attrs.description = '';
     1338
     1339                // render 'Add user button'
     1340                baseElement.call(
     1341                        '_userAddButton',
     1342                        attrs,
     1343                        body
     1344                )
     1345        }
     1346
     1347        /**
     1348         * Renders an input box for publications
     1349         */
     1350        def userSelect = { attrs, body ->
     1351                if (attrs.get('value') == null) {
     1352                        attrs.value = [];
     1353                }
     1354                if (attrs.get('description') == null) {
     1355                        attrs.description = '';
     1356                }
     1357               
     1358                out << '<form id="' + attrs.name + '_form" onSubmit="return false;">';
     1359                out << select(
     1360                        name: attrs.get("name"),
     1361                        value: '',
     1362                        from: SecUser.list(),
     1363                        optionValue: 'username',
     1364                        optionKey: 'id',
     1365                        style: 'width: 400px;'
     1366                );
     1367                out << '</form>';
     1368        }
     1369
     1370        def _userList = { attrs, body ->
     1371                def display_none = 'none';
     1372                if (!attrs.get('value') || attrs.get('value').size() == 0) {
     1373                        display_none = 'inline';
     1374                }
     1375
     1376                // Add a unordered list
     1377                out << '<ul class="user_list" id="' + attrs.name + '_list">';
     1378
     1379                out << '<li>';
     1380                out << '<span class="user_none" id="' + attrs.name + '_none" style="display: ' + display_none + ';">';
     1381                out << '-';
     1382                out << '</span>';
     1383                out << '</li>';
     1384
     1385                out << '</ul>';
     1386
     1387                // Add the publications using javascript
     1388                out << '<script type="text/javascript">'
     1389                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1390                        def i = 0;
     1391                        attrs.get('value').each {
     1392                                out << 'showUser( ';
     1393                                out << '  "' + attrs.name + '",';
     1394                                out << '  ' + it.id + ',';
     1395                                out << '  "' + it.username + '",';
     1396                                out << '  ' + i++;
     1397                                out << ');';
     1398                        }
     1399                }
     1400                out << '</script>';
     1401
     1402                def ids;
     1403                if (attrs.get('value') && attrs.get('value').size() > 0) {
     1404                        ids = attrs.get('value').id.join(',')
     1405                } else {
     1406                        ids = '';
     1407                }
     1408                out << '<input type="hidden" name="' + attrs.name + '_ids" value="' + ids + '" id="' + attrs.name + '_ids">';
     1409        }
     1410
     1411        def _userAddButton = { attrs, body ->
     1412
     1413                // Output the dialog for the publications
     1414                out << '<div id="' + attrs.name + '_dialog">';
     1415                out << '<p>Select a user from the database.</p>';
     1416                out << userSelect(attrs, body);
     1417                out << '</div>';
     1418                out << '<script type="text/javascript">';
     1419                out << '  createUserDialog( "' + attrs.name + '" );'
     1420                out << '</script>';
     1421
     1422                out << '<input type="button" onClick="openUserDialog(\'' + attrs.name + '\' );" value="Add User">';
     1423        }
     1424
    13131425}
Note: See TracChangeset for help on using the changeset viewer.