diff --git a/src/Controller/StateBalancesController.php b/src/Controller/StateBalancesController.php index 78478c45c..90944a268 100644 --- a/src/Controller/StateBalancesController.php +++ b/src/Controller/StateBalancesController.php @@ -64,13 +64,21 @@ class StateBalancesController extends AppController ->contain(['Transactions']); $involvedUserIds = []; + foreach($transferTransactions as $sendCoins) { + //var_dump($sendCoins); if($sendCoins->state_user_id != $user['id']) { array_push($involvedUserIds, intval($sendCoins->state_user_id)); } else if($sendCoins->receiver_user_id != $user['id']) { array_push($involvedUserIds, intval($sendCoins->receiver_user_id)); } } + + /*echo "state user from sendCoins: $sendCoins->state_user_id
"; + echo "receiver user from sendCoins: $sendCoins->receiver_user_id
"; + echo "user id from logged in user: ".$user['id']. '
'; + */ + //var_dump($involvedUserIds); // exchange key with values and drop duplicates $involvedUser_temp = array_flip($involvedUserIds); // exchange back @@ -81,6 +89,7 @@ class StateBalancesController extends AppController 'where' => ['id IN' => $involvedUserIds], 'fields' => ['id', 'first_name', 'last_name', 'email'] ]); + //var_dump($involvedUser->toArray()); $involvedUserIndices = []; foreach($involvedUser as $involvedUser) { $involvedUserIndices[$involvedUser->id] = $involvedUser; @@ -101,7 +110,8 @@ class StateBalancesController extends AppController 'type' => 'creation', 'transaction_id' => $creation->transaction_id, 'date' => $creation->transaction->received, - 'balance' => $creation->amount + 'balance' => $creation->amount, + 'memo' => $creation->transaction->memo ]); } @@ -121,7 +131,8 @@ class StateBalancesController extends AppController 'type' => $type, 'transaction_id' => $sendCoins->transaction_id, 'date' => $sendCoins->transaction->received, - 'balance' => $sendCoins->amount + 'balance' => $sendCoins->amount, + 'memo' => $sendCoins->transaction->memo ]); } $this->set('transactions', $transactions); diff --git a/src/Controller/TransactionCreationsController.php b/src/Controller/TransactionCreationsController.php index a79550170..6ddd42419 100644 --- a/src/Controller/TransactionCreationsController.php +++ b/src/Controller/TransactionCreationsController.php @@ -127,7 +127,8 @@ class TransactionCreationsController extends AppController $session_id = $session->read('session_id'); $response = $http->get($url . '/checkTransaction', [ 'session_id' => $session_id, - 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()) + 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), + 'balance' => $user['balance'] ]); $json = $response->getJson(); if($json['state'] != 'success') { @@ -160,7 +161,7 @@ class TransactionCreationsController extends AppController } } else { - $this->Flash->error(__('No Valid Receiver Public given')); + $this->Flash->error(__('Building transaction failed')); } // */ @@ -246,16 +247,86 @@ class TransactionCreationsController extends AppController // amount $memo = $requestData['memo']; $amountCent = $this->GradidoNumber->parseInputNumberToCentNumber($requestData['amount']); + $mode = 'next'; + if(isset($requestData['add'])) {$mode = 'add'; } + if(!isset($requestData['user']) || count($requestData['user']) == 0) { $this->Flash->error(__('no user choosen')); } else { $users = $requestData['user']; - var_dump($users); + //var_dump(array_keys($users)); $receiverUsers = $stateUserTable ->find('all') - ->where(['id' => array_keys($users)]) - ->select(['public_key', 'email']); - //$identHash = TransactionCreation::DRMakeStringHash($receiverProposal[$receiverIndex]['email']); + ->where(['id IN' => array_keys($users)]) + ->select(['public_key', 'email']) + ->contain(false); + $transactions = []; + //var_dump($receiverUsers); + foreach($receiverUsers as $receiverUser) { + $pubKeyHex = bin2hex(stream_get_contents($receiverUser->public_key)); + $identHash = TransactionCreation::DRMakeStringHash($receiverUser->email); + $builderResult = TransactionCreation::build( + $amountCent, + $memo, + $pubKeyHex, + $identHash + ); + if($builderResult['state'] == 'success') { + array_push($transactions, base64_encode($builderResult['transactionBody']->serializeToString())); + } + } + $creationTransactionCount = count($transactions); + if($creationTransactionCount > 0) { + $http = new Client(); + try { + $loginServer = Configure::read('LoginServer'); + $url = $loginServer['host'] . ':' . $loginServer['port']; + $session_id = $session->read('session_id'); + /* + * $response = $http->post($url . '/checkTransaction', json_encode([ + 'session_id' => $session_id, + 'transaction_base64' => base64_encode($builderResult['transactionBody']->serializeToString()), + 'balance' => $user['balance'] + ]), ['type' => 'json']); + */ + $transactionbody = json_encode([ + 'session_id' => $session_id, + 'transaction_base64' => $transactions, + 'balance' => $user['balance'] + ]); + //die($transactionbody); + $response = $http->post($url . '/checkTransaction', $transactionbody, ['type' => 'json']); + //var_dump($response->getStringBody()); + $json = $response->getJson(); + if($json['state'] != 'success') { + if($json['msg'] == 'session not found') { + $session->destroy(); + return $this->redirect(Router::url('/', true) . 'account', 303); + //$this->Flash->error(__('session not found, please login again')); + } else { + $this->Flash->error(__('login server return error: ' . json_encode($json))); + } + } else { + $pendingTransactionCount = $session->read('Transactions.pending'); + if($pendingTransactionCount == null) { + $pendingTransactionCount = $creationTransactionCount; + } else { + $pendingTransactionCount += $creationTransactionCount; + } + $session->write('Transactions.pending', $pendingTransactionCount); + echo "pending: " . $pendingTransactionCount; + if($mode === 'next') { + return $this->redirect(Router::url('/', true) . 'account/checkTransactions', 303); + } else { + $this->Flash->success(__('Transaction submitted for review.')); + } + } + + } catch(\Exception $e) { + $msg = $e->getMessage(); + $this->Flash->error(__('error http request: ') . $msg); + } + } } diff --git a/src/Template/Element/printGradido.ctp b/src/Template/Element/printGradido.ctp index 0e4d71173..f8ac29eb6 100644 --- a/src/Template/Element/printGradido.ctp +++ b/src/Template/Element/printGradido.ctp @@ -11,6 +11,9 @@ $class = ''; //$title = '' . $number; /*if($number == 0) $class = "grd-default-currency"; else if($number > 0) $class = "grd-positive-currency";*/ +if($number < 0) { + $class = 'grd-negative-currency'; +} ?> diff --git a/src/Template/Layout/frontend.ctp b/src/Template/Layout/frontend.ctp index 878e77102..039a96bb3 100644 --- a/src/Template/Layout/frontend.ctp +++ b/src/Template/Layout/frontend.ctp @@ -50,7 +50,7 @@ if(!isset($balance)) {

Community Server in Entwicklung

-

Alpha 0.6.0

+

Alpha 0.9.0