public function executePost(sfWebRequest $request)
 {
     $this->forward400If('' === (string) $request['title'], 'title parameter is not specified.');
     $this->forward400If('' === (string) $request['body'], 'body parameter is not specified.');
     $this->forward400If(!isset($request['public_flag']) || '' === (string) $request['public_flag'], 'public flag is not specified');
     if (isset($request['id']) && '' !== $request['id']) {
         $diary = Doctrine::getTable('Diary')->findOneById($request['id']);
         $this->forward400If(false === $diary, 'the specified diary does not exit.');
         $this->forward400If(false === $diary->isAuthor($this->member->getId()), 'this diary is not yours.');
     } else {
         $diary = new Diary();
         $diary->setMemberId($this->member->getId());
     }
     $diary->setTitle($request['title']);
     $diary->setBody($request['body']);
     $diary->setPublicFlag($request['public_flag']);
     $diary->save();
     $this->diary = $diary;
     for ($i = 1; $i <= 3; $i++) {
         $diaryImage = Doctrine::getTable('DiaryImage')->retrieveByDiaryIdAndNumber($diary->getId(), $i);
         $filename = basename($_FILES['diary_photo_' . $i]['name']);
         if (!is_null($filename) && '' !== $filename) {
             try {
                 $validator = new opValidatorImageFile(array('required' => false));
                 $validFile = $validator->clean($_FILES['diary_photo_' . $i]);
             } catch (Exception $e) {
                 $this->forward400($e->getMessage());
             }
             $f = new File();
             $f->setFromValidatedFile($validFile);
             $f->setName(hash('md5', uniqid((string) $i) . $filename));
             if ($stream = fopen($_FILES['diary_photo_' . $i]['tmp_name'], 'r')) {
                 if (!is_null($diaryImage)) {
                     $diaryImage->delete();
                 }
                 $bin = new FileBin();
                 $bin->setBin(stream_get_contents($stream));
                 $f->setFileBin($bin);
                 $f->save();
                 $di = new DiaryImage();
                 $di->setDiaryId($diary->getId());
                 $di->setFileId($f->getId());
                 $di->setNumber($i);
                 $di->save();
                 $diary->updateHasImages();
             } else {
                 $this->forward400(__('Failed to write file to disk.'));
             }
         }
         $deleteCheck = $request['diary_photo_' . $i . '_photo_delete'];
         if ('on' === $deleteCheck && !is_null($diaryImage)) {
             $diaryImage->delete();
         }
     }
 }
 public function executeCreate(opMailRequest $request)
 {
     if (!Doctrine::getTable('SnsConfig')->get('op_diary_plugin_use_email_post', true)) {
         return sfView::NONE;
     }
     $member = $this->getRoute()->getMember();
     if (!$member) {
         return sfView::NONE;
     }
     $mailMessage = $request->getMailMessage();
     $title = $this->getSubject($mailMessage, '(no title)');
     $validator = new opValidatorString(array('rtrim' => true));
     try {
         $body = $validator->clean($mailMessage->getContent());
     } catch (Exception $e) {
         return sfView::ERROR;
     }
     $diary = new Diary();
     $diary->setMember($member);
     $diary->setTitle($title);
     $diary->setBody($body);
     $diary->setPublicFlag($this->getDefaultPublicFlag($member));
     $diaryImages = array();
     if (sfConfig::get('app_diary_is_upload_images', true)) {
         $num = (int) sfConfig::get('app_diary_max_image_file_num', 3);
         $files = $this->getImageFiles($mailMessage, $num);
         $i = 1;
         foreach ($files as $file) {
             $diaryImage = new DiaryImage();
             $diaryImage->setDiary($diary);
             $diaryImage->setFile($file);
             $diaryImage->setNumber($i++);
             $diaryImages[] = $diaryImage;
             $diary->setHasImages(true);
         }
     }
     $diary->save();
     foreach ($diaryImages as $diaryImage) {
         $diaryImage->save();
     }
     return sfView::NONE;
 }
 public function setup()
 {
     parent::setup();
     unset($this['id']);
     $this->useFields(array('title', 'body', 'public_flag'));
     $this->widgetSchema['title'] = new sfWidgetFormInput();
     $this->widgetSchema['body'] = new opWidgetFormRichTextareaOpenPNE();
     $this->validatorSchema['title'] = new opValidatorString(array('trim' => true));
     $this->validatorSchema['body'] = new opValidatorString(array('rtrim' => true));
     $this->widgetSchema['public_flag'] = new sfWidgetFormChoice(array('choices' => Doctrine::getTable('Diary')->getPublicFlags(), 'expanded' => true));
     $this->validatorSchema['public_flag'] = new sfValidatorChoice(array('choices' => array_keys(Doctrine::getTable('Diary')->getPublicFlags())));
     if ($this->isNew() && ($config = sfContext::getInstance()->getUser()->getMember()->getConfig(MemberConfigDiaryForm::PUBLIC_FLAG))) {
         $this->setDefault('public_flag', $config);
     }
     if ($this->getObject()->is_open) {
         $this->getObject()->setPublicFlag(DiaryTable::PUBLIC_FLAG_OPEN);
     }
     if (sfConfig::get('app_diary_is_upload_images', true)) {
         $images = array();
         if (!$this->isNew()) {
             $images = $this->getObject()->getDiaryImages();
         }
         $max = (int) sfConfig::get('app_diary_max_image_file_num', 3);
         for ($i = 1; $i <= $max; $i++) {
             $key = 'photo_' . $i;
             if (isset($images[$i])) {
                 $image = $images[$i];
             } else {
                 $image = new DiaryImage();
                 $image->setDiary($this->getObject());
                 $image->setNumber($i);
             }
             $imageForm = new DiaryImageForm($image);
             $imageForm->getWidgetSchema()->setFormFormatterName('list');
             $this->embedForm($key, $imageForm, '<ul id="diary_' . $key . '">%content%</ul>');
         }
     }
 }
