public static function createEmptyDocument(array $params) { $defaults = array('content' => "New Document Content", 'sponsor' => null, 'sponsorType' => null); $params = array_replace_recursive($defaults, $params); if (is_null($params['sponsor'])) { throw new \Exception("Sponsor Param Required"); } $document = new Doc(); DB::transaction(function () use($document, $params) { $document->title = $params['title']; $document->save(); switch ($params['sponsorType']) { case static::SPONSOR_TYPE_INDIVIDUAL: $document->userSponsor()->sync(array($params['sponsor'])); break; case static::SPONSOR_TYPE_GROUP: $document->groupSponsor()->sync(array($params['sponsor'])); break; default: throw new \Exception("Invalid Sponsor Type"); } $template = new DocContent(); $template->doc_id = $document->id; $template->content = "New Document Content"; $template->save(); $document->init_section = $template->id; $document->save(); }); Event::fire(MadisonEvent::NEW_DOCUMENT, $document); return $document; }