View | Details | Raw Unified | Return to bug 41752 | Differences between
and this patch

Collapse All | Expand All

(-)a/ucs-school-umc-computerroom/umc/js/computerroom.js (-22 / +4 lines)
 Lines 261-267   define([ Link Here 
261
				isMultiAction: true,
261
				isMultiAction: true,
262
				enablingMode: "some",
262
				enablingMode: "some",
263
				canExecute: checkUCC('lockInput', lang.hitch(this, function(item) {
263
				canExecute: checkUCC('lockInput', lang.hitch(this, function(item) {
264
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock;
264
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock[0] === false;
265
				})),
265
				})),
266
				callback: lang.hitch(this, '_lockInput', true)
266
				callback: lang.hitch(this, '_lockInput', true)
267
			}, {
267
			}, {
 Lines 271-277   define([ Link Here 
271
				isMultiAction: true,
271
				isMultiAction: true,
272
				enablingMode: "some",
272
				enablingMode: "some",
273
				canExecute: checkUCC('unlockInput', lang.hitch(this, function(item) {
273
				canExecute: checkUCC('unlockInput', lang.hitch(this, function(item) {
274
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock;
274
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.InputLock[0] === true;
275
				})),
275
				})),
276
				callback: lang.hitch(this, '_lockInput', false)
276
				callback: lang.hitch(this, '_lockInput', false)
277
			}, {
277
			}, {
 Lines 292-298   define([ Link Here 
292
				isMultiAction: true,
292
				isMultiAction: true,
293
				enablingMode: "some",
293
				enablingMode: "some",
294
				canExecute: checkUCC('ScreenLock', lang.hitch(this, function(item) {
294
				canExecute: checkUCC('ScreenLock', lang.hitch(this, function(item) {
295
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false);
295
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.ScreenLock[0] === false;
296
				})),
296
				})),
297
				callback: lang.hitch(this, '_lockScreen', true)
297
				callback: lang.hitch(this, '_lockScreen', true)
298
			}, {
298
			}, {
 Lines 303-309   define([ Link Here 
303
				isMultiAction: true,
303
				isMultiAction: true,
304
				enablingMode: "some",
304
				enablingMode: "some",
305
				canExecute: checkUCC('ScreenUnLock', lang.hitch(this, function(item) {
305
				canExecute: checkUCC('ScreenUnLock', lang.hitch(this, function(item) {
306
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false);
306
					return !this._demo.running && isConnected(item) && item.user && item.user[0] && (!item.teacher || item.teacher[0] === false) && item.ScreenLock[0] === true;
307
				})),
307
				})),
308
				callback: lang.hitch(this, '_lockScreen', false)
308
				callback: lang.hitch(this, '_lockScreen', false)
309
			}];
309
			}];
 Lines 422-436   define([ Link Here 
422
422
423
		_lockInput: function(lock, ids, items) {
423
		_lockInput: function(lock, ids, items) {
424
			array.forEach(items, lang.hitch(this, function(comp) {
424
			array.forEach(items, lang.hitch(this, function(comp) {
425
				if (comp.connection[0] != 'connected' || // not connected
426
					!comp.user || !comp.user[0] || // no user logged on
427
					(comp.teacher && comp.teacher[0] === true) || // teacher logged in
428
					comp.InputLock[0] === null || // unclear status
429
					comp.InputLock[0] === lock // already locked/unlocked
430
				) {
431
					// ignore them
432
					return;
433
				}
434
				this.umcpCommand('computerroom/lock', {
425
				this.umcpCommand('computerroom/lock', {
435
					computer: comp.id[0],
426
					computer: comp.id[0],
436
					device: 'input',
427
					device: 'input',
 Lines 443-457   define([ Link Here 
443
434
444
		_lockScreen: function(lock, ids, items) {
435
		_lockScreen: function(lock, ids, items) {
445
			array.forEach(items, lang.hitch(this, function(comp) {
436
			array.forEach(items, lang.hitch(this, function(comp) {
446
				if (comp.connection[0] != 'connected' || // not connected
447
					!comp.user || !comp.user[0] || // no user logged on
448
					(comp.teacher && comp.teacher[0] === true) || // teacher logged in
449
					comp.ScreenLock[0] === null || // unclear status
450
					comp.ScreenLock[0] === lock // already locked/unlocked
451
				) {
452
					// ignore them
453
					return;
454
				}
455
				this.umcpCommand('computerroom/lock', {
437
				this.umcpCommand('computerroom/lock', {
456
					computer: comp.id[0],
438
					computer: comp.id[0],
457
					device: 'screen',
439
					device: 'screen',
(-)a/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py (-1 / +1 lines)
 Lines 450-456   def update(self, request, ldap_user_read=None): Link Here 
450
		if not self._italc.school or not self._italc.room:
450
		if not self._italc.school or not self._italc.room:
451
			raise UMC_Error('no room selected')
451
			raise UMC_Error('no room selected')
452
452
453
		computers = [computer.dict for computer in self._italc.values() if computer.hasChanged]
453
		computers = self._italc.query()
454
		result = {'computers': computers}
454
		result = {'computers': computers}
455
455
456
		userDN = _getRoomOwner(self._italc.roomDN)
456
		userDN = _getRoomOwner(self._italc.roomDN)
(-)a/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py (-15 / +31 lines)
 Lines 183-189   def isInitialized(self): Link Here 
183
	def hasChanged(self):
183
	def hasChanged(self):
184
		self.lock()
184
		self.lock()
185
		diff = self._has_changed
185
		diff = self._has_changed
186
		self._has_changed = False
187
		self._old = copy.deepcopy(self._current)
186
		self._old = copy.deepcopy(self._current)
188
		self.unlock()
187
		self.unlock()
189
		return diff
188
		return diff
 Lines 373-387   def stop(self): Link Here 
373
372
374
	@property
373
	@property
375
	def dict(self):
374
	def dict(self):
376
		item = {'id': self.name,
375
		item = {
377
				 'name': self.name,
376
			'id': self.name,
378
				 'user': self.user.current,
377
			'name': self.name,
379
				 'teacher': self.isTeacher,
378
			'user': self.user.current,
380
				 'connection': self.state.current,
379
			'teacher': self.isTeacher,
381
				 'description': self.description,
380
			'connection': self.state.current,
382
				 'ip': self.ipAddress,
381
			'description': self.description,
383
				 'mac': self.macAddress,
382
			'ip': self.ipAddress,
384
				 'objectType': self.objectType}
383
			'mac': self.macAddress,
384
			'objectType': self.objectType
385
		}
385
		item.update(self.flagsDict)
386
		item.update(self.flagsDict)
386
		return item
387
		return item
387
388
 Lines 390-395   def hasChanged(self): Link Here 
390
		states = (self.state, self.flags, self.user, self.teacher)
391
		states = (self.state, self.flags, self.user, self.teacher)
391
		return any(state.hasChanged for state in states)
392
		return any(state.hasChanged for state in states)
392
393
394
	def reset_has_changed(self):
395
		states = (self.state, self.flags, self.user, self.teacher)
396
		for state in states:
397
			state._has_changed = False
398
393
	# UDM properties
399
	# UDM properties
394
	@property
400
	@property
395
	def name(self):
401
	def name(self):
 Lines 435-465   def description(self): Link Here 
435
441
436
	@property
442
	@property
437
	def screenLock(self):
443
	def screenLock(self):
438
		if not self._core or self._core.slaveStateFlags() == 0:
444
		if not self._core:
439
			return None
445
			return None
440
		return self._core.isScreenLockRunning()
446
		return self._core.isScreenLockRunning()
441
447
442
	@property
448
	@property
443
	def inputLock(self):
449
	def inputLock(self):
444
		if not self._core or self._core.slaveStateFlags() == 0:
450
		if not self._core:
445
			return None
451
			return None
446
		return self._core.isInputLockRunning()
452
		return self._core.isInputLockRunning()
447
453
448
	@property
454
	@property
449
	def demoServer(self):
455
	def demoServer(self):
450
		if not self._core or self._core.slaveStateFlags() == 0:
456
		if not self._core:
451
			return None
457
			return None
452
		return self._core.isDemoServerRunning()
458
		return self._core.isDemoServerRunning()
453
459
454
	@property
460
	@property
455
	def demoClient(self):
461
	def demoClient(self):
456
		if not self._core or self._core.slaveStateFlags() == 0:
462
		if not self._core:
457
			return None
463
			return None
458
		return self._core.isDemoClientRunning()
464
		return self._core.isDemoClientRunning()
459
465
460
	@property
466
	@property
461
	def messageBox(self):
467
	def messageBox(self):
462
		if not self._core or self._core.slaveStateFlags() == 0:
468
		if not self._core:
463
			return None
469
			return None
464
		return self._core.isMessageBoxRunning()
470
		return self._core.isMessageBoxRunning()
465
471
 Lines 612-617   def logOut(self): Link Here 
612
			return
618
			return
613
		self._core.logoutUser()
619
		self._core.logoutUser()
614
620
621
	def __repr__(self):
622
		return '<%s(%s)>' % (type(self).__name__, self.ipAddress,)
623
615
624
616
class ITALC_Manager(dict, notifier.signals.Provider):
625
class ITALC_Manager(dict, notifier.signals.Provider):
617
	SCHOOL = None
626
	SCHOOL = None
 Lines 745-747   def stopDemo(self): Link Here 
745
			self.demoServer.stopDemoServer()
754
			self.demoServer.stopDemoServer()
746
		for client in self.demoClients:
755
		for client in self.demoClients:
747
			client.stopDemoClient()
756
			client.stopDemoClient()
757
758
	def query(self):
759
		try:
760
			return [computer.dict for computer in self.values() if computer.hasChanged]
761
		finally:
762
			for computer in self.values():
763
				computer.reset_has_changed()

Return to bug 41752