Exemple #4
0
 public function executePost(sfWebRequest $request)
 {
     $conn = opDoctrineQuery::getMasterConnection();
     $conn->beginTransaction();
     try {
         $params = $this->getRequestedFormParameter($request);
         $diary = $this->getDiaryObject($this->member->id, $request->getParameter('id'));
         $diary->setTitle($params['title']);
         $diary->setBody($params['body']);
         $diary->setPublicFlag($params['public_flag']);
         if ($diary->is_open && $params['public_flag'] !== 4) {
             $diary->is_open = 0;
         }
         $diary->save($conn);
         $oldDiaryImages = $diary->getDiaryImages();
         foreach ($oldDiaryImages as $oldDiaryImage) {
             if ($request['diary_photo_' . $oldDiaryImage->number . '_photo_delete']) {
                 $oldDiaryImage->delete($conn);
                 unset($oldDiaryImages[$oldDiaryImage->number]);
             }
         }
         if ($params['image']) {
             foreach ($params['image'] as $key => $image) {
                 $number = substr($key, -1);
                 if ($oldDiaryImages[$number]) {
                     throw new opDiaryPluginAPIException('invalid deleteCheck');
                 }
                 $diaryImage = new DiaryImage();
                 $diaryImage->setDiaryId($diary->getId());
                 $diaryImage->setFile($image);
                 $diaryImage->setNumber($number);
                 $diaryImage->save($conn);
                 //re-save because file name doesnt have prefix(refs #1643)
                 $diaryImage->getFile()->save($conn);
                 $diary->updateHasImages();
             }
         }
         $conn->commit();
     } catch (opDiaryPluginAPIException $e) {
         $conn->rollback();
         $this->forward400($e->getMessage());
     } catch (Exception $e) {
         $conn->rollback();
         throw $e;
     }
     $this->diary = $diary;
 }
<?php

include dirname(__FILE__) . '/../../bootstrap/unit.php';
include dirname(__FILE__) . '/../../bootstrap/database.php';
$t = new lime_test(4);
$t->diag('DiaryImage::delete()');
$diaryImage = Doctrine::getTable('DiaryImage')->find(1);
$file_id = $diaryImage->file_id;
$conn = Doctrine::getTable('DiaryImage')->getConnection();
$conn->beginTransaction();
$diaryImage->delete();
$t->ok(!Doctrine::getTable('File')->find($file_id), 'File is deleted');
$t->ok(!Doctrine::getTable('FileBin')->find($file_id), 'FileBin is deleted');
$conn->rollback();
$t->diag('DiaryImage::save()');
$conn->beginTransaction();
$file = new File();
$file->name = 'test.gif';
$diaryImage = new DiaryImage();
$diaryImage->diary_id = 1;
$diaryImage->number = 2;
$diaryImage->File = $file;
$diaryImage->save();
$t->is($diaryImage->File->name, 'd_1_2_test.gif', 'File name is prefixed');
$diaryImage->save();
$t->is($diaryImage->File->name, 'd_1_2_test.gif', 'File name is not double prefixed');
$conn->rollback();