public function paidOperation($id)
 {
     global $DB;
     if (!$id) {
         return false;
     }
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
     $operation = $DB->row('SELECT * FROM draft_account_operations WHERE id = ? AND status IS NULL', $id);
     $account = new account();
     $this->_transactionId = $account->start_transaction($_SESSION['uid'], $this->_transactionId);
     switch ($operation['op_type']) {
         case 'project':
             $project = $DB->row('SELECT id, payed_info FROM projects WHERE id = ?i', $operation['parent']);
             if (!$project['id']) {
                 return 'Ошибка обработки операции.';
             }
             if ($account->sum >= $operation['ammount']) {
                 if ($error = $account->Buy($bill_id, $this->_transactionId, $operation['op_code'], $_SESSION['uid'], trim($operations['descr'], '/'), trim($operations['comments'], '/'), 1, true)) {
                     return $error;
                 }
             }
             if (!$bill_id) {
                 return 'Не хватает денег.';
             }
             $update = array();
             switch ($operation['option']) {
                 case 'color':
                     $update['is_color'] = true;
                     $update['payed_items'] = $project['payed_info'] | '010';
                     break;
                 case 'bold':
                     $update['is_bold'] = true;
                     $update['payed_items'] = $project['payed_info'] | '001';
                     break;
                 case 'top':
                     $update['top_from'] = date('d.m.Y H:i', strtotime('now'));
                     $update['top_to'] = date('d.m.Y H:i', strtotime("now +{$operation['op_count']} day"));
                     break;
                 case 'logo':
                     $update['logo_id'] = $operation['src_id'];
                     $update['payed_items'] = $project['payed_info'] | '100';
                     break;
             }
             $update['billing_id'] = $bill_id;
             $DB->update('projects', $update, 'id = ?', $operation['parent']);
             header('Location: /bill/success/');
             exit;
             break;
         case 'contest':
             // Публикация конкурса
             if ($account->sum >= $operation['ammount']) {
                 if ($error = $account->Buy($bill_id, $this->_transactionId, $operation['op_code'], $_SESSION['uid'], trim($operations['descr'], '/'), trim($operations['comments'], '/'), 1, true)) {
                     return $error;
                 }
             }
             if (!$bill_id) {
                 return 'Не хватает денег.';
             }
             $key = md5(microtime());
             $prj = new tmp_project($key);
             if (get_uid()) {
                 $prj->init(1);
             }
             $draft = new drafts();
             $project = $drafts->getDraft($operation['parent'], $_SESSION['uid'], 1);
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
             $attachedfiles = new attachedfiles();
             $attachedfiles_tmpdraft_files = drafts::getAttachedFiles($operation['parent'], 4);
             if ($attachedfiles_tmpdraft_files) {
                 $attachedfiles_prj_files = array();
                 foreach ($attachedfiles_tmpdraft_files as $attachedfiles_draft_file) {
                     $attachedfiles_draft_files[] = $attachedfiles_draft_file;
                 }
                 $attachedfiles->setFiles($attachedfiles_draft_files, 1);
             }
             $insert = array('user_id' => $_SESSION['uid'], 'name' => $project['name'], 'descr' => $project['descr'], 'kind' => $project['kind'], 'cost' => $project['cost'], 'currency' => $project['currency'], 'country' => $project['country'] > 0 ? $project['country'] : 'NULL', 'city' => $project['city'] > 0 ? $project['city'] : 'NULL', 'payed' => '0', 'pro_only' => $project['pro_only'], 'logo_id' => 'NULL', 'link' => $project['logo_link'], 'is_color' => 'f', 'is_bold' => 'f', 'billing_id' => 0, 'payed_items' => '000', 'folder_id' => 0, 'budget_type' => $project['budget_type'], 'priceby' => $project['priceby'], 'prefer_sbr' => $project['prefer_sbr'], 'end_date' => $project['p_end_date'], 'win_date' => $project['p_win_date']);
             if (!empty($project['categories'])) {
                 $cat = explode('|', $project['categories']);
                 $categories[0] = array('category_id' => intval($cat[0]), 'subcategory_id' => intval($cat[1]));
             }
             $create = $prj->addPrj($insert, $attachedfiles_draft_files, $categories);
             // Добавляем проект
             if ($create) {
                 $drafts->DeleteDraft($draft_id, $uid, 1);
                 header('Location: /bill/success/');
                 exit;
             }
             break;
         case 'account':
             // Покупка ПРО
             break;
     }
 }
