예제 #1
0
 /**
  * @Route("/admin/page/template/enregistrer", name = "enregistrer_template"  , defaults={} )
  * @Template
  * @I18nDoctrine
  */
 public function EnregistrementAction(Request $request)
 {
     $code = $request->request->get('code');
     $template = $request->request->get('template');
     if ($template == "" || $template == NULL) {
         die("impossible");
     }
     $dir = $this->dir_theme . $this->container->getParameter('front_theme') . "/";
     $file = $template;
     if (file_exists($dir . $file)) {
         $now = new \Datetime();
         $backup_dir = $dir . $now->format("Y-m-d");
         if (!is_dir($backup_dir)) {
             mkdir($backup_dir);
         }
         if (!copy($dir . $file, $backup_dir . "/" . $now->format("H:i:s") . "_" . $file)) {
             die("Copy impossible");
         }
         $monfichier = fopen($dir . $file, 'w');
         fseek($monfichier, 0);
         fputs($monfichier, $code);
         fclose($monfichier);
     }
     return new Response('ok');
 }
예제 #2
0
 public function setUp()
 {
     parent::setUp();
     $date = new Datetime();
     $dmax = $date->format("Y-m-d H:i:s");
     $date->modify('-6 month');
     $dmin = $date->format("Y-m-d H:i:s");
     $databoxes = self::$DI['app']->getDataboxes();
     $ret = [];
     foreach ($databoxes as $databox) {
         $colls = $databox->get_collections();
         $rett = [];
         foreach ($colls as $coll) {
             $rett[$coll->get_coll_id()] = $coll->get_coll_id();
         }
         $ret[$databox->get_sbas_id()] = implode(',', $rett);
     }
     foreach ($ret as $sbasid => $collections) {
         $report = new module_report_connexion(self::$DI['app'], $dmin, $dmax, $sbasid, $collections);
         if (!$this->report instanceof module_report) {
             $this->report = $report;
         } elseif ($report->getTotal() > $this->report->getTotal()) {
             $this->report = $report;
         }
     }
     $this->report->setFilter([['f' => 'user', 'o' => '=', 'v' => 'admin'], ['f' => 'ddate', 'o' => 'LIKE', 'v' => '*'], ['f' => '1', 'o' => 'OR', 'v' => '1']]);
     $this->report->setUser_id(self::$DI['user']->getId());
     $this->report->setOrder('user', 'ASC');
     $this->filter = new module_report_sqlfilter(self::$DI['app'], $this->report);
 }
