@@ -51,9 +51,9 @@ private function saveProLang(array $item) {
5151 'name ' => $ yearGroup ['name ' ],
5252 ),
5353 array (
54- 'apiId ' => $ yearGroup ['id ' ],
55- 'position ' => $ yearGroup ['position ' ],
56- 'name ' => $ yearGroup ['name ' ],
54+ 'apiId ' => $ yearGroup ['id ' ] ?? null ,
55+ 'position ' => $ yearGroup ['position ' ] ?? null ,
56+ 'name ' => $ yearGroup ['name ' ] ?? null ,
5757 ));
5858
5959 $ updatedLang = ProLang::updateOrCreate (
@@ -118,12 +118,92 @@ private function getLanguages(int $page) {
118118 }
119119
120120 /**
121- * Execute the console command.
121+ * Add some languages like Phel missing in prolang api
122122 */
123+ private function addProLanguage () {
124+ $ langToAdd = array (
125+ // Data : https://phel-lang.org/ and preums itselft
126+ array (
127+ 'authors ' => array (),
128+ 'company ' => null ,
129+ 'id ' => uniqid ().'_Phel ' ,
130+ 'link ' => '' ,
131+ 'name ' => 'Phel ' ,
132+ 'predecessors ' => array (),
133+ 'yearGroup ' => array (
134+ 'name ' => '2020s ' ,
135+ ),
136+ 'years ' => array (2020 ),
137+ ),
138+ // Data : https://janet-lang.org/ and preums itselft
139+ array (
140+ 'authors ' => array (),
141+ 'company ' => null ,
142+ 'id ' => uniqid ().'_Janet ' ,
143+ 'link ' => '' ,
144+ 'name ' => 'Janet ' ,
145+ 'predecessors ' => array (),
146+ 'yearGroup ' => array (
147+ 'name ' => '2010s ' ,
148+ ),
149+ 'years ' => array (2017 ),
150+ ),
151+ );
152+
153+ foreach ($ langToAdd as $ item ) {
154+ $ this ->saveProLang ($ item );
155+ Log::info ('action=add_missing_lang, status=succes, lang= ' .$ item ['name ' ]);
156+ }
157+ }
158+
159+ /**
160+ * Add links between languages
161+ * - Some data are missing from prolang api
162+ * - Ex : Php is Hack's predecessors
163+ */
164+ private function updateLangFamily () {
165+ $ langFamilies = array (
166+ // Data: https://github.com/janet-lang/janet
167+ 'Janet ' => array ('C ' ),
168+ // Data : https://phel-lang.org/
169+ 'Phel ' => array ('PHP ' , 'Clojure ' , 'Janet ' , 'Lisp ' ),
170+ // https://en.wikipedia.org/wiki/PHP
171+ 'PHP ' => array ('C ' , 'C++ ' , 'Perl ' ),
172+ // Data : https://en.wikipedia.org/wiki/Hack_(programming_language)
173+ 'Hack ' => array ('PHP ' , 'OCaml ' , 'Java ' , 'Scala ' , 'Haskell ' , 'C# ' ),
174+ // Data : https://crystal-lang.org/ and https://en.wikipedia.org/wiki/Crystal_(programming_language)
175+ 'Crystal ' => array ('Ruby ' , 'Go ' ),
176+ // Data : https://en.wikipedia.org/wiki/Ruby_(programming_language)
177+ 'Ruby ' => array ('Ada ' , 'Eiffel ' , 'Lua ' , 'Dylan ' ),
178+ // Data : https://en.wikipedia.org/wiki/Dylan_(programming_language)
179+ 'Dylan ' => array ('ALGOL 60 ' , 'EuLisp ' ),
180+ // Data : https://en.wikipedia.org/wiki/Lasso_(programming_language)
181+ 'Lasso ' => array ('Dylan ' , 'Scala ' ),
182+ );
183+
184+ foreach ($ langFamilies as $ name => $ value ) {
185+ $ lang = ProLang::where ('name ' , $ name )->first ();
186+ if ($ lang ) {
187+ $ parents = ProLang::whereIn (
188+ 'name ' , $ value
189+ )->pluck ('id ' );
190+
191+ $ lang ->parents ()->sync ($ parents );
192+ $ lang ->save ();
193+
194+ Log::info ("action=save_lang, status=success, lang= $ name " );
195+ } else {
196+ Log::info ("action=save_lang, status=failed, reason=lang $ name not found " );
197+ }
198+ }
199+ }
200+
123201 public function handle () {
124202 Log::info ('action=load_prolang_command, status=started ' );
125203
126204 $ this ->getLanguages (1 );
205+ $ this ->addProLanguage ();
206+ $ this ->updateLangFamily ();
127207
128208 Log::info ('action=load_prolang_command, status=finished ' );
129209 }
0 commit comments