soldto) || $partner->soldto == ''){$soldto_search = '%';} else {$soldto_search = '-%';} //default whereclause $whereclause = ''; //NEW ARRAY $criterias = []; $clause = ''; //Check for $_GET variables and build up clause if(isset($get_content) && $get_content!=''){ //GET VARIABLES FROM URL $requests = explode("&", $get_content); //Check for keys and values foreach ($requests as $y){ $v = explode("=", $y); //INCLUDE VARIABLES IN ARRAY $criterias[$v[0]] = $v[1]; if ($v[0] == 'page' || $v[0] =='p' || $v[0] =='totals' || $v[0] =='list' || $v[0] =='history'|| $v[0] =='success_msg'){ //do nothing } elseif ($v[0] == 'available') { // Special case: get available upgrades for current user // This will be handled separately below } elseif ($v[0] == 'version_id') { $clause .= ' AND sv.id = :'.$v[0]; } elseif ($v[0] == 'version') { $clause .= ' AND sv.version = :'.$v[0]; } elseif ($v[0] == 'search') { $clause .= ' AND (sv.name LIKE :'.$v[0].' OR sv.description LIKE :'.$v[0].')'; } else { $clause .= ' AND sv.'.$v[0].' = :'.$v[0]; } } if ($whereclause == '' && $clause !=''){ $whereclause = 'WHERE '.substr($clause, 4); } else { $whereclause .= $clause; } } // Special handling for available upgrades if (isset($criterias['available'])) { // Include version access logic require_once './includes/version_access.php'; $userId = $user_data['id']; // Get all active versions $stmt = $pdo->prepare(" SELECT sv.rowID as id, sv.version, sv.major_version, sv.minor_version, sv.patch_version, sv.name, sv.description, sv.file_size, sv.release_date FROM software_versions sv WHERE sv.status = 'published' ORDER BY sv.major_version DESC, sv.minor_version DESC, sv.patch_version DESC "); $stmt->execute(); $versions = $stmt->fetchAll(PDO::FETCH_ASSOC); // Get user's current versions $ownedVersions = getUserOwnedVersions($userId); $latestOwned = getLatestOwnedVersion($userId); $response = [ 'current_version' => $latestOwned ? $latestOwned['version'] : null, 'owned_versions' => array_map(function($v) { return [ 'version' => $v['version'], 'name' => $v['name'], 'purchased_at' => $v['purchased_at'] ]; }, $ownedVersions), 'available_versions' => [] ]; // Check access for each version foreach ($versions as $version) { $accessInfo = checkVersionAccess($userId, $version['id']); $versionData = [ 'id' => $version['id'], 'version' => $version['version'], 'name' => $version['name'], 'description' => $version['description'], 'file_size' => $version['file_size'], 'release_date' => $version['release_date'], 'is_accessible' => $accessInfo['accessible'], 'requires_payment' => $accessInfo['requires_payment'] ?? false, 'price' => $accessInfo['price'] ?? 0.00, 'access_reason' => $accessInfo['reason'] ]; // Add additional info based on access type if (isset($accessInfo['original_price'])) { $versionData['original_price'] = $accessInfo['original_price']; } if (isset($accessInfo['is_upgrade'])) { $versionData['is_upgrade'] = $accessInfo['is_upgrade']; } if (isset($accessInfo['from_version'])) { $versionData['upgrade_from'] = $accessInfo['from_version']; } if (isset($accessInfo['required_version'])) { $versionData['required_version'] = $accessInfo['required_version']; } $response['available_versions'][] = $versionData; } $messages = $response; } else { // Regular software versions query if(isset($criterias['totals']) && $criterias['totals']==''){ //Request for total rows $sql = 'SELECT count(*) as count FROM software_versions sv '.$whereclause.''; } elseif (isset($criterias['list']) && $criterias['list']=='') { //SQL for Paging $sql = 'SELECT sv.* FROM software_versions sv '.$whereclause.' ORDER BY sv.major_version DESC, sv.minor_version DESC, sv.patch_version DESC'; } else { $current_page = isset($criterias['p']) && is_numeric($criterias['p']) ? (int)$criterias['p'] : 1; $sql = 'SELECT sv.* FROM software_versions sv '.$whereclause.' ORDER BY sv.major_version DESC, sv.minor_version DESC, sv.patch_version DESC LIMIT ?, ?'; $stmt = $pdo->prepare($sql); $stmt->bindValue(1, ($current_page - 1) * $page_rows_products, PDO::PARAM_INT); $stmt->bindValue(2, $page_rows_products, PDO::PARAM_INT); $stmt->execute(); $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); } //Execute Query for totals/list if(isset($criterias['totals']) && $criterias['totals']==''){ $stmt = $pdo->prepare($sql); $stmt->execute(); $messages = $stmt->fetch(); $messages = $messages[0]; } elseif(isset($criterias['list'])){ $stmt = $pdo->prepare($sql); $stmt->execute(); $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); } } //------------------------------------------ //JSON_ENCODE //------------------------------------------ $messages = json_encode($messages, JSON_UNESCAPED_UNICODE); //Send results echo $messages; ?>