Periodic merge upstream #1
@@ -82,26 +82,30 @@ $contentLayout['login'] = <<<'LOGIN'
 | 
			
		||||
LOGIN;
 | 
			
		||||
 | 
			
		||||
$contentLayout['manage'] = <<<'MANAGE'
 | 
			
		||||
		  <script src="misc/script.editable.table.js"></script>
 | 
			
		||||
		  <script src="misc/script.manage.js"></script>
 | 
			
		||||
          <span id="user"><span data-translation="span_loggedinas">Ingelogd als</span> %1$s --- [<a id="linklanguage-en" href="#" tabindex="700">EN</a> <a id="linklanguage-nl" class="current" href="#" tabindex="700">NL</a>] [<a href="#" tabindex="800" data-translation="link_logout">Log uit</a>]</span>
 | 
			
		||||
          <fieldset style="clear: both;">
 | 
			
		||||
            <legend>Beheer Gebruikers</legend>
 | 
			
		||||
            <ul>
 | 
			
		||||
              <li>
 | 
			
		||||
                <table id="tabletest">
 | 
			
		||||
                  <thead>
 | 
			
		||||
                    <tr>
 | 
			
		||||
                      <th>Username</th>
 | 
			
		||||
                      <th>Role</th>
 | 
			
		||||
                      <th>Sessions</th>
 | 
			
		||||
                    </tr>
 | 
			
		||||
                  </thead>
 | 
			
		||||
                  <tbody>
 | 
			
		||||
                    %2$s
 | 
			
		||||
                  </tbody>
 | 
			
		||||
                </table>
 | 
			
		||||
              </li>
 | 
			
		||||
              <li>
 | 
			
		||||
		        <button id="btnaliasadd" class="bttn-simple bttn-xs bttn-primary" tabindex="200" data-translation="button_add">voeg toe</button>
 | 
			
		||||
              </li>
 | 
			
		||||
              <li>
 | 
			
		||||
                <label id="labelallaliases" class="pre" for="allaliases" data-translation="label_allaliases">Alle aliassen:</label><output id="aliasstats">[--]</output>
 | 
			
		||||
                <select id="allaliases" size="10" multiple="multiple" tabindex="300">
 | 
			
		||||
                </select>
 | 
			
		||||
              </li>
 | 
			
		||||
              <li>
 | 
			
		||||
		        <button id="btnaliasdelete" class="bttn-simple bttn-xs bttn-primary" tabindex="400" data-translation="button_delete">verwijder</button>
 | 
			
		||||
              </li>
 | 
			
		||||
              <li>
 | 
			
		||||
				<button id="btnsync" class="bttn-simple bttn-xs bttn-primary" style="background-position: center;" tabindex="500" data-translation="button_sync">synchroniseer</button>
 | 
			
		||||
				<button id="btnsync" class="bttn-simple bttn-xs bttn-primary" tabindex="500" data-translation="button_sync">synchroniseer</button>
 | 
			
		||||
              </li>
 | 
			
		||||
            </ul>
 | 
			
		||||
          </fieldset>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
	error_reporting(E_ALL ^ E_NOTICE);
 | 
			
		||||
 | 
			
		||||
	include_once('../include/lucidAuth.functions.php');
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (!empty($_COOKIE['JWT'])) {
 | 
			
		||||
		$validateTokenResult = validateToken($_COOKIE['JWT']);
 | 
			
		||||
	}
 | 
			
		||||
