diff --git a/app/controllers/course/wiki.php b/app/controllers/course/wiki.php index 738d0e7db5a2126d9c7a415271d4735c42604d08..567e2853e99cdda93c6df510c5049a375e23c6f9 100644 --- a/app/controllers/course/wiki.php +++ b/app/controllers/course/wiki.php @@ -142,12 +142,21 @@ class Course_WikiController extends AuthenticatedController Icon::create('settings'), ['data-dialog' => 'width=700'] ); - $action_menu->addButton( - 'delete', - _('Seite löschen'), - Icon::create('trash'), - ['data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?'), 'form' => 'delete_page'] - ); + if (count($this->page->versions) > 0) { + $action_menu->addLink( + $this->ask_deletingURL($this->page), + _('Seite / Version löschen'), + Icon::create('trash'), + ['data-dialog' => 'size=auto'] + ); + } else { + $action_menu->addButton( + 'delete', + _('Seite löschen'), + Icon::create('trash'), + ['data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?'), 'form' => 'delete_page'] + ); + } } $action_menu->addLink( '#', @@ -256,7 +265,10 @@ class Course_WikiController extends AuthenticatedController "[[ " . $values['name'], $p2['content'] ); - $p2->store(); + if ($p2->isDirty()) { + $p2['user_id'] = User::findCurrent()->id; + $p2->store(); + } } })->validate(); if (Request::isPost()) { @@ -272,9 +284,17 @@ class Course_WikiController extends AuthenticatedController $this->render_form($this->form); } + public function ask_deleting_action(WikiPage $page) + { + if (!$page->isEditable()) { + throw new AccessDeniedException(); + } + PageLayout::setTitle(_('Was genau soll gelöscht werden?')); + } + public function delete_action(WikiPage $page) { - if (!Request::isPost() || !CSRFProtection::verifyRequest()) { + if (!Request::isPost() || !$page->isEditable() || !CSRFProtection::verifyRequest()) { throw new AccessDeniedException(); } $name = $page->name; @@ -283,6 +303,38 @@ class Course_WikiController extends AuthenticatedController $this->redirect($this->allpagesURL()); } + public function deleteversion_action(WikiPage $page, $version_id = null) + { + if (!Request::isPost() || !$page->isEditable() || !CSRFProtection::verifyRequest()) { + throw new AccessDeniedException(); + } + if ($version_id === null) { + $version = $page->versions[0]; + if ($version) { + $page['name'] = $version['name']; + $page['content'] = $version['content']; + $page['user_id'] = $version['user_id']; + $page['chdate'] = $version['mkdate']; + $page->store(); + $version->delete(); + } else { + $page->delete(); + } + } else { + $version = WikiVersion::find($version_id); + if ($version['page_id'] === $page->id) { + $version->delete(); + } + } + PageLayout::postSuccess(_('Version wurde gelöscht.')); + if (Request::get('redirect_to') === 'page') { + $this->redirect($this->page($page)); + } else { + $this->redirect($this->history($page)); + } + + } + public function allpages_action() { $this->pages = WikiPage::findBySQL( @@ -535,8 +587,11 @@ class Course_WikiController extends AuthenticatedController } $page->content = \Studip\Markup::markAsHtml(trim(Request::get('content'))); - $page->store(); $user = User::findCurrent(); + if ($page->isDirty()) { + $page['user_id'] = $user->id; + $page->store(); + } $pageData = [ 'page_id' => $page->id, 'user_id' => $user->id @@ -774,6 +829,10 @@ class Course_WikiController extends AuthenticatedController 'type' => 'no', 'mapper' => function () { return $this->range->id; } ], + 'user_id' => [ + 'type' => 'no', + 'mapper' => function () { return User::findCurrent()->id; } + ], 'name' => [ 'required' => true, 'label' => _('Name der Seite'), @@ -828,7 +887,10 @@ class Course_WikiController extends AuthenticatedController '[[ ' . $values['name'] . ' ]]', $page->content ); - $page->store(); + if ($page->isDirty()) { + $page['user_id'] = User::findCurrent()->id; + $page->store(); + } } } } diff --git a/app/controllers/jsupdater.php b/app/controllers/jsupdater.php index 319edaaac9120c10e1f2fb7d625725510ff96f1d..a5425f9640fc70250dd5adda29566a9b2849c5cb 100644 --- a/app/controllers/jsupdater.php +++ b/app/controllers/jsupdater.php @@ -299,7 +299,10 @@ class JsupdaterController extends AuthenticatedController $page->content = \Studip\Markup::markAsHtml( $pageInfo['wiki_editor_status']['page_content'] ); - $page->store(); + if ($page->isDirty()) { + $page['user_id'] = User::findCurrent()->id; + $page->store(); + } } $onlineData = [ 'user_id' => $user->id, diff --git a/app/views/course/wiki/ask_deleting.php b/app/views/course/wiki/ask_deleting.php new file mode 100644 index 0000000000000000000000000000000000000000..5afd19fe1f4755ef4d7dff6f939036818b716a68 --- /dev/null +++ b/app/views/course/wiki/ask_deleting.php @@ -0,0 +1,31 @@ +<form action="" method="post"> + <?= CSRFProtection::tokenTag() ?> + <div class="file_select_possibilities"> + <div> + <div class="clickable"> + <?= Icon::create('archive2')->asInput(50, [ + 'formaction' => $controller->deleteversionURL($page, ['redirect_to' => 'page']), + 'data-confirm' => _('Wirklich die letzte Änderung löschen?') + ]) ?> + <button + class="undecorated" + data-confirm="<?= _('Wirklich die letzte Änderung löschen?') ?>" + formaction="<?= $controller->deleteversionURL($page, ['redirect_to' => 'page']) ?>"> + <?= _('Nur die letzte Änderung löschen') ?> + </button> + </div> + <div class="clickable"> + <?= Icon::create('wiki')->asInput(50, [ + 'formaction' => $controller->deleteURL($page), + 'data-confirm' => _('Wollen Sie wirklich die komplette Seite löschen?') + ]) ?> + <button + class="undecorated" + data-confirm="<?= _('Wollen Sie wirklich die komplette Seite löschen?') ?>" + formaction="<?= $controller->deleteURL($page) ?>"> + <?= _('Ganze Wikiseite löschen') ?> + </button> + </div> + </div> + </div> +</form> diff --git a/app/views/course/wiki/history.php b/app/views/course/wiki/history.php index 81fde594c85fa335d9faba747400dcc1333f250a..cbd324d981710c2c3b97d861fd5571049eaadc20 100644 --- a/app/views/course/wiki/history.php +++ b/app/views/course/wiki/history.php @@ -45,6 +45,16 @@ <a href="<?= $controller->versiondiff($page) ?>" data-dialog> <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> </a> + <? if ($page->isEditable()) : ?> + <form action="<?= $controller->deleteversion($page) ?>" + method="post" + class="inline" + title="<?= _('Version löschen') ?>" + data-confirm="<?= _('Wirklich diese Version löschen?') ?>"> + <?= CSRFProtection::tokenTag() ?> + <?= Icon::create('trash')->asInput() ?> + </form> + <? endif ?> </td> </tr> <? foreach ($page->versions as $i => $version) : ?> @@ -69,6 +79,16 @@ <a href="<?= $controller->versiondiff($page, $version->id) ?>" data-dialog> <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> </a> + <? if ($page->isEditable()) : ?> + <form action="<?= $controller->deleteversion($page, $version->id) ?>" + method="post" + class="inline" + title="<?= _('Version löschen') ?>" + data-confirm="<?= _('Wirklich diese Version löschen?') ?>"> + <?= CSRFProtection::tokenTag() ?> + <?= Icon::create('trash')->asInput() ?> + </form> + <? endif ?> </td> </tr> <? endforeach ?> diff --git a/lib/classes/JsonApi/Schemas/WikiPage.php b/lib/classes/JsonApi/Schemas/WikiPage.php index 857666e8a20978cceb3604fee2425bfd7242a68a..f061ecc810a7f7acc81bfa6a020e7d92b1bcb2ad 100644 --- a/lib/classes/JsonApi/Schemas/WikiPage.php +++ b/lib/classes/JsonApi/Schemas/WikiPage.php @@ -152,7 +152,7 @@ class WikiPage extends SchemaProvider */ private function addAuthorRelationship($relationships, $wiki, $includeList) { - if ($wiki->user_id) { + if ($wiki->user_id && $wiki->user_id !== 'nobody') { $relationships[self::REL_AUTHOR] = [ self::RELATIONSHIP_LINKS => [ Link::RELATED => $this->createLinkToResource($wiki->user), diff --git a/lib/models/WikiPage.class.php b/lib/models/WikiPage.class.php index d349aa1ec899ecad6c90cd2acba69466e13dc968..67ddd7e63748495817719363fed92e2efee337b5 100644 --- a/lib/models/WikiPage.class.php +++ b/lib/models/WikiPage.class.php @@ -92,7 +92,7 @@ class WikiPage extends SimpleORMap implements PrivacyObject protected function createVersion() { - $this->user_id = User::findCurrent()->id; + $last_version = $this->versions[0]; if ( !$this->isNew() && $this->content['content'] !== $this->content_db['content'] @@ -100,6 +100,7 @@ class WikiPage extends SimpleORMap implements PrivacyObject $this->content_db['user_id'] !== $this->content['user_id'] || $this->content_db['chdate'] < time() - 60 * 30 ) + && (!$last_version || $last_version['content'] !== $this['content']) ) { //Neue Version anlegen: WikiVersion::create([ diff --git a/tests/_support/_generated/JsonapiTesterActions.php b/tests/_support/_generated/JsonapiTesterActions.php index 5f9e833d5c23a5b49cdd53388fe1304fae9fd8f9..c191a3e0c399d9e966474754c2d3f5c8bfc000ff 100644 --- a/tests/_support/_generated/JsonapiTesterActions.php +++ b/tests/_support/_generated/JsonapiTesterActions.php @@ -12,7 +12,7 @@ trait JsonapiTesterActions */ abstract protected function getScenario(); - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -47,7 +47,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('expectException', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -81,7 +81,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('expectThrowable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -95,7 +95,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileNotExists', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -110,7 +110,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertGreaterOrEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -124,7 +124,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsEmpty', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -139,7 +139,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertLessOrEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -154,7 +154,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotRegExp', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -169,7 +169,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertRegExp', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -184,7 +184,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertThatItsNot', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -199,7 +199,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertArrayHasKey', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -214,7 +214,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertArrayNotHasKey', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -229,7 +229,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertClassHasAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -244,7 +244,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertClassHasStaticAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -259,7 +259,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertClassNotHasAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -274,7 +274,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertClassNotHasStaticAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -289,7 +289,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertContains', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -302,7 +302,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertContainsEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -318,7 +318,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertContainsOnly', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -333,7 +333,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertContainsOnlyInstancesOf', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -348,7 +348,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertCount', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -362,7 +362,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryDoesNotExist', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -376,7 +376,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryExists', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -390,7 +390,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryIsNotReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -404,7 +404,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryIsNotWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -418,7 +418,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryIsReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -432,7 +432,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDirectoryIsWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -447,7 +447,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertDoesNotMatchRegularExpression', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -461,7 +461,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEmpty', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -476,7 +476,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -491,7 +491,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEqualsCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -506,7 +506,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEqualsIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -522,7 +522,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertEqualsWithDelta', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -536,7 +536,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFalse', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -550,7 +550,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileDoesNotExist', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -565,7 +565,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -580,7 +580,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileEqualsCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -595,7 +595,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileEqualsIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -609,7 +609,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileExists', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -623,7 +623,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileIsNotReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -637,7 +637,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileIsNotWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -651,7 +651,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileIsReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -665,7 +665,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileIsWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -680,7 +680,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileNotEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -695,7 +695,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileNotEqualsCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -710,7 +710,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFileNotEqualsIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -724,7 +724,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertFinite', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -739,7 +739,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertGreaterThan', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -754,7 +754,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertGreaterThanOrEqual', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -768,7 +768,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertInfinite', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -783,7 +783,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertInstanceOf', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -797,7 +797,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsArray', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -811,7 +811,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsBool', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -825,7 +825,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsCallable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -839,7 +839,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsClosedResource', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -853,7 +853,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsFloat', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -867,7 +867,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsInt', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -881,7 +881,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsIterable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -895,7 +895,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotArray', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -909,7 +909,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotBool', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -923,7 +923,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotCallable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -937,7 +937,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotClosedResource', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -951,7 +951,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotFloat', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -965,7 +965,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotInt', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -979,7 +979,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotIterable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -993,7 +993,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotNumeric', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1007,7 +1007,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotObject', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1021,7 +1021,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1035,7 +1035,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotResource', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1049,7 +1049,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotScalar', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1063,7 +1063,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1077,7 +1077,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNotWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1091,7 +1091,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsNumeric', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1105,7 +1105,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsObject', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1119,7 +1119,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsReadable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1133,7 +1133,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsResource', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1147,7 +1147,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsScalar', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1161,7 +1161,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1175,7 +1175,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertIsWritable', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1189,7 +1189,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJson', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1204,7 +1204,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonFileEqualsJsonFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1219,7 +1219,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonFileNotEqualsJsonFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1234,7 +1234,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonStringEqualsJsonFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1249,7 +1249,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonStringEqualsJsonString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1264,7 +1264,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonStringNotEqualsJsonFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1279,7 +1279,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertJsonStringNotEqualsJsonString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1294,7 +1294,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertLessThan', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1309,7 +1309,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertLessThanOrEqual', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1324,7 +1324,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertMatchesRegularExpression', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1338,7 +1338,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNan', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1353,7 +1353,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotContains', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1364,7 +1364,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotContainsEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1380,7 +1380,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotContainsOnly', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1395,7 +1395,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotCount', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1409,7 +1409,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEmpty', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1424,7 +1424,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEquals', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1439,7 +1439,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEqualsCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1454,7 +1454,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEqualsIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1470,7 +1470,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotEqualsWithDelta', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1484,7 +1484,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotFalse', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1499,7 +1499,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotInstanceOf', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1513,7 +1513,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotNull', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1528,7 +1528,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotSame', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1543,7 +1543,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotSameSize', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1557,7 +1557,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNotTrue', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1571,7 +1571,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertNull', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1586,7 +1586,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertObjectHasAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1601,7 +1601,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertObjectNotHasAttribute', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1616,7 +1616,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertSame', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1631,7 +1631,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertSameSize', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1644,7 +1644,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringContainsString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1655,7 +1655,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringContainsStringIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1670,7 +1670,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringEndsNotWith', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1685,7 +1685,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringEndsWith', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1700,7 +1700,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringEqualsFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1715,7 +1715,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringEqualsFileCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1730,7 +1730,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringEqualsFileIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1745,7 +1745,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringMatchesFormat', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1760,7 +1760,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringMatchesFormatFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1773,7 +1773,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotContainsString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1786,7 +1786,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotContainsStringIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1801,7 +1801,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotEqualsFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1815,7 +1815,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotEqualsFileCanonicalizing', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1830,7 +1830,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotEqualsFileIgnoringCase', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1845,7 +1845,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotMatchesFormat', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1860,7 +1860,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringNotMatchesFormatFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1875,7 +1875,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringStartsNotWith', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1890,7 +1890,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertStringStartsWith', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1905,7 +1905,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertThat', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1919,7 +1919,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertTrue', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1934,7 +1934,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlFileEqualsXmlFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1949,7 +1949,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlFileNotEqualsXmlFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1964,7 +1964,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlStringEqualsXmlFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1979,7 +1979,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlStringEqualsXmlString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -1994,7 +1994,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlStringNotEqualsXmlFile', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2009,7 +2009,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('assertXmlStringNotEqualsXmlString', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2022,7 +2022,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('fail', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2035,7 +2035,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('markTestIncomplete', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2048,7 +2048,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('markTestSkipped', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2059,7 +2059,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('getCredentialsForTestAutor', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2070,7 +2070,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('getCredentialsForTestDozent', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2081,7 +2081,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('getCredentialsForTestAdmin', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2092,7 +2092,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('getCredentialsForRoot', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2108,7 +2108,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('withPHPLib', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2125,7 +2125,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('createApp', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2138,7 +2138,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('createRequestBuilder', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. * @@ -2151,7 +2151,7 @@ trait JsonapiTesterActions return $this->getScenario()->runStep(new \Codeception\Step\Action('sendMockRequest', func_get_args())); } - + /** * [!] Method is generated. Documentation taken from corresponding module. *