/** * Creates a PDF report from the Minutes model given. * Returns the PDF as a string that can either be saved to disk * or streamed back to the browser. * * @param Phprojekt_Model_Interface $minutesModel The minutes model object to create the PDF from. * * @return string The resulting PDF document. */ public static function getPdf(Phprojekt_Model_Interface $minutesModel) { $phpr = Phprojekt::getInstance(); $pdf = new Zend_Pdf(); $page = new Phprojekt_Pdf_Page(Zend_Pdf_Page::SIZE_A4); $pages = array($page); $page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 12); $page->setBorder(2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 2.0 * Phprojekt_Pdf_Page::PT_PER_CM, 3.0 * Phprojekt_Pdf_Page::PT_PER_CM); $page->addFreetext(array('lines' => $minutesModel->title, 'fontSize' => 20)); $page->addFreetext(array('lines' => array_merge(explode("\n\n", $minutesModel->description), array($phpr->translate('Start') . ': ' . $minutesModel->meetingDatetime, $phpr->translate('End') . ': ' . $minutesModel->endTime, $phpr->translate('Place') . ': ' . $minutesModel->place, $phpr->translate('Moderator') . ': ' . $minutesModel->moderator)), 'fontSize' => 12)); $invited = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsInvited); $attending = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsAttending); $excused = Minutes_Helpers_Userlist::expandIdList($minutesModel->participantsExcused); $pages += $page->addTable(array('fontSize' => 12, 'rows' => array(array(array('text' => $phpr->translate('Invited'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($invited, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM)), array(array('text' => $phpr->translate('Attending'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($attending, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM)), array(array('text' => $phpr->translate('Excused'), 'width' => 4.7 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => array_reduce($excused, array('self', '_concat')), 'width' => 12.0 * Phprojekt_Pdf_Page::PT_PER_CM))))); $page = end($pages); $itemtable = array(); $items = $minutesModel->items->fetchAll(); foreach ($items as $item) { $itemtable[] = array(array('text' => $item->topicId, 'width' => 1.3 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate($item->information->getTopicType($item->topicType)), 'width' => 3.0 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $item->getDisplay(), 'width' => 12.4 * Phprojekt_Pdf_Page::PT_PER_CM)); } $pages += $page->addTable(array('fontSize' => 12, 'rows' => array_merge(array(array('isHeader' => true, array('text' => $phpr->translate('No.'), 'width' => 1.3 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate('Type'), 'width' => 3.0 * Phprojekt_Pdf_Page::PT_PER_CM), array('text' => $phpr->translate('Item'), 'width' => 12.4 * Phprojekt_Pdf_Page::PT_PER_CM))), $itemtable))); $page = end($pages); $pdf->pages = $pages; $pdf->properties['Title'] = $minutesModel->title; $owner = Minutes_Helpers_Userlist::expandIdList($minutesModel->ownerId); $pdf->properties['Author'] = $owner[0]['display']; $pdf->properties['Producer'] = 'PHProjekt version ' . Phprojekt::getVersion(); $pdf->properties['CreationDate'] = 'D:' . gmdate('YmdHis'); $pdf->properties['Keywords'] = $minutesModel->description; return $pdf->render(); }
/** * Multiple occurances of ids should show as single entry in result */ public function testUserlistStresstest() { $data = Minutes_Helpers_Userlist::expandIdList('1', '1,2', '2, 1', '2', '', '2,1,1,2'); $this->assertEquals(array(0 => array('id' => 2, 'display' => 'Solt, Gustavo'), 1 => array('id' => 1, 'display' => 'Soria Parra, David')), $data); }
/** * Returns a list of users. * * Produces a list of users that should be selectable in the frontend. * * First implementation returns the list of users invited to the meeting. * * Returns a list of all the users with: * <pre> * - id => id of user. * - display => Display for the user. * </pre> * * REQUIRES request parameters: * <pre> * - integer <b>id</b> id of the minute to consult. * </pre> * * The return is in JSON format. * * @throws Phprojekt_PublishedException On wrong id. * * @return void */ public function jsonListUserAction() { $id = (int) $this->getRequest()->getParam('id'); $minutes = $this->getModelObject(); $minutes->find($id); if (!empty($minutes->id)) { $data = array(); $data['data'] = Minutes_Helpers_Userlist::expandIdList($minutes->participantsInvited, $minutes->participantsExcused, $minutes->participantsAttending); $data['numRows'] = count($data['data']); Phprojekt_Converter_Json::echoConvert($data); } else { throw new Phprojekt_PublishedException(self::NOT_FOUND); } }