Code Duplication    Length = 91-91 lines in 4 locations

src/Api/Service/AliasGroupSetter.php 1 location

@@ 19-109 (lines=91) @@
16
 *
17
 * @author Addshore
18
 */
19
class AliasGroupSetter {
20
21
	/**
22
	 * @var WikibaseApi
23
	 */
24
	private $api;
25
26
	/**
27
	 * @param WikibaseApi $api
28
	 */
29
	public function __construct( WikibaseApi $api ) {
30
		$this->api = $api;
31
	}
32
33
	/**
34
	 * @since 0.2
35
	 *
36
	 * @param AliasGroup $aliasGroup
37
	 * @param EntityId|Item|Property|SiteLink $target
38
	 * @param EditInfo|null $editInfo
39
	 *
40
	 * @return bool
41
	 */
42
	public function set( AliasGroup $aliasGroup, $target, EditInfo $editInfo = null ) {
43
		$this->throwExceptionsOnBadTarget( $target );
44
45
		$params = $this->getTargetParamsFromTarget(
46
			$this->getEntityIdentifierFromTarget( $target )
47
		);
48
49
		$params['language'] = $aliasGroup->getLanguageCode();
50
		$params['set'] = implode( '|', $aliasGroup->getAliases() );
51
52
		$this->api->postRequest( 'wbsetaliases', $params, $editInfo );
53
		return true;
54
	}
55
56
	/**
57
	 * @param mixed $target
58
	 *
59
	 * @throws UnexpectedValueException
60
	 *
61
	 * @todo Fix duplicated code
62
	 */
63
	private function throwExceptionsOnBadTarget( $target ) {
64
		if ( !$target instanceof EntityId && !$target instanceof Item && !$target instanceof Property && !$target instanceof SiteLink ) {
65
			throw new UnexpectedValueException( '$target needs to be an EntityId, Item, Property or SiteLink' );
66
		}
67
		if ( ( $target instanceof Item || $target instanceof Property ) && $target->getId() === null ) {
68
			throw new UnexpectedValueException( '$target Entity object needs to have an Id set' );
69
		}
70
	}
71
72
	/**
73
	 * @param EntityId|Item|Property $target
74
	 *
75
	 * @throws UnexpectedValueException
76
	 * @return EntityId|SiteLink
77
	 *
78
	 * @todo Fix duplicated code
79
	 */
80
	private function getEntityIdentifierFromTarget( $target ) {
81
		if ( $target instanceof Item || $target instanceof Property ) {
82
			return $target->getId();
83
		} else {
84
			return $target;
85
		}
86
	}
87
88
	/**
89
	 * @param EntityId|SiteLink $target
90
	 *
91
	 * @throws UnexpectedValueException
92
	 * @return array
93
	 *
94
	 * @todo Fix duplicated code
95
	 */
96
	private function getTargetParamsFromTarget( $target ) {
97
		if ( $target instanceof EntityId ) {
98
			return [ 'id' => $target->getSerialization() ];
99
		} elseif ( $target instanceof SiteLink ) {
100
			return [
101
				'site' => $target->getSiteId(),
102
				'title' => $target->getPageName(),
103
			];
104
		} else {
105
			throw new UnexpectedValueException( '$target needs to be an EntityId or SiteLink' );
106
		}
107
	}
108
109
}
110

src/Api/Service/DescriptionSetter.php 1 location

@@ 19-109 (lines=91) @@
16
 *
17
 * @author Addshore
18
 */
