Code Duplication    Length = 18-18 lines in 4 locations

code/model/DNEnvironment.php 4 locations

@@ 305-322 (lines=18) @@
302
	 * @param Member|null $member
303
	 * @return boolean
304
	 */
305
	public function canDeploy($member = null) {
306
		if(!$member) {
307
			$member = Member::currentUser();
308
		}
309
		if(!$member) {
310
			return false;
311
		}
312
		// Must be logged in to check permissions
313
314
		if ($this->Usage === self::PRODUCTION || $this->Usage === self::UNSPECIFIED) {
315
			if ($this->Project()->allowed(DNRoot::ALLOW_PROD_DEPLOYMENT, $member)) return true;
316
		} else {
317
			if ($this->Project()->allowed(DNRoot::ALLOW_NON_PROD_DEPLOYMENT, $member)) return true;
318
		}
319
320
		return $this->Deployers()->byID($member->ID)
321
			|| $member->inGroups($this->DeployerGroups());
322
	}
323
324
	/**
325
	 * Provide reason why the user cannot deploy.
@@ 340-357 (lines=18) @@
337
	 * @param Member|null $member The {@link Member} object to test against. If null, uses Member::currentMember();
338
	 * @return boolean true if $member can restore, and false if they can't.
339
	 */
340
	public function canRestore($member = null) {
341
		if(!$member) {
342
			$member = Member::currentUser();
343
		}
344
		if(!$member) {
345
			return false;
346
		}
347
		// Must be logged in to check permissions
348
349
		if ($this->Usage === self::PRODUCTION || $this->Usage === self::UNSPECIFIED) {
350
			if ($this->Project()->allowed(DNRoot::ALLOW_PROD_SNAPSHOT, $member)) return true;
351
		} else {
352
			if ($this->Project()->allowed(DNRoot::ALLOW_NON_PROD_SNAPSHOT, $member)) return true;
353
		}
354
355
		return $this->CanRestoreMembers()->byID($member->ID)
356
			|| $member->inGroups($this->CanRestoreGroups());
357
	}
358
359
	/**
360
	 * Allows only selected {@link Member} objects to backup this {@link DNEnvironment} to a {@link DNDataArchive}
@@ 432-449 (lines=18) @@
429
	 * @param Member|null $member The {@link Member} object to test against. If null, uses Member::currentMember();
430
	 * @return boolean true if $member can download archives from this environment, false if they can't.
431
	 */
432
	public function canDownloadArchive($member = null) {
433
		if(!$member) {
434
			$member = Member::currentUser();
435
		}
436
		if(!$member) {
437
			return false;
438
		}
439
		// Must be logged in to check permissions
440
441
		if ($this->Usage === self::PRODUCTION || $this->Usage === self::UNSPECIFIED) {
442
			if ($this->Project()->allowed(DNRoot::ALLOW_PROD_SNAPSHOT, $member)) return true;
443
		} else {
444
			if ($this->Project()->allowed(DNRoot::ALLOW_NON_PROD_SNAPSHOT, $member)) return true;
445
		}
446
447
		return $this->ArchiveDownloaders()->byID($member->ID)
448
			|| $member->inGroups($this->ArchiveDownloaderGroups());
449
	}
450
451
	/**
452
	 * Allows only selected {@link Member} objects to delete {@link DNDataArchive} objects from this
@@ 458-475 (lines=18) @@
455
	 * @param Member|null $member The {@link Member} object to test against. If null, uses Member::currentMember();
456
	 * @return boolean true if $member can delete archives from this environment, false if they can't.
457
	 */
458
	public function canDeleteArchive($member = null) {
459
		if(!$member) {
460
			$member = Member::currentUser();
461
		}
462
		if(!$member) {
463
			return false;
464
		}
465
		// Must be logged in to check permissions
466
467
		if ($this->Usage === self::PRODUCTION || $this->Usage === self::UNSPECIFIED) {
468
			if ($this->Project()->allowed(DNRoot::ALLOW_PROD_SNAPSHOT, $member)) return true;
469
		} else {
470
			if ($this->Project()->allowed(DNRoot::ALLOW_NON_PROD_SNAPSHOT, $member)) return true;
471
		}
472
473
		return $this->ArchiveDeleters()->byID($member->ID)
474
			|| $member->inGroups($this->ArchiveDeleterGroups());
475
	}
476
	/**
477
	 * Get a string of groups/people that are allowed to deploy to this environment.
478
	 * Used in DNRoot_project.ss to list {@link Member}s who have permission to perform this action.