/** * Returns the text statistics for an article. * * @param string $articleId * @param string $template * * @return TextStatisticsModel */ public function getTextStatistics($articleId = '', $wpm = null, $readingTimeTemplate = null) { if (!isset($this->articlesData[$articleId])) { return null; } $articleData =& $this->getArticleDataById($articleId); $wordCount = Text::wordCount($articleData['text']); $wpm = $wpm ?: craft()->config->get('wordsPerMinute', 'textStatistics'); // Calculate times in seconds $textReadingTime = $wordCount / $wpm * 60; $additionalTime = $articleData['additionalTime']; $totalTime = ceil($textReadingTime + $additionalTime); $readingTime = $this->getDateIntervalFromSeconds($totalTime); $readingTimeMinutes = ceil($totalTime / 60); // Render Twig template for the readingTimeString $variables = ['iv' => $readingTime, 'min' => $readingTimeMinutes]; $template = $readingTimeTemplate ?: craft()->config->get('readingTimeTemplate', 'textStatistics'); $readingTimeString = craft()->templates->renderString($template, $variables); // Populate Statistics model $model = new TextStatisticsModel(); $model->textLength = Text::textLength($articleData['text']); $model->letterCount = Text::letterCount($articleData['text']); $model->syllableCount = Syllables::syllableCount($articleData['text']); $model->wordCount = $wordCount; $model->sentenceCount = Text::sentenceCount($articleData['text']); $model->readingTime = $readingTime; $model->readingTimeMinutes = $readingTimeMinutes; $model->readingTimeString = $readingTimeString; $textStatistics = $this->getTextStatisticsClass(); $model->gunningFog = $textStatistics->gunningFogScore($articleData['text']); $model->fleschKincaid = $textStatistics->fleschKincaidReadingEase($articleData['text']); if (!$model->validate()) { throw new Exception('There was an error while generating the Text Statistics.'); } return $model; }