@@ -10,9 +10,32 @@
 | 
			
		||||
	if ($validateTokenResult['status'] === "Success") {
 | 
			
		||||
		include_once('../include/lucidAuth.template.php');
 | 
			
		||||
 | 
			
		||||
		echo sprintf($pageLayout['full'], 
 | 
			
		||||
        try {
 | 
			
		||||
        	$allUsers = $pdoDB->query('
 | 
			
		||||
                SELECT User.Username, Role.Rolename, COUNT(DISTINCT SecureToken.Value) AS Sessions
 | 
			
		||||
		        FROM User
 | 
			
		||||
    		    LEFT JOIN Role
 | 
			
		||||
	    		    ON (User.RoleId=Role.Id)
 | 
			
		||||
                LEFT JOIN SecureToken
 | 
			
		||||
                    ON (User.Id=SecureToken.UserId)
 | 
			
		||||
    	    ')->fetchAll(PDO::FETCH_ASSOC);
 | 
			
		||||
        } catch (Exception $e) {
 | 
			
		||||
// Should really do some actual errorhandling here
 | 
			
		||||
            throw new Exception($e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    	foreach($allUsers as $row) {
 | 
			
		||||
            $tableRows[] = sprintf('<tr><td>%1$s</td><td>%2$s</td><td>%3$s</td></tr>',
 | 
			
		||||
                explode('\\', $row['Username'])[1],
 | 
			
		||||
                $row['Rolename'],
 | 
			
		||||
                $row['Sessions']
 | 
			
		||||
            );
 | 
			
		||||
    	}
 | 
			
		||||
 | 
			
		||||
		echo sprintf($pageLayout['full'],
 | 
			
		||||
			sprintf($contentLayout['manage'],
 | 
			
		||||
				$validateTokenResult['name']
 | 
			
		||||
				$validateTokenResult['name'],
 | 
			
		||||
                implode($tableRows)
 | 
			
		||||
			)
 | 
			
		||||
		);
 | 
			
		||||
	} else {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										131
									
								
								public/misc/script.editable.table.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								public/misc/script.editable.table.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
/*global $, window*/
 | 
			
		||||
$.fn.editableTableWidget = function (options) {
 | 
			
		||||
	'use strict';
 | 
			
		||||
	return $(this).each(function () {
 | 
			
		||||
		var buildDefaultOptions = function () {
 | 
			
		||||
				var opts = $.extend({}, $.fn.editableTableWidget.defaultOptions);
 | 
			
		||||
				opts.editor = opts.editor.clone();
 | 
			
		||||
				return opts;
 | 
			
		||||
			},
 | 
			
		||||
			activeOptions = $.extend(buildDefaultOptions(), options),
 | 
			
		||||
			ARROW_LEFT = 37, ARROW_UP = 38, ARROW_RIGHT = 39, ARROW_DOWN = 40, ENTER = 13, ESC = 27, TAB = 9,
 | 
			
		||||
			element = $(this),
 | 
			
		||||
			editor = activeOptions.editor.css('position', 'absolute').hide().appendTo(element.parent()),
 | 
			
		||||
			active,
 | 
			
		||||
			showEditor = function (select) {
 | 
			
		||||
				active = element.find('td:focus');
 | 
			
		||||
				if (active.length) {
 | 
			
		||||
					editor.val(active.text())
 | 
			
		||||
						.removeClass('error')
 | 
			
		||||
						.show()
 | 
			
		||||
						.offset(active.offset())
 | 
			
		||||
						.css(active.css(activeOptions.cloneProperties))
 | 
			
		||||
						.width(active.width())
 | 
			
		||||
						.height(active.height())
 | 
			
		||||
						.focus();
 | 
			
		||||
					if (select) {
 | 
			
		||||
						editor.select();
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			setActiveText = function () {
 | 
			
		||||
				var text = editor.val(),
 | 
			
		||||
					evt = $.Event('change'),
 | 
			
		||||
					originalContent;
 | 
			
		||||
				if (active.text() === text || editor.hasClass('error')) {
 | 
			
		||||
					return true;
 | 
			
		||||
				}
 | 
			
		||||
				originalContent = active.html();
 | 
			
		||||
				active.text(text).trigger(evt, text);
 | 
			
		||||
				if (evt.result === false) {
 | 
			
		||||
					active.html(originalContent);
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			movement = function (element, keycode) {
 | 
			
		||||
				if (keycode === ARROW_RIGHT) {
 | 
			
		||||
					return element.next('td');
 | 
			
		||||
				} else if (keycode === ARROW_LEFT) {
 | 
			
		||||
					return element.prev('td');
 | 
			
		||||
				} else if (keycode === ARROW_UP) {
 | 
			
		||||
					return element.parent().prev().children().eq(element.index());
 | 
			
		||||
				} else if (keycode === ARROW_DOWN) {
 | 
			
		||||
					return element.parent().next().children().eq(element.index());
 | 
			
		||||
				}
 | 
			
		||||
				return [];
 | 
			
		||||
			};
 | 
			
		||||
		editor.blur(function () {
 | 
			
		||||
			setActiveText();
 | 
			
		||||
			editor.hide();
 | 
			
		||||
		}).keydown(function (e) {
 | 
			
		||||
			if (e.which === ENTER) {
 | 
			
		||||
				setActiveText();
 | 
			
		||||
				editor.hide();
 | 
			
		||||
				active.focus();
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
				e.stopPropagation();
 | 
			
		||||
			} else if (e.which === ESC) {
 | 
			
		||||
				editor.val(active.text());
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
				e.stopPropagation();
 | 
			
		||||
				editor.hide();
 | 
			
		||||
				active.focus();
 | 
			
		||||
			} else if (e.which === TAB) {
 | 
			
		||||
				active.focus();
 | 
			
		||||
			} else if (this.selectionEnd - this.selectionStart === this.value.length) {
 | 
			
		||||
				var possibleMove = movement(active, e.which);
 | 
			
		||||
				if (possibleMove.length > 0) {
 | 
			
		||||
					possibleMove.focus();
 | 
			
		||||
					e.preventDefault();
 | 
			
		||||
					e.stopPropagation();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
		.on('input paste', function () {
 | 
			
		||||
			var evt = $.Event('validate');
 | 
			
		||||
			active.trigger(evt, editor.val());
 | 
			
		||||
			if (evt.result === false) {
 | 
			
		||||
				editor.addClass('error');
 | 
			
		||||
			} else {
 | 
			
		||||
				editor.removeClass('error');
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
		element.on('click keypress dblclick', showEditor)
 | 
			
		||||
		.css('cursor', 'pointer')
 | 
			
		||||
		.keydown(function (e) {
 | 
			
		||||
			var prevent = true,
 | 
			
		||||
				possibleMove = movement($(e.target), e.which);
 | 
			
		||||
			if (possibleMove.length > 0) {
 | 
			
		||||
				possibleMove.focus();
 | 
			
		||||
			} else if (e.which === ENTER) {
 | 
			
		||||
				showEditor(false);
 | 
			
		||||
			} else if (e.which === 17 || e.which === 91 || e.which === 93) {
 | 
			
		||||
				showEditor(true);
 | 
			
		||||
				prevent = false;
 | 
			
		||||
			} else {
 | 
			
		||||
				prevent = false;
 | 
			
		||||
			}
 | 
			
		||||
			if (prevent) {
 | 
			
		||||
				e.stopPropagation();
 | 
			
		||||
				e.preventDefault();
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		element.find('td').prop('tabindex', 1);
 | 
			
		||||
 | 
			
		||||
		$(window).on('resize', function () {
 | 
			
		||||
			if (editor.is(':visible')) {
 | 
			
		||||
				editor.offset(active.offset())
 | 
			
		||||
				.width(active.width())
 | 
			
		||||
				.height(active.height());
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
$.fn.editableTableWidget.defaultOptions = {
 | 
			
		||||
	cloneProperties: ['padding', 'padding-top', 'padding-bottom', 'padding-left', 'padding-right',
 | 
			
		||||
					  'text-align', 'font', 'font-size', 'font-family', 'font-weight',
 | 
			
		||||
					  'border', 'border-top', 'border-bottom', 'border-left', 'border-right'],
 | 
			
		||||
	editor: $('<input>')
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +19,7 @@ $(document).ready(function(){
 | 
			
		||||
			password: $('#password').val(),
 | 
			
		||||
			ref: $('#ref').val()
 | 
			
		||||
		})
 | 
			
		||||
		.done(function(data,status) {
 | 
			
		||||
		.done(function(data,_status) {
 | 
			
		||||
			if (data.Result === 'Success') {
 | 
			
		||||
				$('#btnlogin').css({
 | 
			
		||||
					'background':	'green url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaklEQVQ4jeXOMQ5AQBBG4T2BC4i76EWich7ncAKbqCRuodTqnMNTkFgJs3ZU4tXz/Rlj/hUQv8EpMAClFk9sjUAiHVcCnoFMwhZYgPYG575Xe46aIOyMdJx7ji9GwrEzUgOFCu8DkRp/qxU2BKCUyZR6ygAAAABJRU5ErkJggg==) no-repeat center',
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
$(document).ready(function(){
 | 
			
		||||
    $('#tabletest').editableTableWidget();
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										6
									
								
								public/misc/script.table.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								public/misc/script.table.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user