/** * save * * @param Data $data * * @return mixed|Data */ public function save(Data $data) { $data->title = trim($data->title); $data->alias = $data->alias ?: OutputFilter::stringURLUnicodeSlug($data->title); if (!$data->alias) { $data->alias = OutputFilter::stringURLSafe((new Date())->toISO8601()); } $mapper = new DataMapper('posts'); // Increment alias $conditions = ['alias' => $data->alias, 'blog' => $data->blog]; $conditions[] = 'id != ' . ($data->id ?: -1); while ($mapper->findOne($conditions)->notNull()) { $conditions['alias'] = $data->alias = String::increment($data->alias, String::INCREMENT_STYLE_DASH); } $data = $mapper->saveOne($data); // Save Categories $categories = $data->category ?: []; $dataSet = []; foreach ($categories as $k => $cat) { $dataSet[$k]['category'] = $cat; $dataSet[$k]['post'] = $data->id; } (new DataMapper('category_post_maps'))->flush($dataSet, ['post' => $data->id]); return $data; }
/** * prepareRecord * * @param NestedRecord|Record $record * * @return void */ protected function prepareRecord(Record $record) { $user = User::get(); $date = DateTime::create(); if (!$record->alias) { $record->alias = $record->title; } $record->alias = OutputFilter::stringURLUnicodeSlug($record->alias); if (!$record->alias) { $record->alias = OutputFilter::stringURLSafe($date->format('Y-m-d-H-i-s')); } // Created date if (!$record->created) { $record->created = $date->toSql(); } // Modified date if ($record->id) { $record->modified = $date->toSql(); } // Created user if (!$record->created_by) { $record->created_by = $user->id; } // Modified user if ($record->id) { $record->modified_by = $user->id; } // Set Ordering or Nested ordering if (!$record->id) { $record->setLocation($record->parent_id, $record::LOCATION_LAST_CHILD); } if (!$record->id) { $record->state = 1; $record->access = 1; $record->topics = 0; $record->posts = 0; } }