44
55use APP \plugins \generic \codecheck \classes \Exceptions \ApiFetchException ;
66use APP \plugins \generic \codecheck \classes \Exceptions \NoMatchingIssuesFoundException ;
7- use APP \plugins \generic \codecheck \classes \DataStructures \UniqueArray ;
7+ use APP \plugins \generic \codecheck \classes \DataStructures \UniqueIdentifierArray ;
88use APP \plugins \generic \codecheck \classes \CodecheckRegister \CodecheckGithubRegisterApiClient ;
99use APP \plugins \generic \codecheck \classes \CodecheckRegister \CertificateIdentifier ;
1010use APP \plugins \generic \codecheck \classes \Log \CodecheckLogger ;
1111
1212class CertificateIdentifierList
1313{
14- private UniqueArray $ uniqueArray ;
14+ private UniqueIdentifierArray $ uniqueIdentifierArray ;
1515
1616 /**
17- * This initializes a new Certificate Identifier List with a new `UniqueArray `
17+ * This initializes a new Certificate Identifier List with a new `uniqueIdentifierArray `
1818 *
1919 * @return void
2020 */
2121 function __construct ()
2222 {
23- $ this ->uniqueArray = new UniqueArray ();
23+ $ this ->uniqueIdentifierArray = new UniqueIdentifierArray ();
2424 }
2525
2626 /**
@@ -30,22 +30,60 @@ function __construct()
3030 * @return CertificateIdentifierList Returns a new List containing all fetched Certificate Identifiers from GitHub
3131 */
3232 static function fromApi (
33- CodecheckGithubRegisterApiClient $ codecheckGithubRegisterApiClient
33+ CodecheckGithubRegisterApiClient $ codecheckGithubRegisterApiClient ,
34+ ?bool $ onlyNewestIdentifiers
3435 ): CertificateIdentifierList {
3536 $ newCertificateIdentifierList = new CertificateIdentifierList ();
3637
3738 // fetch API
3839 try {
39- $ codecheckGithubRegisterApiClient ->fetchIssues ();
40- } catch (ApiFetchException $ ae ) {
41- CodecheckLogger::error ($ ae ->getMessage ());
42- throw $ ae ;
43- } catch (NoMatchingIssuesFoundException $ me ) {
44- CodecheckLogger::error ($ me ->getMessage ());
45- throw $ me ;
40+ if ($ onlyNewestIdentifiers == true ) {
41+ $ codecheckGithubRegisterApiClient ->fetchNewestIssues ();
42+ } else {
43+ $ codecheckGithubRegisterApiClient ->fetchAllIssues ();
44+ }
45+ } catch (\Throwable $ e ) {
46+ CodecheckLogger::error ($ e ->getCode () . ": " . $ e ->getMessage ());
47+ throw $ e ;
4648 }
4749
48- foreach ($ codecheckGithubRegisterApiClient ->getIssues () as $ issue ) {
50+ return CertificateIdentifierList::createNewCertificateIdentifierList (
51+ $ codecheckGithubRegisterApiClient ->getIssues (),
52+ $ newCertificateIdentifierList
53+ );
54+ }
55+
56+ /**
57+ * Factory Method to create a new CertificateIdentifierList from a GitHub API fetch
58+ *
59+ * @param CodecheckGithubRegisterApiClient $codecheckGithubRegisterApiClient The APIParser for the GitHub Issues
60+ * @return CertificateIdentifierList Returns a new List containing all fetched Certificate Identifiers from GitHub
61+ */
62+ static function fromApiWithIdentifier (
63+ CodecheckGithubRegisterApiClient $ codecheckGithubRegisterApiClient ,
64+ CertificateIdentifier $ certificateIdentifier
65+ ): CertificateIdentifierList {
66+ $ newCertificateIdentifierList = new CertificateIdentifierList ();
67+
68+ // fetch API
69+ try {
70+ $ codecheckGithubRegisterApiClient ->fetchIssueByIdentifier ($ certificateIdentifier );
71+ } catch (\Throwable $ e ) {
72+ CodecheckLogger::error ($ e ->getCode () . ": " . $ e ->getMessage ());
73+ throw $ e ;
74+ }
75+
76+ return CertificateIdentifierList::createNewCertificateIdentifierList (
77+ $ codecheckGithubRegisterApiClient ->getIssues (),
78+ $ newCertificateIdentifierList
79+ );
80+ }
81+
82+ private static function createNewCertificateIdentifierList (
83+ array $ issues ,
84+ CertificateIdentifierList $ newCertificateIdentifierList
85+ ): CertificateIdentifierList {
86+ foreach ($ issues as $ issue ) {
4987 // raw identifier (can still have ranges of identifiers);
5088 $ rawIdentifier = CertificateIdentifierList::getRawIdentifier ($ issue ['title ' ]);
5189
@@ -56,7 +94,7 @@ static function fromApi(
5694 }
5795
5896 // append to all identifiers in new Register
59- $ newCertificateIdentifierList ->appendToCertificateIdList ($ rawIdentifier );
97+ $ newCertificateIdentifierList ->appendToCertificateIdList ($ rawIdentifier, $ issue );
6098 }
6199
62100 // return the new Register
@@ -98,10 +136,11 @@ public static function getRawIdentifier(string $title): ?string
98136 /**
99137 * Appends a raw Identifier to the list of Certificate Identifiers
100138 *
101- * @param string $rawidentifier The raw Identifier to be appended
139+ * @param string $rawIdentifier The raw Identifier to be appended
140+ * @param array $issue The GitHub Issue information of the raw Identifier to be appended
102141 * @return void
103142 */
104- public function appendToCertificateIdList (string $ rawIdentifier ): void
143+ public function appendToCertificateIdList (string $ rawIdentifier, array $ issue ): void
105144 {
106145 // list of certificate identifiers in range
107146 $ idRange = [];
@@ -111,42 +150,46 @@ public function appendToCertificateIdList(string $rawIdentifier): void
111150 // split into "fromIdStr" and "toIdStr"
112151 list ($ fromIdStr , $ toIdStr ) = explode ('/ ' , $ rawIdentifier );
113152
114- $ from_identifier = CertificateIdentifier::fromStr ($ fromIdStr );
115- $ to_identifier = CertificateIdentifier::fromStr ($ toIdStr );
153+ $ fromIdentifier = CertificateIdentifier::fromStr ($ fromIdStr );
154+ $ toIdentifier = CertificateIdentifier::fromStr ($ toIdStr );
116155
117156 // append to $idRange list
118- for ($ id_count = $ from_identifier ->getNumber (); $ id_count <= $ to_identifier ->getNumber (); $ id_count ++) {
119- $ new_identifier = new CertificateIdentifier ($ from_identifier ->getYear (), $ id_count );
157+ for ($ id_count = $ fromIdentifier ->getNumber (); $ id_count <= $ toIdentifier ->getNumber (); $ id_count ++) {
158+ $ newIdentifier = new CertificateIdentifier ($ fromIdentifier ->getYear (), $ id_count );
120159 // append new identifier
121- $ idRange [] = $ new_identifier ;
160+ $ idRange [] = [
161+ 'identifier ' => $ newIdentifier ,
162+ 'issueUrl ' => $ issue ['html_url ' ],
163+ 'issueNumber ' => $ issue ['number ' ]
164+ ];
122165 }
123166 }
124167 // if it isn't a list then just append on identifier
125168 else {
126- $ new_identifier = CertificateIdentifier::fromStr ($ rawIdentifier );
127- $ idRange [] = $ new_identifier ;
169+ $ newIdentifier = CertificateIdentifier::fromStr ($ rawIdentifier );
170+ $ idRange [] = [
171+ 'identifier ' => $ newIdentifier ,
172+ 'issueUrl ' => $ issue ['html_url ' ],
173+ 'issueNumber ' => $ issue ['number ' ]
174+ ];
128175 }
129176
130177 // append to all certificate identifiers
131- foreach ($ idRange as $ identifier ) {
132- if (!$ this ->uniqueArray ->contains ($ identifier )) {
133- $ this ->uniqueArray ->add ($ identifier );
134- }
135- }
178+ $ this ->uniqueIdentifierArray ->addArray ($ idRange );
136179 }
137180
138181 /**
139182 * Sorts the Certificate Identifier List ascending
140183 */
141184 public function sortAsc (): void
142185 {
143- $ this ->uniqueArray ->sort (function ($ a , $ b ) {
186+ $ this ->uniqueIdentifierArray ->sort (function ($ a , $ b ) {
144187 // First, compare year
145- if ($ a ->getYear () !== $ b ->getYear ()) {
146- return $ a ->getYear () <=> $ b ->getYear ();
188+ if ($ a[ ' identifier ' ] ->getYear () !== $ b[ ' identifier ' ] ->getYear ()) {
189+ return $ a[ ' identifier ' ] ->getYear () <=> $ b[ ' identifier ' ] ->getYear ();
147190 }
148191 // If years are equal, compare ID
149- return $ a ->getNumber () <=> $ b ->getNumber ();
192+ return $ a[ ' identifier ' ] ->getNumber () <=> $ b[ ' identifier ' ] ->getNumber ();
150193 });
151194 }
152195
@@ -155,13 +198,13 @@ public function sortAsc(): void
155198 */
156199 public function sortDesc (): void
157200 {
158- $ this ->uniqueArray ->sort (function ($ a , $ b ) {
201+ $ this ->uniqueIdentifierArray ->sort (function ($ a , $ b ) {
159202 // First, compare year descending
160- if ($ a ->getYear () !== $ b ->getYear ()) {
161- return $ b ->getYear () <=> $ a ->getYear ();
203+ if ($ a[ ' identifier ' ] ->getYear () !== $ b[ ' identifier ' ] ->getYear ()) {
204+ return $ b[ ' identifier ' ] ->getYear () <=> $ a[ ' identifier ' ] ->getYear ();
162205 }
163206 // If years are equal, compare ID descending
164- return $ b ->getNumber () <=> $ a ->getNumber ();
207+ return $ b[ ' identifier ' ] ->getNumber () <=> $ a[ ' identifier ' ] ->getNumber ();
165208 });
166209 }
167210
@@ -172,7 +215,7 @@ public function sortDesc(): void
172215 */
173216 public function getNumberOfIdentifiers (): int
174217 {
175- return $ this ->uniqueArray ->count ();
218+ return $ this ->uniqueIdentifierArray ->count ();
176219 }
177220
178221 /**
@@ -184,7 +227,7 @@ public function getNewestIdentifier(): CertificateIdentifier
184227 {
185228 $ this ->sortDesc ();
186229 // get first element of sort descending -> newest element
187- return $ this ->uniqueArray ->at (0 );
230+ return $ this ->uniqueIdentifierArray ->at (0 )[ ' identifier ' ] ;
188231 }
189232
190233 /**
@@ -194,10 +237,21 @@ public function getNewestIdentifier(): CertificateIdentifier
194237 */
195238 public function toStr (): string
196239 {
197- $ return_str = "Certificate Identifiers: \n" ;
198- foreach ($ this ->uniqueArray ->toArray () as $ identifier ) {
199- $ return_str .= $ identifier ->toStr () . "\n" ;
240+ $ returnStr = "Certificate Identifiers: \n" ;
241+ foreach ($ this ->uniqueIdentifierArray ->toArray () as $ identifierInformation ) {
242+ $ returnStr .= $ identifierInformation [ ' identifier ' ] ->toStr () . "\n" ;
200243 }
201- return $ return_str ;
244+ return $ returnStr ;
245+ }
246+
247+ public function getIssueInformationByIdentifier (CertificateIdentifier $ identifier ): ?array
248+ {
249+ foreach ($ this ->uniqueIdentifierArray ->toArray () as $ identifierInformation ) {
250+ if ($ identifierInformation ['identifier ' ]->toStr () == $ identifier ->toStr ()){
251+ return $ identifierInformation ;
252+ }
253+ }
254+
255+ return null ;
202256 }
203257}
0 commit comments