function sourceRecords($params)
 {
     $res = WorkflowThreeStepRequest::get_by_author('WorkflowPublicationRequest', Member::currentUser(), array('AwaitingApproval', 'Approved'));
     // Add WFRequestedWhen column
     $doSet = new DataObjectSet();
     if ($res) {
         foreach ($res as $result) {
             if ($wf = $result->openWorkflowRequest()) {
                 $result->WFRequestedWhen = $wf->Created;
                 $doSet->push($result);
             }
         }
     }
     return $doSet;
 }
 function sourceRecords($params)
 {
     // Set stage, otherwise, we won't get any results
     $currentStage = Versioned::current_stage();
     Versioned::reading_stage(Versioned::get_live_stage());
     $res = WorkflowThreeStepRequest::get_by_author('WorkflowDeletionRequest', Member::currentUser(), array('AwaitingApproval', 'Approved'));
     // Reset stage back to what it was
     Versioned::reading_stage($currentStage);
     // Add WFRequestedWhen column
     $doSet = new DataObjectSet();
     if ($res) {
         foreach ($res as $result) {
             if ($wf = $result->openWorkflowRequest()) {
                 $result->WFRequestedWhen = $wf->Created;
                 $doSet->push($result);
             }
         }
     }
     return $doSet;
 }
 function testWorkflowPublicationApprovalTransition()
 {
     WorkflowRequest::$enable_all_alerts = true;
     $page = $this->objFromFixture('SiteTree', 'custompublisherpage');
     $custompublisher = $this->objFromFixture('Member', 'custompublisher');
     $customapprover = $this->objFromFixture('Member', 'customapprover');
     $customauthor = $this->objFromFixture('Member', 'customauthor');
     // nothing -> awaiting approval
     $customauthor->logIn();
     $request = $page->openOrNewWorkflowRequest('WorkflowPublicationRequest');
     $request->request("ARGGGGG!");
     $this->assertNotNull($request);
     $this->assertEquals($request->AuthorID, $customauthor->ID, "Logged-in member is set as the author of the request");
     $this->assertEquals($request->Status, 'AwaitingApproval', "Request is set to AwaitingApproval after requestPublication() is called");
     // awaiting approval -> approved
     $customapprover->logIn();
     $request->approve('Looks good');
     $this->assertEquals($request->Status, 'Approved', "Request is set to Approved after page is approved");
     $this->assertEquals($request->ApproverID, $customapprover->ID, "Currently logged-in user is set as the Approver for this request");
     // place comment
     $customauthor->logIn();
     $request->comment("YARRRRRR!");
     // approved -> completed
     $custompublisher->logIn();
     $request->publish('Avast, ye scoundrels!', $custompublisher, false);
     $this->assertEquals($request->Status, 'Completed', "Request is set to Completed after page is published");
     $this->assertEquals($request->PublisherID, $custompublisher->ID, "Currently logged-in user is set as the Publisher for this request");
     // Test save and publish
     $this->objFromFixture('Member', 'admin')->logIn();
     $this->assertTrue(is_string($page->openOrNewWorkflowRequest('WorkflowPublicationRequest')->saveAndPublish("S&P")));
     // Test the get_by_* functions. These are cursory tests, covering functionality
     // but none of the multitude of edge cases
     $this->assertContains($page->ID, WorkflowThreeStepRequest::get_by_author('WorkflowPublicationRequest', $customauthor)->column('ID'));
     $this->assertContains($page->ID, WorkflowThreeStepRequest::get_by_approver('WorkflowPublicationRequest', $customapprover)->column('ID'));
     $this->assertContains($page->ID, WorkflowThreeStepRequest::get_by_publisher('WorkflowPublicationRequest', $custompublisher)->column('ID'));
 }