public function removeUser(NsmUser &$user)
 {
     try {
         /*
          * These are our connections to any cronks
          */
         foreach ($user->cronkPrincipals as $cp) {
             $re = AppKitDoctrineUtil::createQuery()->delete('CronkPrincipalCronk cpc')->andWhere('cpc.cpc_cronk_id=? and cpc.cpc_principal_id=?', array($cp->cpc_cronk_id, $cp->cpc_principal_id))->execute();
         }
         /*
          * Our cronks
          */
         foreach ($user->cronks as $cronk) {
             /*
              * All connections to our cronks
              */
             AppKitDoctrineUtil::createQuery()->delete('CronkPrincipalCronk cpc')->andWhere('cpc.cpc_cronk_id=?', array($cronk->cronk_id))->execute();
             $cronk->delete();
         }
         AppKitDoctrineUtil::getConnection()->beginTransaction();
         $this->updateUserroles($user, array());
         $targets = $user->getTargets();
         foreach ($targets as $target) {
             $vals = $user->getTargetValues($target->get("target_name"));
             foreach ($vals as $value) {
                 $value->delete();
             }
         }
         $principals = $user->getPrincipals();
         if (!$principals instanceof NsmPrincipal) {
             foreach ($principals as $pr) {
                 if ($pr->NsmPrincipalTarget) {
                     foreach ($pr->NsmPrincipalTarget as $pr_t) {
                         $pr_t->delete();
                     }
                 }
                 $pr->delete();
             }
         } else {
             if ($principals->NsmPrincipalTarget) {
                 foreach ($principals->NsmPrincipalTarget as $pr_t) {
                     $pr_t->delete();
                 }
             }
             $principals->delete();
         }
         $user->delete();
         AppKitDoctrineUtil::getConnection()->commit();
         return true;
     } catch (Exception $e) {
         AppKitDoctrineUtil::getConnection()->rollback();
         $this->getContext()->getLoggerManager()->log($e->getMessage());
         throw $e;
     }
 }
 public function executeRemove(AgaviRequestDataHolder $rd)
 {
     try {
         AppKitDoctrineUtil::getConnection()->beginTransaction();
         $roleadmin = $this->getContext()->getModel('RoleAdmin', 'AppKit');
         $padmin = $this->getContext()->getModel('PrincipalAdmin', 'AppKit');
         $ids = $rd->getParameter("ids", array());
         foreach ($ids as $id) {
             $role = $roleadmin->getRoleById($id);
             if (!$role) {
                 continue;
             }
             $roleadmin->removeRole($role);
         }
         AppKitDoctrineUtil::getConnection()->commit();
     } catch (Exception $e) {
         try {
             AppKitDoctrineUtil::getConnection()->rollback();
         } catch (Doctrine_Transaction_Exception $e) {
         }
         $this->setAttribute("error", $e->getMessage());
     }
     return 'Success';
 }
 public function executeWrite(AgaviRequestDataHolder $rd)
 {
     // We need the execute method to work with parameter od the request!
     try {
         AppKitDoctrineUtil::getConnection()->beginTransaction();
         /** @var $useradmin AppKit_UserAdminModel **/
         $useradmin = $this->getContext()->getModel('UserAdmin', 'AppKit');
         /** @var $padmin AppKit_PrincipalAdminModel **/
         $padmin = $this->getContext()->getModel('PrincipalAdmin', 'AppKit');
         if ($rd->getParameter('id') == 'new') {
             $user = new NsmUser();
         } else {
             $user = $useradmin->getUserById($rd->getParameter('id'));
         }
         $useradmin->updateUserData($user, $rd);
         if ($rd->getParameter('password_validate', false) !== false) {
             $useradmin->updateUserPassword($user, $rd->getParameter('password_validate'));
         }
         // Updating the roles
         $useradmin->updateUserroles($user, $rd->getParameter('userroles', array()));
         $padmin->updatePrincipalValueData($user->principal, $rd->getParameter('principal_target', array()), $rd->getParameter('principal_value', array()));
         AppKitDoctrineUtil::getConnection()->commit();
     } catch (Exception $e) {
         try {
             AppKitDoctrineUtil::getConnection()->rollback();
         } catch (Doctrine_Transaction_Exception $e) {
         }
         print_r($e->getTraceAsString());
         $this->setAttribute("error", $e->getMessage());
     }
     return 'Success';
 }
 public function deleteCronkRecord($cronkid, $cronkname, $own = true)
 {
     if ($this->agaviUser->hasCredential('icinga.cronk.custom') === false && $this->agaviUser->hasCredential('icinga.cronk.admin') === false) {
         throw new AppKitModelException('No access to delete cronks!');
     }
     $q = AppKitDoctrineUtil::createQuery()->select('c.*')->from('Cronk c')->where('c.cronk_uid=?', array($cronkid));
     if ($own == true && $this->agaviUser->hasCredential('icinga.cronk.admin') === false) {
         $q->andWhere('c.cronk_user_id=?', array($this->user->user_id));
     }
     $cronk = $q->execute()->getFirst();
     if ($cronk instanceof Cronk && $cronk->cronk_id > 0) {
         AppKitDoctrineUtil::getConnection()->beginTransaction();
         $params = array($cronk->cronk_id);
         AppKitDoctrineUtil::createQuery()->delete('CronkCategoryCronk c')->andWhere('c.ccc_cronk_id=?')->execute($params);
         AppKitDoctrineUtil::createQuery()->delete('CronkPrincipalCronk c')->andWhere('c.cpc_cronk_id=?')->execute($params);
         AppKitDoctrineUtil::getConnection()->commit();
         $cronk->delete();
         return true;
     } else {
         throw new AppKitModelException('Could not delete cronk: ' . $cronkid);
     }
 }
 private function deleteAllPrincipalTargetEntries(NsmPrincipal &$p)
 {
     AppKitDoctrineUtil::getConnection()->beginTransaction();
     foreach ($p->NsmPrincipalTarget as $pt) {
         $pt->NsmTargetValue->delete();
         $pt->delete();
     }
     AppKitDoctrineUtil::getConnection()->commit();
     return true;
 }
 /**
  * Updates the simple role data
  * @param NsmRole $role
  * @param AgaviRequestDataHolder $rd
  * @return boolean
  * @author Marius Hein
  */
 public function updateRoleData(NsmRole &$role, AgaviRequestDataHolder &$rd)
 {
     AppKitDoctrineUtil::updateRecordsetFromArray($role, $rd->getParameters(), self::$editableAttributes);
     // Checking the principal
     if (!$role->NsmPrincipal->principal_id) {
         $role->NsmPrincipal->principal_type = NsmPrincipal::TYPE_ROLE;
     }
     if ($role->role_id === null) {
         // insert a new role
         $role->save();
     } else {
         // update role
         $parts = array();
         $params = array();
         foreach ($role as $property => $value) {
             if ($property == "role_id" || !in_array($property, self::$editableAttributes)) {
                 continue;
             }
             if ($value === null) {
                 $parts[] = "{$property} = NULL";
             } else {
                 $parts[] = "{$property} = ? ";
                 $params[] = $value;
             }
         }
         $params[] = $role->role_id;
         $dql = "UPDATE NsmRole SET " . implode(",", $parts) . " WHERE role_id = ?";
         AppKitLogger::warn("Test: %s - %s", $dql, var_export($params, true));
         $query = new Doctrine_Query();
         $query->setConnection(AppKitDoctrineUtil::getConnection());
         $query->parseDqlQuery($dql);
         $query->execute($params);
     }
     return true;
 }