From 1f6cb785eec4a23ec19987aaa0bc8d4f6086d20c Mon Sep 17 00:00:00 2001 From: aB0t Date: Thu, 13 Jul 2023 12:31:27 +0200 Subject: [PATCH] update 2023-07-13 12:31:27 --- .../README.md | 6 +- .../code.php | 56 +++++++++++++-- .../code.power | 53 +++++++++++++-- .../settings.json | 14 +++- .../README.md | 24 ++++--- .../code.php | 68 ++++++++++++++++--- .../code.power | 68 ++++++++++++++++--- 7 files changed, 247 insertions(+), 42 deletions(-) diff --git a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/README.md b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/README.md index 879e9e1..9b485e3 100644 --- a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/README.md +++ b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/README.md @@ -11,11 +11,13 @@ ```uml @startuml class Response << (F,LightGreen) >> #Green { + # Translation $translation + # Chapter $chapter # Prompt $prompt # Load $load # Config $config # array $responses - + __construct(Prompt $prompt, Load $load, ...) + + __construct(Translation $translation, Chapter $chapter, ...) + get(?string $guid = null) : ?object } @@ -25,6 +27,8 @@ note right of Response::__construct since: 2.0.1 arguments: + Translation $translation + Chapter $chapter Prompt $prompt Load $load Config $config diff --git a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.php b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.php index 4b6e60d..76077c5 100644 --- a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.php +++ b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.php @@ -12,6 +12,9 @@ namespace VDM\Joomla\GetBible\Data; +use VDM\Joomla\GetBible\Data\Translation; +use VDM\Joomla\GetBible\Data\Chapter; +use VDM\Joomla\GetBible\Data\Prompt; use VDM\Joomla\GetBible\Database\Load; use VDM\Joomla\GetBible\Openai\Config; @@ -23,6 +26,22 @@ use VDM\Joomla\GetBible\Openai\Config; */ final class Response { + /** + * The Translation class + * + * @var Translation + * @since 2.0.1 + */ + protected Translation $translation; + + /** + * The Chapter class + * + * @var Chapter + * @since 2.0.1 + */ + protected Chapter $chapter; + /** * The Prompt class * @@ -58,14 +77,18 @@ final class Response /** * Constructor * - * @param Prompt $prompt The prompt object. - * @param Load $load The load object. - * @param Config $config The config object. + * @param Translation $translation The translation object. + * @param Chapter $chapter The chapter object. + * @param Prompt $prompt The prompt object. + * @param Load $load The load object. + * @param Config $config The config object. * * @since 2.0.1 */ - public function __construct(Prompt $prompt, Load $load, Config $config) + public function __construct(Translation $translation, Chapter $chapter, Prompt $prompt, Load $load, Config $config) { + $this->translation = $translation; + $this->chapter = $chapter; $this->prompt = $prompt; $this->load = $load; $this->config = $config; @@ -84,7 +107,7 @@ final class Response // get the cache behaviour $cache = $this->prompt->getCacheBehaviour(); - if (empty($cache)) + if (empty($cache) || ($cache != 1 && $cache != 2)) { return null; } @@ -103,6 +126,29 @@ final class Response $query = ['prompt' => $guid]; + // Basic Caching - Words/Language + if ($cache == 1) + { + // any empty string so cause no value to be returned + $query['language'] = $this->translation->getLanguage() ?? 'none__found'; + $query['selected_words'] = $this->chapter->getWordText() ?? 'none__found'; + } + // Advanced Caching - Verse/Contex + else + { + // any empty string so cause no value to be returned + $query['abbreviation'] = $this->translation->getAbbreviation() ?? 'none__found'; + $query['book'] = $this->chapter->getBookNumber() ?? 'none__found'; + $query['chapter'] = $this->chapter->getChapterNumber() ?? 'none__found'; + $query['verse'] = $this->chapter->getVerseNumber() ?? 'none__found'; + + // get the integration + $integration = $this->prompt->getIntegration(); + if ($integration == 1 || $integration == 3) + { + $query['words'] = $this->chapter->getWordNumber() ?? 'none__found'; + } + } $bucket = $this->load->items($query, 'open_ai_response'); if (is_array($bucket) && $bucket !== []) diff --git a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.power b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.power index 808cb3f..3e245c6 100644 --- a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.power +++ b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/code.power @@ -1,3 +1,19 @@ + /** + * The Translation class + * + * @var Translation + * @since 2.0.1 + */ + protected Translation $translation; + + /** + * The Chapter class + * + * @var Chapter + * @since 2.0.1 + */ + protected Chapter $chapter; + /** * The Prompt class * @@ -33,14 +49,18 @@ /** * Constructor * - * @param Prompt $prompt The prompt object. - * @param Load $load The load object. - * @param Config $config The config object. + * @param Translation $translation The translation object. + * @param Chapter $chapter The chapter object. + * @param Prompt $prompt The prompt object. + * @param Load $load The load object. + * @param Config $config The config object. * * @since 2.0.1 */ - public function __construct(Prompt $prompt, Load $load, Config $config) + public function __construct(Translation $translation, Chapter $chapter, Prompt $prompt, Load $load, Config $config) { + $this->translation = $translation; + $this->chapter = $chapter; $this->prompt = $prompt; $this->load = $load; $this->config = $config; @@ -59,7 +79,7 @@ // get the cache behaviour $cache = $this->prompt->getCacheBehaviour(); - if (empty($cache)) + if (empty($cache) || ($cache != 1 && $cache != 2)) { return null; } @@ -78,6 +98,29 @@ $query = ['prompt' => $guid]; + // Basic Caching - Words/Language + if ($cache == 1) + { + // any empty string so cause no value to be returned + $query['language'] = $this->translation->getLanguage() ?? 'none__found'; + $query['selected_words'] = $this->chapter->getWordText() ?? 'none__found'; + } + // Advanced Caching - Verse/Contex + else + { + // any empty string so cause no value to be returned + $query['abbreviation'] = $this->translation->getAbbreviation() ?? 'none__found'; + $query['book'] = $this->chapter->getBookNumber() ?? 'none__found'; + $query['chapter'] = $this->chapter->getChapterNumber() ?? 'none__found'; + $query['verse'] = $this->chapter->getVerseNumber() ?? 'none__found'; + + // get the integration + $integration = $this->prompt->getIntegration(); + if ($integration == 1 || $integration == 3) + { + $query['words'] = $this->chapter->getWordNumber() ?? 'none__found'; + } + } $bucket = $this->load->items($query, 'open_ai_response'); if (is_array($bucket) && $bucket !== []) diff --git a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/settings.json b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/settings.json index 70c787d..30ec97b 100644 --- a/src/44c15b17-e096-47c0-8769-42ea9b692cb2/settings.json +++ b/src/44c15b17-e096-47c0-8769-42ea9b692cb2/settings.json @@ -11,10 +11,22 @@ "type": "final class", "use_selection": { "use_selection0": { - "use": "c03b9c61-17d3-4774-a335-783903719f83", + "use": "c4098e1a-46dd-4d60-9277-b3668a09edc8", "as": "default" }, "use_selection1": { + "use": "4a4c786d-51f4-421a-aa61-262dfd071880", + "as": "default" + }, + "use_selection2": { + "use": "3f785d63-a592-463d-9f5f-b2b5a8edd561", + "as": "default" + }, + "use_selection3": { + "use": "c03b9c61-17d3-4774-a335-783903719f83", + "as": "default" + }, + "use_selection4": { "use": "3af7864b-f1f3-491e-b16f-0504f890086d", "as": "default" } diff --git a/src/4a4c786d-51f4-421a-aa61-262dfd071880/README.md b/src/4a4c786d-51f4-421a-aa61-262dfd071880/README.md index e487132..b9ae0ea 100644 --- a/src/4a4c786d-51f4-421a-aa61-262dfd071880/README.md +++ b/src/4a4c786d-51f4-421a-aa61-262dfd071880/README.md @@ -32,6 +32,7 @@ class Chapter << (F,LightGreen) >> #Green { - processVerses(?string $abbreviation, ?int $book, ...) : string - processVersesArray(?string $abbreviation, ?int $book, ...) : ?array - extractVerseNumbers(string $verseNumber) : array + - validateSelectedVerses(array $verseNumbers) : string - getTextFromVerses(array $verses, array $verseNumber) : array - getArrayFromVerses(array $verses, array $verseNumber) : array - getWordNumberArray(?string $abbreviation = null, ?int $book = null, ...) : ?array @@ -240,21 +241,28 @@ note right of Chapter::extractVerseNumbers return: array end note -note left of Chapter::getTextFromVerses +note left of Chapter::validateSelectedVerses + Validate that these verse numbers exist in chapter + + since: 2.0.1 + return: string +end note + +note right of Chapter::getTextFromVerses Get the verse text from the verses array based on the verse numbers since: 2.0.1 return: array end note -note right of Chapter::getArrayFromVerses +note left of Chapter::getArrayFromVerses Get the verses array based on the verse numbers since: 2.0.1 return: array end note -note left of Chapter::getWordNumberArray +note right of Chapter::getWordNumberArray Get the word number/s since: 2.0.1 @@ -266,35 +274,35 @@ note left of Chapter::getWordNumberArray ?int $chapter = null end note -note right of Chapter::splitAndTrim +note left of Chapter::splitAndTrim Split verse or words by '-' and trim each element. since: 2.0.1 return: array end note -note left of Chapter::buildWordNumberArray +note right of Chapter::buildWordNumberArray Build word number array from verse and words. since: 2.0.1 return: array end note -note right of Chapter::wordNumberArrayToString +note left of Chapter::wordNumberArrayToString Converts word number array to string. since: 2.0.1 return: string end note -note left of Chapter::buildWordArray +note right of Chapter::buildWordArray Build word array from verse and words. since: 2.0.1 return: array end note -note right of Chapter::wordArrayToString +note left of Chapter::wordArrayToString Converts word array to string. since: 2.0.1 diff --git a/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.php b/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.php index 6a371aa..a43b24b 100644 --- a/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.php +++ b/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.php @@ -196,26 +196,27 @@ final class Chapter return ''; } + $verse_bucket = []; if (strpos($verse, '-') !== false) { $verses = $this->splitAndTrim($verse); - $minVerse = min($verses); - $maxVerse = max($verses); + $min_verse = min($verses); + $max_verse = max($verses); - if ($minVerse == $maxVerse) + $verse_bucket[] = $min_verse; + if ($min_verse != $max_verse) { - $verse_number = $minVerse; - } - else - { - $verse_number = $minVerse . '-' . $maxVerse; + $verse_bucket[] = $max_verse; } } else { - $verse_number = trim($verse); + $verse_bucket[] = trim($verse); } + // validate that this chapter has these verses + $verse_number = $this->validateSelectedVerses($verse_bucket); + $this->get($abbreviation, $book, $chapter)->verse_number = $verse_number; return $verse_number; @@ -596,6 +597,44 @@ final class Chapter return [trim($verseNumber)]; } + /** + * Validate that these verse numbers exist in chapter + * + * @param array $verseNumbers The selected verse numbers + * + * @return string The the valid verse numbers or empty string + * @since 2.0.1 + */ + private function validateSelectedVerses(array $verseNumbers): string + { + $verses = $this->get()->verses ?? null; + + if (empty($verses) || !is_array($verses)) + { + return ''; + } + + $valid = []; + foreach ($verses as $verse) + { + if (isset($verseNumbers[0]) && $verse->verse == $verseNumbers[0]) + { + $valid[] = $verseNumbers[0]; + } + elseif (isset($verseNumbers[1]) && $verse->verse == $verseNumbers[1]) + { + $valid[] = $verseNumbers[1]; + } + } + + if ($valid !== []) + { + return implode('-', $valid); + } + + return ''; + } + /** * Get the verse text from the verses array based on the verse numbers * @@ -777,9 +816,16 @@ final class Chapter { $word_number = []; - foreach ($wordNumberArray as $verse => $words) + if (count($wordNumberArray) == 1) { - $word_number[] = $verse . ':' . implode(',', $words); + $word_number[] = implode(',', array_values($wordNumberArray)[0]); + } + else + { + foreach ($wordNumberArray as $verse => $words) + { + $word_number[] = $verse . ':' . implode(',', $words); + } } return implode(';', $word_number); diff --git a/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.power b/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.power index 531f65e..a73ee7e 100644 --- a/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.power +++ b/src/4a4c786d-51f4-421a-aa61-262dfd071880/code.power @@ -170,26 +170,27 @@ return ''; } + $verse_bucket = []; if (strpos($verse, '-') !== false) { $verses = $this->splitAndTrim($verse); - $minVerse = min($verses); - $maxVerse = max($verses); + $min_verse = min($verses); + $max_verse = max($verses); - if ($minVerse == $maxVerse) + $verse_bucket[] = $min_verse; + if ($min_verse != $max_verse) { - $verse_number = $minVerse; - } - else - { - $verse_number = $minVerse . '-' . $maxVerse; + $verse_bucket[] = $max_verse; } } else { - $verse_number = trim($verse); + $verse_bucket[] = trim($verse); } + // validate that this chapter has these verses + $verse_number = $this->validateSelectedVerses($verse_bucket); + $this->get($abbreviation, $book, $chapter)->verse_number = $verse_number; return $verse_number; @@ -570,6 +571,44 @@ return [trim($verseNumber)]; } + /** + * Validate that these verse numbers exist in chapter + * + * @param array $verseNumbers The selected verse numbers + * + * @return string The the valid verse numbers or empty string + * @since 2.0.1 + */ + private function validateSelectedVerses(array $verseNumbers): string + { + $verses = $this->get()->verses ?? null; + + if (empty($verses) || !is_array($verses)) + { + return ''; + } + + $valid = []; + foreach ($verses as $verse) + { + if (isset($verseNumbers[0]) && $verse->verse == $verseNumbers[0]) + { + $valid[] = $verseNumbers[0]; + } + elseif (isset($verseNumbers[1]) && $verse->verse == $verseNumbers[1]) + { + $valid[] = $verseNumbers[1]; + } + } + + if ($valid !== []) + { + return implode('-', $valid); + } + + return ''; + } + /** * Get the verse text from the verses array based on the verse numbers * @@ -751,9 +790,16 @@ { $word_number = []; - foreach ($wordNumberArray as $verse => $words) + if (count($wordNumberArray) == 1) { - $word_number[] = $verse . ':' . implode(',', $words); + $word_number[] = implode(',', array_values($wordNumberArray)[0]); + } + else + { + foreach ($wordNumberArray as $verse => $words) + { + $word_number[] = $verse . ':' . implode(',', $words); + } } return implode(';', $word_number);