Exemple #2
0
 public function transferProjects()
 {
     $projects = $this->getCreatedProjects();
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/drafts.php';
     if ($projects) {
         $key = md5(microtime());
         $prj = new tmp_project($key);
         $this->setPath();
         foreach ($projects as $k => $project) {
             $files = $this->getProjectAttach($project['id']);
             if ($project['kind'] == 7) {
                 $tmp_dir = $this->tmpAbsDir;
             } else {
                 $tmp_dir = $this->dstAbsDir;
             }
             if ($files) {
                 $table = 'file_projects';
                 $files = $this->transferFiles($files, $table, $tmp_dir);
             }
             if ($project['kind'] != 7) {
                 $attach = array_map(create_function('$a', 'return array("file_id" => $a["id"]);'), $files);
                 $insert = array('user_id' => $_SESSION['uid'] ? $_SESSION['uid'] : $_SESSION['RUID'], 'name' => addslashes($project['name']), 'descr' => addslashes($project['descr']), 'kind' => $project['kind'], 'cost' => $project['cost'], 'currency' => $project['currency'], 'country' => $project['country'] > 0 ? $project['country'] : 'NULL', 'city' => $project['city'] > 0 ? $project['city'] : 'NULL', 'payed' => '0', 'pro_only' => $project['pro_only'], 'logo_id' => 'NULL', 'link' => $project['logo_link'], 'is_color' => 'f', 'is_bold' => 'f', 'billing_id' => 0, 'payed_items' => '000', 'folder_id' => 0, 'budget_type' => $project['budget_type'], 'priceby' => $project['priceby'], 'prefer_sbr' => $project['prefer_sbr']);
                 $cat = explode('|', $project['categories']);
                 $categories[0] = array('category_id' => intval($cat[0]), 'subcategory_id' => intval($cat[1]));
                 $prj->addPrj($insert, $attach, $categories);
                 // Добавляем проект
                 if ($insert['id']) {
                     $delete_projects[] = $project['id'];
                 } else {
                     $error_project[] = "Ошибка создания проекта #{$project['id']}";
                 }
                 // Проверяем платные опции если есть обновляем в отложенных операциях тк выше все операции выбранные там уже ушли туда
                 if ($insert['id'] && ($project['is_color'] || $project['is_bold'] || $project['top_count'] > 0 || $project['logo_id'] > 0)) {
                     $update = array('parent_id' => $insert['id']);
                     $this->_db->update('draft_account_operations', $update, "parent_id = ? AND op_type = 'project' AND uid = ?", $project['id'], wizard::getUserIDReg());
                     if ($project['logo_link']) {
                         $update = array('extra' => $project['logo_link']);
                         $this->_db->update('draft_account_operations', $update, "parent_id = ? AND op_type = 'contest' AND option = 'logo' AND uid = ?", $contest['id'], wizard::getUserIDReg());
                     }
                 }
                 // Если это конкурс он сразу идет в черновики
             } else {
                 $draft = new drafts();
                 $cat = explode('|', $project['categories']);
                 $insert = array('uid' => $_SESSION['uid'] ? $_SESSION['uid'] : $_SESSION['RUID'], 'name' => addslashes($project['name']), 'descr' => addslashes($project['descr']), 'kind' => $project['kind'], 'cost' => $project['cost'], 'currency' => $project['currency'], 'country' => $project['country'], 'end_date' => $project['end_date'], 'win_date' => $project['win_date'], 'city' => $project['city'], 'pro_only' => $project['pro_only'] == 't' ? 1 : 0, 'budget_type' => $project['budget_type'], 'priceby' => $project['priceby'], 'prefer_sbr' => $project['prefer_sbr'], 'categories' => array(0 => $cat[0]), 'subcategories' => array(0 => $cat[1]), 'logo_id' => $project['logo_id'], 'link' => $project['logo_link']);
                 $contest = $draft->SaveProject($insert, $files);
                 if ($contest['id']) {
                     $delete_projects[] = $project['id'];
                 } else {
                     $error_project[] = "ошибка создания конкурса #{$project['id']}";
                 }
                 // Проверяем платные опции если есть пишем в отложенные платежи
                 if ($contest['id'] && ($project['is_color'] || $project['is_bold'] || $project['top_count'] > 0 || $project['logo_id'] > 0)) {
                     $update = array('parent_id' => $contest['id']);
                     $this->_db->update('draft_account_operations', $update, "parent_id = ? AND op_type = 'contest' AND uid = ?", $project['id'], wizard::getUserIDReg());
                     if ($project['logo_link']) {
                         $update = array('extra' => $project['logo_link']);
                         $this->_db->update('draft_account_operations', $update, "parent_id = ? AND op_type = 'contest' AND option = 'logo' AND uid = ?", $contest['id'], wizard::getUserIDReg());
                     }
                 }
             }
         }
         if ($delete_projects) {
             $this->_db->query('DELETE FROM wizard_projects WHERE id IN (?l) AND wiz_uid = ?', $delete_projects, $this->getWizardUserID());
         }
         if ($error_projects) {
             foreach ($error_projects as $error) {
                 $this->log->writeln('Error transfer projects content () - user (' . wizard::getUserIDReg() . '|' . $this->getWizardUserID() . ") - Error: {$error}");
             }
         }
     }
     return $error;
 }