/**
  * Performs the work of inserting or updating the row in the database.
  *
  * If the object is new, it inserts it; otherwise an update is performed.
  * All related objects are also updated in this method.
  *
  * @param      PropelPDO $con
  * @return     int The number of rows affected by this insert/update and any referring fk objects' save() operations.
  * @throws     PropelException
  * @see        save()
  */
 protected function doSave(PropelPDO $con)
 {
     $affectedRows = 0;
     // initialize var to track total num of affected rows
     if (!$this->alreadyInSave) {
         $this->alreadyInSave = true;
         // We call the save method on the following object(s) if they
         // were passed to this object by their coresponding set
         // method.  This object relates to these object(s) by a
         // foreign key reference.
         if ($this->aCcPlayoutHistoryTemplate !== null) {
             if ($this->aCcPlayoutHistoryTemplate->isModified() || $this->aCcPlayoutHistoryTemplate->isNew()) {
                 $affectedRows += $this->aCcPlayoutHistoryTemplate->save($con);
             }
             $this->setCcPlayoutHistoryTemplate($this->aCcPlayoutHistoryTemplate);
         }
         if ($this->isNew()) {
             $this->modifiedColumns[] = CcPlayoutHistoryTemplateTagPeer::ID;
         }
         // If this object has been modified, then save it to the database.
         if ($this->isModified()) {
             if ($this->isNew()) {
                 $criteria = $this->buildCriteria();
                 if ($criteria->keyContainsValue(CcPlayoutHistoryTemplateTagPeer::ID)) {
                     throw new PropelException('Cannot insert a value for auto-increment primary key (' . CcPlayoutHistoryTemplateTagPeer::ID . ')');
                 }
                 $pk = BasePeer::doInsert($criteria, $con);
                 $affectedRows += 1;
                 $this->setDbId($pk);
                 //[IMV] update autoincrement primary key
                 $this->setNew(false);
             } else {
                 $affectedRows += CcPlayoutHistoryTemplateTagPeer::doUpdate($this, $con);
             }
             $this->resetModified();
             // [HL] After being saved an object is no longer 'modified'
         }
         $this->alreadyInSave = false;
     }
     return $affectedRows;
 }
 public function createTemplate($config)
 {
     $this->con->beginTransaction();
     try {
         $type = $config["type"];
         $method = "default" . ucfirst($type) . "Template";
         $default = $this->{$method}();
         $name = isset($config["name"]) ? $config["name"] : $default["name"];
         $fields = isset($config["fields"]) ? $config["fields"] : $default["fields"];
         $doSetDefault = isset($config['setDefault']) ? $config['setDefault'] : false;
         $template = new CcPlayoutHistoryTemplate();
         $template->setDbName($name);
         $template->setDbType($type);
         foreach ($fields as $index => $field) {
             $isMd = $field["isFileMd"] == 'true' ? true : false;
             $templateField = new CcPlayoutHistoryTemplateField();
             $templateField->setDbName($field["name"]);
             $templateField->setDbLabel($field["label"]);
             $templateField->setDbType($field["type"]);
             $templateField->setDbIsFileMD($isMd);
             $templateField->setDbPosition($index);
             $template->addCcPlayoutHistoryTemplateField($templateField);
         }
         $template->save($this->con);
         if ($doSetDefault) {
             $this->setConfiguredItemTemplate($template->getDbid());
         }
         $this->con->commit();
         return $template->getDbid();
     } catch (Exception $e) {
         $this->con->rollback();
         throw $e;
     }
 }