19
class DescriptionSetter {
20
21
	/**
22
	 * @var WikibaseApi
23
	 */
24
	private $api;
25
26
	/**
27
	 * @param WikibaseApi $api
28
	 */
29
	public function __construct( WikibaseApi $api ) {
30
		$this->api = $api;
31
	}
32
33
	/**
34
	 * @since 0.2
35
	 *
36
	 * @param Term $description
37
	 * @param EntityId|Item|Property|SiteLink $target
38
	 * @param EditInfo|null $editInfo
39
	 *
40
	 * @return bool
41
	 */
42
	public function set( Term $description, $target, EditInfo $editInfo = null ) {
43
		$this->throwExceptionsOnBadTarget( $target );
44
45
		$params = $this->getTargetParamsFromTarget(
46
			$this->getEntityIdentifierFromTarget( $target )
47
		);
48
49
		$params['language'] = $description->getLanguageCode();
50
		$params['value'] = $description->getText();
51
52
		$this->api->postRequest( 'wbsetdescription', $params, $editInfo );
53
		return true;
54
	}
55
56
	/**
57
	 * @param mixed $target
58
	 *
59
	 * @throws UnexpectedValueException
60
	 *
61
	 * @todo Fix duplicated code
62
	 */
63
	private function throwExceptionsOnBadTarget( $target ) {
64
		if ( !$target instanceof EntityId && !$target instanceof Item && !$target instanceof Property && !$target instanceof SiteLink ) {
65
			throw new UnexpectedValueException( '$target needs to be an EntityId, Item, Property or SiteLink' );
66
		}
67
		if ( ( $target instanceof Item || $target instanceof Property ) && $target->getId() === null ) {
68
			throw new UnexpectedValueException( '$target Entity object needs to have an Id set' );
69
		}
70
	}
71
72
	/**
73
	 * @param EntityId|Item|Property $target
74
	 *
75
	 * @throws UnexpectedValueException
76
	 * @return EntityId|SiteLink
77
	 *
78
	 * @todo Fix duplicated code
79
	 */
80
	private function getEntityIdentifierFromTarget( $target ) {
81
		if ( $target instanceof Item || $target instanceof Property ) {
82
			return $target->getId();
83
		} else {
84
			return $target;
85
		}
86
	}
87
88
	/**
89
	 * @param EntityId|SiteLink $target
90
	 *
91
	 * @throws UnexpectedValueException
92
	 * @return array
93
	 *
94
	 * @todo Fix duplicated code
95
	 */
96
	private function getTargetParamsFromTarget( $target ) {
97
		if ( $target instanceof EntityId ) {
98
			return [ 'id' => $target->getSerialization() ];
99
		} elseif ( $target instanceof SiteLink ) {
100
			return [
101
				'site' => $target->getSiteId(),
102
				'title' => $target->getPageName(),
103
			];
104
		} else {
105
			throw new UnexpectedValueException( '$target needs to be an EntityId or SiteLink' );
106
		}
107
	}
108
109
}
110

src/Api/Service/LabelSetter.php 1 location

@@ 19-109 (lines=91) @@
16
 *
17
 * @author Addshore
18
 */
19
class LabelSetter {
20
21
	/**
22
	 * @var WikibaseApi
23
	 */
24
	private $api;
25
26
	/**
27
	 * @param WikibaseApi $api
28
	 */
29
	public function __construct( WikibaseApi $api ) {
30
		$this->api = $api;
31
	}
32
33
	/**
34
	 * @since 0.2
35
	 *
36
	 * @param Term $label
37
	 * @param EntityId|Item|Property|SiteLink $target
38
	 * @param EditInfo|null $editInfo
39
	 *
40
	 * @return bool
41
	 */
42
	public function set( Term $label, $target, EditInfo $editInfo = null ) {
43
		$this->throwExceptionsOnBadTarget( $target );
44
45
		$params = $this->getTargetParamsFromTarget(
46
			$this->getEntityIdentifierFromTarget( $target )
47
		);
48
49
		$params['language'] = $label->getLanguageCode();
50
		$params['value'] = $label->getText();
51
52
		$this->api->postRequest( 'wbsetlabel', $params, $editInfo );
53
		return true;
54
	}
55
56
	/**
57
	 * @param mixed $target
58
	 *
59
	 * @throws UnexpectedValueException
60
	 *
61
	 * @todo Fix duplicated code
62
	 */
63
	private function throwExceptionsOnBadTarget( $target ) {
64
		if ( !$target instanceof EntityId && !$target instanceof Item && !$target instanceof Property && !$target instanceof SiteLink ) {
65
			throw new UnexpectedValueException( '$target needs to be an EntityId, Item, Property or SiteLink' );
66
		}
67
		if ( ( $target instanceof Item || $target instanceof Property ) && $target->getId() === null ) {
68
			throw new UnexpectedValueException( '$target Entity object needs to have an Id set' );
69
		}
70
	}
71
72
	/**
73
	 * @param EntityId|Item|Property $target
74
	 *
75
	 * @throws UnexpectedValueException
76
	 * @return EntityId|SiteLink
77
	 *
78
	 * @todo Fix duplicated code
79
	 */
80
	private function getEntityIdentifierFromTarget( $target ) {
81
		if ( $target instanceof Item || $target instanceof Property ) {
82
			return $target->getId();
83
		} else {
84
			return $target;
85
		}
86
	}
87
88
	/**
89
	 * @param EntityId|SiteLink $target
90
	 *
91
	 * @throws UnexpectedValueException
92
	 * @return array
93
	 *
94
	 * @todo Fix duplicated code
95
	 */
96
	private function getTargetParamsFromTarget( $target ) {
97
		if ( $target instanceof EntityId ) {
98
			return [ 'id' => $target->getSerialization() ];
99
		} elseif ( $target instanceof SiteLink ) {
100
			return [
101
				'site' => $target->getSiteId(),
102
				'title' => $target->getPageName(),
103
			];
104
		} else {
105
			throw new UnexpectedValueException( '$target needs to be an EntityId or SiteLink' );
106
		}
107
	}
108
109
}
110

