replaceDefaultThings( $website ); $website = $this->setScore( $website ); return $website; } catch( Exception $e ) { throw new RuntimeException( 'Cannot load the score file', 201 ); } } public function buildWebsite(): string { try { $website = file_get_contents( __DIR__ . '/website.html' ); $website = $this->replaceDefaultThings( $website ); $website = $this->setQuestions( $website ); return $website; } catch( Exception $e ) { if( ( $code = $e->getCode() ) === 202 || $code === 203 ) { throw new RuntimeException( $e->getMessage(), $code ); } throw new RuntimeException( 'Cannot load the website.html file', 201 ); } } private function replaceDefaultThings( $website ) { if( !isset( language::$lang_file[language::TITLE], language::$lang_file[language::MAIN_TITLE], language::$lang_file[language::DESCRIPTION], language::$lang_file[language::EXPLANATION], language::$lang_file[language::SCORE_FINISHED], language::$lang_file[language::PROJECT_DESCRIPTION], language::$lang_file[language::HELP_US], language::$lang_file[language::REQUEST_MORE], language::$lang_file[language::LANGUAGE_CHOOSE], language::$lang_file[language::JOIN_DISCORD] ) ) { throw new RuntimeException( 'Cannot load default langauge replacements', 202 ); } $website = str_replace( array( '[LANG]', '[TITLE]', '[MAIN_TITLE]', '[DESCRIPTION]', '[EXPLANATION]', '[SCORE_FINISHED]', '[PROJECT_DESCRIPTION]', '[HELP_US]', '[REQUEST_MORE]','[LANGUAGE_CHOOSE]', '[JOIN_DISCORD]' ), array( substr( language::$lang, 0, 2 ), language::$lang_file[language::TITLE], language::$lang_file[language::MAIN_TITLE], language::$lang_file[language::DESCRIPTION], language::$lang_file[language::EXPLANATION], language::$lang_file[language::SCORE_FINISHED], language::$lang_file[language::PROJECT_DESCRIPTION], language::$lang_file[language::HELP_US], language::$lang_file[language::REQUEST_MORE], language::$lang_file[language::LANGUAGE_CHOOSE], language::$lang_file[language::JOIN_DISCORD] ), $website ); $languages = ''; foreach( language::$languages as $code => $language ) { $languages .= <<$language HTML; } $website = str_replace( '[LANGUAGES]', $languages, $website ); return $website; } private function setQuestions( $website ) : string { if( !isset( language::$lang_file['questions'] ) ) { throw new RuntimeException( 'Error while reading the questions in langauge file', 203 ); } $questions = ''; foreach( language::$lang_file['questions'] as $number => $question ) { $questions .= << $question
CHECKBOX; } $form_start = << HTML; $submit = language::$lang_file[language::CALCULATE]; $form_end = << HTML; $questions = $form_start . $questions . $form_end; $website = str_replace( '[CONTENT]', $questions, $website ); return $website; } private function calculateScore() : int { $score = count( language::$lang_file['questions'] ); foreach( language::$lang_file['questions'] as $number => $question ) { if( isset( $_POST["question_$number"] ) && $_POST["question_$number"] === 'checked' ) { $score--; } } return $score; } private function setScore ( string $a_website ): string { $score = $this->calculateScore(); $html = <<
[SCORE_TITLE]

[SCORE_DESCRIPTION]

52
HTML; $html = str_replace( ['[SCORE_TITLE]', '[SCORE_DESCRIPTION]', '[SCORE_SHARE]', '[SCORE_SAVE]'], [language::$lang_file['SCORE_TITLE'], language::$lang_file['SCORE_DESCRIPTION'], language::$lang_file['SCORE_SHARE'], language::$lang_file['SCORE_SAVE']], $html ); $a_website = str_replace( '[CONTENT]', $html, $a_website ); return $a_website; } }