From b1be9b2010a8df17e2d93b750aa0f26aa9890f8e Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 5 Apr 2016 11:50:04 +0200 Subject: [PATCH] MDL-53709 wiki: Return content size if includecontent=0 --- mod/wiki/classes/external.php | 28 ++++++++++++++++++++-------- mod/wiki/tests/externallib_test.php | 15 ++++++++++----- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/mod/wiki/classes/external.php b/mod/wiki/classes/external.php index 767a6624048..a142b85bc52 100644 --- a/mod/wiki/classes/external.php +++ b/mod/wiki/classes/external.php @@ -537,16 +537,26 @@ class mod_wiki_external extends external_api { 'firstpage' => $page->id == $firstpage->id ); - if ($options['includecontent']) { - // Refresh page cached content if needed. - if ($page->timerendered + WIKI_REFRESH_CACHE_TIME < time()) { - if ($content = wiki_refresh_cachedcontent($page)) { - $page = $content['page']; - } + // Refresh page cached content if needed. + if ($page->timerendered + WIKI_REFRESH_CACHE_TIME < time()) { + if ($content = wiki_refresh_cachedcontent($page)) { + $page = $content['page']; } + } + list($cachedcontent, $contentformat) = external_format_text( + $page->cachedcontent, FORMAT_HTML, $context->id, 'mod_wiki', 'attachments', $subwiki->id); - list($retpage['cachedcontent'], $retpage['contentformat']) = external_format_text( - $page->cachedcontent, FORMAT_HTML, $context->id, 'mod_wiki', 'attachments', $subwiki->id); + if ($options['includecontent']) { + // Return the page content. + $retpage['cachedcontent'] = $cachedcontent; + $retpage['contentformat'] = $contentformat; + } else { + // Return the size of the content. + if (function_exists('mb_strlen') && ((int)ini_get('mbstring.func_overload') & 2)) { + $retpage['contentsize'] = mb_strlen($cachedcontent, '8bit'); + } else { + $retpage['contentsize'] = strlen($cachedcontent); + } } $returnedpages[] = $retpage; @@ -586,6 +596,8 @@ class mod_wiki_external extends external_api { 'firstpage' => new external_value(PARAM_BOOL, 'True if it\'s the first page.'), 'cachedcontent' => new external_value(PARAM_RAW, 'Page contents.', VALUE_OPTIONAL), 'contentformat' => new external_format_value('cachedcontent', VALUE_OPTIONAL), + 'contentsize' => new external_value(PARAM_INT, 'Size of page contents in bytes (doesn\'t include'. + ' size of attached files).', VALUE_OPTIONAL), ), 'Pages' ) ), diff --git a/mod/wiki/tests/externallib_test.php b/mod/wiki/tests/externallib_test.php index 31e24be61e8..3098ff09359 100644 --- a/mod/wiki/tests/externallib_test.php +++ b/mod/wiki/tests/externallib_test.php @@ -629,11 +629,16 @@ class mod_wiki_external_testcase extends externallib_advanced_testcase { $result = external_api::clean_returnvalue(mod_wiki_external::get_subwiki_pages_returns(), $result); $this->assertEquals($expectedpages, $result['pages']); - // Check that WS doesn't return page content if includecontent is false. - unset($expectedpages[0]['cachedcontent']); - unset($expectedpages[0]['contentformat']); - unset($expectedpages[1]['cachedcontent']); - unset($expectedpages[1]['contentformat']); + // Check that WS doesn't return page content if includecontent is false, it returns the size instead. + foreach ($expectedpages as $i => $expectedpage) { + if (function_exists('mb_strlen') && ((int)ini_get('mbstring.func_overload') & 2)) { + $expectedpages[$i]['contentsize'] = mb_strlen($expectedpages[$i]['cachedcontent'], '8bit'); + } else { + $expectedpages[$i]['contentsize'] = strlen($expectedpages[$i]['cachedcontent']); + } + unset($expectedpages[$i]['cachedcontent']); + unset($expectedpages[$i]['contentformat']); + } $result = mod_wiki_external::get_subwiki_pages($this->wiki->id, 0, 0, array('sortby' => 'id', 'includecontent' => 0)); $result = external_api::clean_returnvalue(mod_wiki_external::get_subwiki_pages_returns(), $result); $this->assertEquals($expectedpages, $result['pages']);