src/Api/Service/SiteLinkSetter.php 1 location

@@ 18-108 (lines=91) @@
15
 *
16
 * @author Addshore
17
 */
18
class SiteLinkSetter {
19
20
	/**
21
	 * @var WikibaseApi
22
	 */
23
	private $api;
24
25
	/**
26
	 * @param WikibaseApi $api
27
	 */
28
	public function __construct( WikibaseApi $api ) {
29
		$this->api = $api;
30
	}
31
32
	/**
33
	 * @since 0.2
34
	 *
35
	 * @param SiteLink $siteLink
36
	 * @param EntityId|Item|Property|SiteLink $target
37
	 * @param EditInfo|null $editInfo
38
	 *
39
	 * @return bool
40
	 */
41
	public function set( SiteLink $siteLink, $target, EditInfo $editInfo = null ) {
42
		$this->throwExceptionsOnBadTarget( $target );
43
44
		$params = $this->getTargetParamsFromTarget(
45
			$this->getEntityIdentifierFromTarget( $target )
46
		);
47
48
		$params['linksite'] = $siteLink->getSiteId();
49
		$params['linktitle'] = $siteLink->getPageName();
50
		$params['badges'] = implode( '|', $siteLink->getBadges() );
51
52
		$this->api->postRequest( 'wbsetsitelink', $params, $editInfo );
53
		return true;
54
	}
55
56
	/**
57
	 * @param mixed $target
58
	 *
59
	 * @throws UnexpectedValueException
60
	 *
61
	 * @todo Fix duplicated code
62
	 */
63
	private function throwExceptionsOnBadTarget( $target ) {
64
		if ( !$target instanceof EntityId && !$target instanceof Item && !$target instanceof Property && !$target instanceof SiteLink ) {
65
			throw new UnexpectedValueException( '$target needs to be an EntityId, Item, Property or SiteLink' );
66
		}
67
		if ( ( $target instanceof Item || $target instanceof Property ) && $target->getId() === null ) {
68
			throw new UnexpectedValueException( '$target Entity object needs to have an Id set' );
69
		}
70
	}
71
72
	/**
73
	 * @param EntityId|Item|Property $target
74
	 *
75
	 * @throws UnexpectedValueException
76
	 * @return EntityId|SiteLink
77
	 *
78
	 * @todo Fix duplicated code
79
	 */
80
	private function getEntityIdentifierFromTarget( $target ) {
81
		if ( $target instanceof Item || $target instanceof Property ) {
82
			return $target->getId();
83
		} else {
84
			return $target;
85
		}
86
	}
87
88
	/**
89
	 * @param EntityId|SiteLink $target
90
	 *
91
	 * @throws UnexpectedValueException
92
	 * @return array
93
	 *
94
	 * @todo Fix duplicated code
95
	 */
96
	private function getTargetParamsFromTarget( $target ) {
97
		if ( $target instanceof EntityId ) {
98
			return [ 'id' => $target->getSerialization() ];
99
		} elseif ( $target instanceof SiteLink ) {
100
			return [
101
				'site' => $target->getSiteId(),
102
				'title' => $target->getPageName(),
103
			];
104
		} else {
105
			throw new UnexpectedValueException( '$target needs to be an EntityId or SiteLink' );
106
		}
107
	}
108
}
109