protected function login()
 {
     $user = $this->getUserObject();
     if ($user->isLogged()) {
         $this->_status = self::FAILURE;
         $this->_error_info = array('code' => self::E_ALREADY_LOGGED_IN, 'msg' => 'Already logged in! Log out first!');
     } else {
         $credentials = array('username' => $this->getFirstElementValue('username'), 'password' => $this->getFirstElementValue('password'));
         try {
             $kiwi_user = new Kiwi_User($credentials);
             $this->_status = self::SUCCESS;
             $kiwi_user->login();
         } catch (Kiwi_User_Authentication_Failed_Exception $e) {
             $this->_status = self::FAILURE;
             $this->_error_info = array('code' => self::E_INVALID_CREDENTIALS, 'msg' => 'Incorrect login or password!');
         }
     }
 }
 protected function validate_prihlasovaci_jmeno()
 {
     $elems = $this->_index->get('prihlasovaci_jmeno');
     if (empty($elems)) {
         return self::STR_MISSING;
     }
     $username = $elems[0]->vo->value;
     if ($username === '') {
         return self::STR_MISSING;
     }
     return Kiwi_User::getUserId($username) === null ? self::STR_OK : self::STR_USERNAME_DUPLICITY;
 }
 public function save()
 {
     parent::save();
     $dbh = Project_DB::get();
     switch ($this->_type) {
         case self::PERSON:
             $data = $this->_person->toArray();
             $table = 'clientsp';
             $table_d = 'clientsc';
             break;
         case self::COMPANY:
             $data = $this->_company->toArray();
             $table = 'clientsc';
             $table_d = 'clientsp';
             break;
         default:
             throw new Kiwi_Exception('Kiwi_Client type unknown');
     }
     foreach ($data as $key => $value) {
         if ($value === null) {
             unset($data[$key]);
         }
     }
     $data['ID'] = $this->_data->ID;
     $columns = implode(', ', array_keys($data));
     $column_pdo_hooks = ':' . implode(', :', array_keys($data));
     $query = "REPLACE {$table} ({$columns}) VALUES ({$column_pdo_hooks})";
     $stmt = $dbh->prepare($query);
     foreach ($data as $key => $value) {
         $stmt->bindValue(":{$key}", $value, is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR);
     }
     $query2 = "DELETE FROM {$table_d} WHERE ID=:ID";
     $stmt2 = $dbh->prepare($query2);
     $stmt2->bindValue(':ID', $this->_data->ID, PDO::PARAM_INT);
     $dbh->exec("LOCK TABLES {$table} WRITE, {$table_d} WRITE");
     $locked = true;
     try {
         $stmt->execute();
         $stmt2->execute();
     } catch (PDOException $e) {
         $dbh->exec('UNLOCK TABLES');
         $locked = false;
         $ei = $e->errorInfo;
         throw Kiwi_Exception("Failed to save client - {$ei[2]} ({$ei[0]})");
     }
     if ($locked) {
         $dbh->exec('UNLOCK TABLES');
     }
 }
 protected function validate_prihlasovaci_jmeno()
 {
     $elems = $this->_index->get('prihlasovaci_jmeno');
     if (!empty($elems)) {
         return parent::validate_prihlasovaci_jmeno();
     }
     $username = $this->getFirstElementValue($this->_type == self::TYPE_PERSON ? 'email' : 'firma_email');
     if ($username === '') {
         return self::STR_MISSING;
     }
     return Kiwi_User::getUserId($username) === null ? self::STR_OK : self::STR_USERNAME_DUPLICITY;
 }