예제 #3
0
 /**
  * @param string|null $format
  *
  * @return \Datetime
  */
 public function getUpdatedAt($format = null)
 {
     if ($format) {
         return $this->updatedAt->format($format);
     }
     return $this->updatedAt;
 }
 /**
  * {@inheritdoc}
  */
 public function loadSnapshots(SiteInterface $site)
 {
     $now = new \Datetime();
     $query = $this->getEntityManager()->createQuery(sprintf('
           SELECT s,p
           FROM %s s
           INNER JOIN s.page p
           WHERE
             s.enabled = 1
               AND
             s.site = %d
               AND
             s.publicationDateStart <= \'%s\'
               AND
             ( s.publicationDateEnd IS NULL OR s.publicationDateEnd >= \'%s\' )
           ORDER BY s.position ASC
           ', $this->class, $site->getId(), $now->format('Y-m-d H:i:s'), $now->format('Y-m-d H:i:s')));
     $query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_INNER_JOIN, true);
     $query->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
     $query->setHint(\Gedmo\Translatable\TranslatableListener::HINT_TRANSLATABLE_LOCALE, $site->getLocale());
     $snapshots = array();
     foreach ($query->execute() as $snap) {
         $snapshots[$snap->getPage()->getId()] = $snap;
     }
     $this->snapshots = $snapshots;
 }
 public function index()
 {
     $user = \Auth::user();
     $times = $user->times;
     $today = new \Datetime("today");
     $factory = new \CalendR\Calendar();
     $month = $factory->getMonth($today->format('Y'), $today->format('m'));
     return view('dashboard.index', ['user' => $user, 'times' => $times, 'today' => $today, 'factory' => $factory, 'month' => $month]);
 }
예제 #6
0
 /**
  * Get Nb Order BY Month
  *
  */
 public function getNbOrderByMonth($user, $dateBegin = null)
 {
     if (!$dateBegin) {
         $dateBegin = new \Datetime('now');
     }
     $query = $this->getEntityManager()->createQuery("\n                 SELECT COUNT(o) AS nb, DATE_FORMAT(:dateBegin, '%Y-%m') AS d\n                 FROM StoreBackendBundle:Order o\n                 WHERE o.jeweler = :user\n                 AND MONTH(o.dateCreated) = :month\n                 AND YEAR(o.dateCreated) = :year\n                    ")->setParameter('user', $user)->setParameter('dateBegin', $dateBegin->format('Y-m-d'))->setParameter('month', $dateBegin->format('m'))->setParameter('year', $dateBegin->format('Y'));
     //exit(var_dump($query->getSingleResult()));
     return $query->getSingleResult();
 }
예제 #7
0
파일: Data.php 프로젝트: adaoex/zf2-base
 /**
  * Retorna Date formatado 
  *
  * @param  string|null $date
  * @return string|Plugin\Formatar
  */
 public function porExtenso($date)
 {
     $this->setData($date);
     $meses = array(1 => "Janeiro", 2 => "Fevereiro", 3 => "Março", 4 => "Abril", 5 => "Maio", 6 => "Junho", 7 => "Julho", 8 => "Agosto", 9 => "Setembro", 10 => "Outubro", 11 => "Novembro", 12 => "Dezembro");
     if (!$this->data instanceof \DateTime) {
         return 'data inválida!';
     }
     return $this->data->format('d') . ' de ' . $meses[$this->data->format('n')] . ' de ' . $this->data->format('Y');
 }
 /**
  * Lists all Emission entities.
  */
 public function indexAction()
 {
     $breadcrumbs = $this->get("white_october_breadcrumbs");
     $breadcrumbs->addItem('Les émissions');
     $breadcrumbs->addItem('Grille des programmes');
     $format = $this->get('request')->get('_format');
     $timestampDay = 60 * 60 * 24;
     $timestampWeek = $timestampDay * 7;
     if (!empty($_GET['date'])) {
         $start = new \Datetime($_GET['date']);
         if ($start->format('W') != 1) {
             $start->setISODate($start->format('Y'), $start->format('W'), 1);
         }
     } elseif (!empty($_GET['week'])) {
         $start = new \Datetime();
         $start->setISODate($start->format('Y'), $_GET['week'], 1);
     }
     if (empty($start)) {
         $start = new \Datetime('now');
         $start->setTime(0, 0);
     }
     $weekNumber = $start->format('W');
     // find programs on current week
     $dayNumber = $start->format('w');
     if ($dayNumber === 0) {
         $start->modify('-6 days');
     } elseif ($dayNumber > 1) {
         $start->modify('-' . ($dayNumber - 1) . ' days');
     }
     $stop = clone $start;
     $stop->modify('+7 days');
     $em = $this->getDoctrine()->getManager();
     $query = $em->createQuery("SELECT p FROM ProgramBundle:Program p WHERE p.time_stop < :stop AND p.time_start >= :start AND p.time_start < p.time_stop  ORDER BY p.time_start ASC, p.time_stop DESC")->setParameters(array('start' => $start, 'stop' => $stop));
     $results = $query->getResult();
     $entities = array();
     for ($i = 0; $i < 7; $i++) {
         $day = clone $start;
         $day->modify("+{$i} days");
         $entities[] = array('date' => $day, 'tot' => array('label' => 'Tôt', 'desc' => 'Avant 7h00', 'entities' => array()), 'am' => array('label' => 'Matinée', 'desc' => '7h00 - 12h00', 'entities' => array()), 'pm' => array('label' => 'Après-midi', 'desc' => '12h00 - 18h00', 'entities' => array()), 'soir' => array('label' => 'Soirée', 'desc' => '18h00 - 21h00', 'entities' => array()), 'nuit' => array('label' => 'Nuit', 'desc' => 'Après 21h00', 'entities' => array()));
     }
     foreach ($results as $result) {
         $weekDay = $result->getTimeStart()->format('N') - 1;
         if ($result->getTimeStart()->format('H:i:s') < '07:00:00') {
             $entities[$weekDay]['tot']['entities'][] = $result;
         } elseif ($result->getTimeStart()->format('H:i:s') < '12:00:00') {
             $entities[$weekDay]['am']['entities'][] = $result;
         } elseif ($result->getTimeStart()->format('H:i:s') < '18:00:00') {
             $entities[$weekDay]['pm']['entities'][] = $result;
         } elseif ($result->getTimeStart()->format('H:i:s') < '21:00:00') {
             $entities[$weekDay]['soir']['entities'][] = $result;
         } else {
             $entities[$weekDay]['nuit']['entities'][] = $result;
         }
     }
     return $this->render(sprintf('ProgramBundle:Program:index.%s.twig', $format), array('entities' => $entities, 'count' => count($results), 'weekNumber' => $weekNumber, 'start' => $start, 'stop' => $stop));
 }
예제 #9
0
 protected function writeMetaMarkdown($dir, \Datetime $dt, $slug, $title, $tag)
 {
     $meta = array('---', 'layout: post', sprintf('title: "%s"', $title), sprintf('date: %s', $dt->format('Y-m-d H:i')), 'comments: false', sprintf('categories: [%s]', implode(', ', array_map(function ($t) {
         return sprintf("'%s'", $t);
     }, $tag))), '---');
     $filename = sprintf("%s-%s.markdown", $dt->format('Y-m-d'), $slug);
     $path = $dir . "/" . $filename;
     file_put_contents($path, implode("\n", $meta) . "\n");
     return $filename;
 }
예제 #10
0
파일: Book.php 프로젝트: Joadar/Bookstore
 public function afterFind($results, $primary = false)
 {
     // Mettre la date en Français
     $month = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
     foreach ($results as $k => $v) {
         if (isset($v['Book'])) {
             $date = new Datetime($v['Book']['published']);
             $results[$k]['Book']['publicationLe'] = $date->format('d') . ' ' . $month[$date->format('n') - 1] . ' ' . $date->format('Y');
         }
     }
     return $results;
 }
예제 #11
0
 /**
  * @Route("/cash", name="cash")
  * @Method({"GET", "POST"})
  */
 public function cashAction(Request $request)
 {
     $method = $request->getMethod();
     if ($method === 'GET') {
         $date = new \Datetime('now');
         $date = $date->format('Y-m-d');
     } else {
         $date = $request->request->get('date', null);
     }
     $em = $this->getDoctrine()->getManager();
     is_null($date) ? $date = new \Datetime('now') : ($date = new \Datetime($date));
     $appointments = $em->getRepository('AppBundle:Appointment')->getAppointmentsOfDay($date->format('Y-m-d') . ' 00:00:00');
     return $this->render('default/cash.html.twig', array('appointments' => $appointments, 'date' => $date->format('Y-m-d')));
 }
예제 #12
0
 /**
  * Rendering decorator
  *
  * @param \Datetime $context            
  * @return string
  */
 public function render($context)
 {
     if (!$context instanceof \Datetime) {
         return $context;
     }
     return $context->format($this->options['format']);
 }
 /**
  * Transform un objet DateTime en timestamp
  * @param  Datetime|null $datetime
  * @return array
  */
 public function transform($datetime)
 {
     if (!$datetime instanceof \DateTime) {
         return null;
     }
     return $datetime->format("U");
 }
예제 #14
0
파일: opml.php 프로젝트: qwertygc/Freeder
/**
 * Generate an OPML file to export the feeds.
 *
 * @copyright Heavily based on a function from FreshRSS.
 */
function opml_export($feeds)
{
    $tags = array();
    foreach ($feeds as $key => $feed) {
        if (empty($feed['tags'])) {
            $tags['untagged'][] = $key;
            continue;
        }
        foreach ($feed['tags'] as $tag) {
            $tags[$tag][] = $key;
        }
    }
    $now = new Datetime();
    $txt = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
    $txt .= '<opml version="2.0">' . PHP_EOL;
    $txt .= "\t" . '<head>' . PHP_EOL;
    $txt .= "\t\t" . '<title>Export of Freeder feeds</title>' . PHP_EOL;
    $txt .= "\t\t" . '<dateCreated>' . $now->format(DateTime::RFC822) . '</dateCreated>' . PHP_EOL;
    $txt .= "\t" . '</head>' . PHP_EOL;
    $txt .= "\t" . '<body>' . PHP_EOL;
    foreach ($tags as $tag => $id_feeds) {
        $txt .= "\t\t" . '<outline text="' . $tag . '">' . PHP_EOL;
        foreach ($id_feeds as $id_feed) {
            $website = multiarray_search('rel', 'alternate', $feeds[$id_feed]['links'], '');
            if (!empty($website)) {
                $website = 'htmlUrl="' . htmlspecialchars($website['href'], ENT_COMPAT, 'UTF-8') . '"';
            }
            $txt .= "\t\t\t" . '<outline text="' . htmlspecialchars($feeds[$id_feed]['title'], ENT_COMPAT, 'UTF-8') . '" type="rss" xmlUrl="' . htmlspecialchars($feeds[$id_feed]['url'], ENT_COMPAT, 'UTF-8') . '" ' . $website . ' description="' . htmlspecialchars($feeds[$id_feed]['description'], ENT_COMPAT, 'UTF-8') . '" />' . PHP_EOL;
        }
        $txt .= "\t\t" . '</outline>' . PHP_EOL;
    }
    $txt .= "\t" . '</body>' . PHP_EOL;
    $txt .= '</opml>';
    return $txt;
}
예제 #15
0
파일: GeekTime.php 프로젝트: pimolo/monolol
 private function isGeekTime(\Datetime $dateTime)
 {
     if ($dateTime->format('H:i') == '13:37') {
         return true;
     }
     return false;
 }
예제 #16
0
/**
 *  Helpfer function relativeDate()
 */
function relativeDate($date, $args = array())
{
    // default for $args
    $defaults = array('lang' => count(site()->languages()) >= 1 ? site()->language()->code() : c::get('relativedate.lang', 'en'), 'length' => c::get('relativedate.length', 2), 'threshold' => c::get('relativedate.threshold', false), 'fuzzy' => c::get('relativedate.fuzzy', true), 'format' => c::get('relativedate.format', 'd.m.Y'));
    $args = array_merge($defaults, $args);
    // check if $date is a timestamp
    if (RelativeDate::isTimestamp($date)) {
        $date = date(DATE_ATOM, $date);
    }
    // only convert to relative if time difference no exceeds threshold
    if ($args['threshold'] === false or abs(strtotime($date) - time()) <= $args['threshold']) {
        try {
            $relative = new RelativeDate($date, $args);
            $result = $relative->get($args['length']);
        } catch (Exception $e) {
            $result = $date;
        }
    } else {
        $result = $date;
    }
    // if we had no change to date due to any bug or exceeding threshold
    if ($result === $date) {
        $date = new Datetime($date);
        $result = $date->format($args['format']);
    }
    return $result;
}
예제 #17
0
 public function getByDate(\Datetime $date1, \Datetime $date2)
 {
     $queryBuilder = $this->createQueryBuilder('a');
     $queryBuilder->where('a.date BETWEEN :date1 AND :date2')->setParameter('date1', $date1->format('Y-m-d'))->setParameter('date2', $date2->format('Y-m-d'));
     $query = $queryBuilder->getQuery();
     return $query->getResult();
 }
 public function __construct($type, $batchId, $options)
 {
     $this->type = $type;
     $this->batchId = $batchId;
     $this->options = $options;
     $now = new \Datetime();
     $this->createdTimestamp = $now->format('c');
 }
 /**
  * {@inheritdoc}
  *
  * @return string
  */
 public function reverseTransform($value)
 {
     if (empty($value)) {
         return null;
     }
     $datetime = new \Datetime($value->format($this->format));
     return $datetime->format($this->format);
 }
예제 #20
0
파일: job.php 프로젝트: javigomez/neno
 /**
  * Get created date
  *
  * @param   bool   $formatted If the date should be formatted
  * @param   string $format    Which format should be used
  *
  * @return Datetime|string
  */
 public function getCreatedTime($formatted = false, $format = 'Y-m-d H:i:s')
 {
     if ($formatted) {
         return $this->createdTime->format($format);
     } else {
         return $this->createdTime;
     }
 }
예제 #21
0
 public function setUp()
 {
     parent::setUp();
     $date = new Datetime();
     $this->dmax = $date->format("Y-m-d H:i:s");
     $date->modify('-6 month');
     $this->dmin = $date->format("Y-m-d H:i:s");
     $databoxes = self::$DI['app']['phraseanet.appbox']->get_databoxes();
     $this->ret = [];
     foreach ($databoxes as $databox) {
         $colls = $databox->get_collections();
         $rett = [];
         foreach ($colls as $coll) {
             $rett[$coll->get_coll_id()] = $coll->get_coll_id();
         }
         $this->ret[$databox->get_sbas_id()] = implode(',', $rett);
     }
 }
 /**
  * @param \Datetime $date
  * @param \Datetime $date2
  * @return array
  */
 public function getByDate(\Datetime $date, \Datetime $date2)
 {
     $from = new \DateTime($date->format("Y-m-d") . " 00:00:00");
     $to = new \DateTime($date2->format("Y-m-d") . " 23:59:59");
     $qb = $this->createQueryBuilder();
     $qb->select('c')->from('AppBundle:Event', 'c')->Where('c.date BETWEEN :from AND :to')->setParameter('from', $from)->setParameter('to', $to);
     $result = $qb->getQuery()->getResult();
     return $result;
 }
예제 #23
0
 public function fetchOverdueOpenReminders()
 {
     $em = $this->getEntityManager();
     $today = new \Datetime();
     $query = $em->createQuery('SELECT d
             FROM AppBundle:Document d
             WHERE d.reminderDueDate < :now AND d.reminderStatus = :status
             ORDER BY d.reminderDueDate ASC')->setParameter("now", $today->format('Y-m-d'))->setParameter("status", "offen");
     return $query->getResult();
 }
 public function createProductReport(YousticeShopProduct $product, $code)
 {
     $data = $product->toArray();
     $now = new Datetime();
     $request_data = array('orderNumber' => $code, 'itemDescription' => $data['description'], 'itemName' => $data['name'], 'itemCurrency' => $data['currency'], 'itemPrice' => $data['price'], 'itemCode' => $data['id'], 'deliveryDate' => $data['deliveryDate'], 'orderDate' => $data['orderDate'] ? $data['orderDate'] : $now->format(Datetime::ISO8601), 'shopType' => $this->shop_software_type, 'image' => $data['image'], 'other' => $data['other']);
     $url = $this->generateUrl('services/Api/addTransaction');
     $this->post($url, $request_data);
     $response = $this->responseToArray();
     return $response['redirect_link'];
 }
예제 #25
0
 public function insert($fileData)
 {
     $now = new Datetime('now');
     $data = array('name' => $fileData['file_name'], 'info' => serialize($fileData), 'upload_at' => $now->format('Y-m-d H:i:s'));
     if (isset($fileData['label'])) {
         $data['label'] = $fileData['label'];
     }
     $this->add($data);
     return $this->lastInsertId;
 }
예제 #26
0
 public function Items()
 {
     $this->Pages = Versioned::get_by_stage('SiteTree', 'Live');
     $newPages = new DataObjectSet();
     foreach ($this->Pages as $page) {
         // Only include pages from this host
         if (parse_url($page->AbsoluteLink(), PHP_URL_HOST) == $_SERVER['HTTP_HOST']) {
             // If the page has been set to 0 priority, we set a flag so it won't be included
             if (isset($page->Priority) && $page->Priority <= 0) {
                 $page->Include = false;
             } else {
                 $page->Include = true;
             }
             // The one field that isn't easy to deal with in the template is
             // Change frequency, so we set that here.
             $properties = $page->toMap();
             $created = new Datetime($properties['Created']);
             $now = new Datetime();
             $versions = $properties['Version'];
             $timediff = $now->format('U') - $created->format('U');
             // Check how many revisions have been made over the lifetime of the
             // Page for a rough estimate of it's changing frequency.
             $period = $timediff / ($versions + 1);
             if ($period > 60 * 60 * 24 * 365) {
                 // > 1 year
                 $page->ChangeFreq = 'yearly';
             } else {
                 if ($period > 60 * 60 * 24 * 30) {
                     // > ~1 month
                     $page->ChangeFreq = 'monthly';
                 } else {
                     if ($period > 60 * 60 * 24 * 7) {
                         // > 1 week
                         $page->ChangeFreq = 'weekly';
                     } else {
                         if ($period > 60 * 60 * 24) {
                             // > 1 day
                             $page->ChangeFreq = 'daily';
                         } else {
                             if ($period > 60 * 60) {
                                 // > 1 hour
                                 $page->ChangeFreq = 'hourly';
                             } else {
                                 // < 1 hour
                                 $page->ChangeFreq = 'always';
                             }
                         }
                     }
                 }
             }
             $newPages->push($page);
         }
     }
     return $newPages;
 }
예제 #27
0
function getPublishBeforeDate($date_format = DATE_ATOM)
{
    if (isset($_GET['txtToDate']) && validDate($_GET['txtToDate'])) {
        $d = new Datetime($_GET['txtToDate']);
        $publishBeforeDate = $d->format($date_format);
    } else {
        $d = new Datetime('tomorrow');
        //gets tomorrow's date;
        $publishBeforeDate = $d->format($date_format);
    }
    return $publishBeforeDate;
}
예제 #28
0
 /**
  * update the last update datetime.
  */
 public function updateLastUpdateDateTime()
 {
     // open file
     $lastUpdateStorageFile = fopen($this::LAST_UPDATE_STORAGE_FILE, $this::FILE_READ_WRITE_MODE);
     // Last update dateTime
     $date = new \Datetime();
     // write the last update datetime
     $lastUpdateDateTime = fputs($lastUpdateStorageFile, $date->format('Y-m-d H:i:s'));
     // Close the file
     fclose($lastUpdateStorageFile);
     return $lastUpdateDateTime;
 }
예제 #29
0
 /**
  * Hierbei handelt es sich um eine Funktion, die über die URL nicht aufgerufen werden kann.
  * Stattdessen wird sie vom AutoController aufgerufen, wenn die Ferien automatisch importiert werden sollen
  * Dabei werden Daten, die bereits als Specialdate markiert sind, übersprungen.
  *
  * @author aloeser
  * @return void
  */
 public function importVacations()
 {
     try {
         $importyear = date('Y') + 1;
         $sourceURL = 'http://www.schulferien.org/iCal/Ferien/icals/Ferien_Berlin_' . $importyear . '.ics';
         $icalreader = new ICal($sourceURL);
         $events = $icalreader->events();
         if ($events == array()) {
             //Die angegebene Datei existiert nicht
             throw new Exception();
         }
         $tmpSpecialdates = $this->Specialdate->find('all', array('recursive' => -1, 'conditions' => array('Specialdate.date LIKE ' => $importyear . '-__-__')));
         $specialdates = array();
         foreach ($tmpSpecialdates as $tmpSpecialdate) {
             array_push($specialdates, $tmpSpecialdate['Specialdate']['date']);
         }
         foreach ($events as $event) {
             $timeBegin = $this->icalToUnixtime($event['DTSTART']);
             $timeEnd = $this->icalToUnixtime($event['DTEND']);
             $datetime = new Datetime(date('Y-m-d', $timeBegin));
             for ($i = $timeBegin; $i <= $timeEnd; $i += DAY) {
                 $dateString = $datetime->format('Y-m-d');
                 if (!in_array($dateString, $specialdates)) {
                     //Datum existiert noch nicht
                     if (!($datetime->format('N') >= 6)) {
                         //Kein Wochenende -> Specialdate eintragen, um das Datum zu deaktivieren
                         $this->Specialdate->create();
                         $this->Specialdate->save(array('Specialdate' => array('date' => $dateString)));
                     }
                 } else {
                     //Datum existiert bereits
                 }
                 $datetime->modify("+1 day");
             }
         }
         AutoController::saveLog('Ferienimport', 0, 'SpecialdatesController', 'importVacations');
     } catch (Exception $e) {
         AutoController::saveLog('Ferienimport', 3, 'SpecialdatesController', 'importVacations');
     }
 }
예제 #30
0
 /**
  * Make a new workflow.
  */
 protected function createNewWorkFlow()
 {
     $workflowModel = new Workflow();
     $workflowModel->name = $this->name;
     if ($this->expiredDate instanceof Datetime) {
         $workflowModel->expired_at = $this->expiredDate->format('Y-m-d H:i:s');
     }
     if (!$workflowModel->save()) {
         throw new Exception("Cannot save Workflow: " . json_encode($workflowModel->getErrors()));
     }
     $this->workflow = $workflowModel;
     return $workflowModel->{$workflowModel->tableSchema->primaryKey};
 }