initial commit
This commit is contained in:
202
app/Model/UserGroup.php
Normal file
202
app/Model/UserGroup.php
Normal file
@@ -0,0 +1,202 @@
|
||||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* @property Expense $Expense
|
||||
*/
|
||||
class UserGroup extends AppModel
|
||||
{
|
||||
var $name='UserGroup';
|
||||
|
||||
|
||||
function list($fields = array('*'),$conditions = array() )
|
||||
{
|
||||
$returnData = array();
|
||||
$userGroups = $this->find('all', array(
|
||||
'fields' => $fields,
|
||||
'conditions' => $conditions,
|
||||
));
|
||||
if(!empty($userGroups)){
|
||||
foreach ($userGroups as $userGroup){
|
||||
$returnData[] = $userGroup['UserGroup'];
|
||||
}
|
||||
}
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
function listWithExpense($fields = array('*'),$conditions = array() )
|
||||
{
|
||||
$returnData = array();
|
||||
$userGroups = $this->find('all', array(
|
||||
'fields' => $fields,
|
||||
'conditions' => $conditions,
|
||||
'joins' => array(
|
||||
array(
|
||||
'table' => 'expenses',
|
||||
'alias' => 'Expense',
|
||||
'type' => 'INNER',
|
||||
'conditions' => array(
|
||||
'Expense.unique_url = UserGroup.unique_url'
|
||||
)
|
||||
)
|
||||
)
|
||||
));
|
||||
|
||||
// TODO why loop
|
||||
if(!empty($userGroups)){
|
||||
foreach ($userGroups as $userGroup){
|
||||
$temp = array_merge($userGroup['UserGroup'], $userGroup['Expense']);
|
||||
$returnData[] = $temp;
|
||||
}
|
||||
}
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
public function groupListWithExpense($fields = array('*'), $conditions = array()) {
|
||||
$returnData = array();
|
||||
$startTime = microtime(true);
|
||||
|
||||
$expenseType = isset($conditions['expense_type']) ? $conditions['expense_type'] : null;
|
||||
unset($conditions['expense_type']); // unset becausse user_groups has no column expense_type
|
||||
|
||||
// Get all user groups first
|
||||
$userGroups = $this->find('all', array(
|
||||
'conditions' => $conditions
|
||||
));
|
||||
|
||||
if (empty($userGroups)) {
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
// Collect all unique_url values
|
||||
$uniqueUrls = Hash::extract($userGroups, '{n}.UserGroup.unique_url');
|
||||
$uniqueUrls = array_values(array_unique(array_filter($uniqueUrls)));
|
||||
|
||||
if (empty($uniqueUrls)) {
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
$this->Expense = ClassRegistry::init('Expense');
|
||||
|
||||
$expenseFields = array(
|
||||
'Expense.id',
|
||||
'Expense.unique_url',
|
||||
'Expense.title',
|
||||
'Expense.create_date'
|
||||
);
|
||||
|
||||
// 1. Query expenses table once
|
||||
$expenseConditions = array('Expense.unique_url' => $uniqueUrls);
|
||||
if ($expenseType !== null) {
|
||||
$expenseConditions['Expense.expense_type'] = $expenseType;
|
||||
}
|
||||
$expenses = $this->Expense->find('all', array(
|
||||
'fields' => $expenseFields,
|
||||
'conditions' => $expenseConditions,
|
||||
));
|
||||
|
||||
$mainExpenses = Hash::extract($expenses, '{n}.Expense');
|
||||
$returnData = array_merge($returnData, $mainExpenses);
|
||||
|
||||
// Find which unique_url values were not found
|
||||
$foundUrls = Hash::extract($expenses, '{n}.Expense.unique_url');
|
||||
$missingUrls = array_values(array_diff($uniqueUrls, $foundUrls));
|
||||
|
||||
if (empty($missingUrls)) {
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
|
||||
// 2. Query backup_expenses once
|
||||
/** @var DboSource $db */
|
||||
$db = ConnectionManager::getDataSource('default');
|
||||
|
||||
$backupExpenses = $db->fetchAll(
|
||||
"SELECT id, unique_url, title, create_date
|
||||
FROM backup_expenses AS Expense
|
||||
WHERE unique_url IN (" . implode(',', array_fill(0, count($missingUrls), '?')) . ")",
|
||||
$missingUrls
|
||||
);
|
||||
|
||||
$backupData = Hash::extract($backupExpenses, '{n}.Expense');
|
||||
$returnData = array_merge($returnData, $backupData);
|
||||
|
||||
$foundBackupUrls = Hash::extract($backupExpenses, '{n}.Expense.unique_url');
|
||||
$missingUrls = array_values(array_diff($missingUrls, $foundBackupUrls));
|
||||
|
||||
if (empty($missingUrls)) {
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
3. Query archive expenses once
|
||||
try {
|
||||
/** @var DboSource $archiveDb */
|
||||
$archiveDb = ConnectionManager::getDataSource('archieve'); // TODO
|
||||
|
||||
$archiveExpenses = $archiveDb->fetchAll(
|
||||
"SELECT id, unique_url, title, create_date
|
||||
FROM expenses AS Expense
|
||||
WHERE unique_url IN (" . implode(',', array_fill(0, count($missingUrls), '?')) . ")",
|
||||
$missingUrls
|
||||
);
|
||||
|
||||
$archiveData = Hash::extract($archiveExpenses, '{n}.Expense');
|
||||
$returnData = array_merge($returnData, $archiveData);
|
||||
} catch (MissingConnectionException $ex) {
|
||||
// Archive DB unavailable (e.g. local dev), skip silently
|
||||
}
|
||||
|
||||
return $returnData;
|
||||
}
|
||||
|
||||
function isExistUserGroup(int $user_id, string $unique_url)
|
||||
{
|
||||
$result = false;
|
||||
$userGroups = $this->find('first', array(
|
||||
'conditions' => array(
|
||||
'user_id' => $user_id,
|
||||
'unique_url' => $unique_url,
|
||||
),
|
||||
));
|
||||
if(!empty($userGroups)){
|
||||
$result = true;
|
||||
$userGroups = $userGroups['UserGroup'];
|
||||
}
|
||||
return array($result,$userGroups);
|
||||
}
|
||||
|
||||
function add($inputData)
|
||||
{
|
||||
$result = false;
|
||||
|
||||
if(!empty($inputData))
|
||||
{
|
||||
$fileds = array();
|
||||
$dbData["UserGroup"] = $inputData;
|
||||
if($this->save($dbData,false,$fileds)){
|
||||
$dbData["UserGroup"]['id'] = $this->id;
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
return array($result,$dbData["UserGroup"]);
|
||||
}
|
||||
|
||||
function deleteUG($deleteConditions)
|
||||
{
|
||||
return $this->deleteAll(
|
||||
array($deleteConditions)
|
||||
);
|
||||
}
|
||||
|
||||
function updateUG($updateFields,$updateConditions)
|
||||
{
|
||||
$result = false;
|
||||
if(!empty($updateFields) && !empty($updateConditions))
|
||||
{
|
||||
if($this->updateAll($updateFields, $updateConditions)){
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user