/** * User goes gym and trains * * @return mixed (array/boolean) */ public function train() { /* Session 1-4 100 strength gain per day Session 5-14 50 strength gain per day Session 15-34 25 strength gain per day Session 35-64 10 strength gain per day Session 65-124 5 strength gain per day Session 125-199 2 strength gain per day Session 200+ 1 strength gain per day */ $r = Service::getDB()->query("SELECT uid FROM `train_historial` WHERE uid = '" . $this->id . "'"); $trainedDays = sizeof($r); if ($trainedDays < 5) { $strengh = 100; } elseif ($trainedDays < 15) { $strengh = 50; } elseif ($trainedDays < 35) { $strengh = 25; } elseif ($trainedDays < 65) { $strengh = 10; } elseif ($trainedDays < 125) { $strengh = 5; } elseif ($trainedDays < 200) { $strengh = 2; } else { $strengh = 1; } $skill = new Skill(); $skill->get($this->id); $skill->strengh += $strengh; if ($skill->save()) { Service::getDB()->insert('train_historial', array('uid' => $this->id, 'date' => $this->now())); $trainedDays++; return array('strengh' => $strengh, 'trainedDays' => $trainedDays); } else { return false; } }
$action = 'filterBySkill'; } } $courses = CourseManager::get_courses_list(); $tableRows = array(); $reportTitle = null; $objSkill = new Skill(); $skills = $objSkill->get_all(); switch ($action) { case 'filterByCourse': $course = api_get_course_info_by_id($selectedCourse); $reportTitle = sprintf(get_lang('AchievedSkillInCourseX'), $course['name']); $tableRows = $objSkill->listAchievedByCourse($selectedCourse); break; case 'filterBySkill': $skill = $objSkill->get($selectedSkill); $reportTitle = sprintf(get_lang('StudentsWhoAchievedTheSkillX'), $skill['name']); $students = UserManager::getUsersFollowedByUser($userId, STUDENT, false, false, false, null, null, null, null, null, null, DRH); $coursesFilter = array(); foreach ($courses as $course) { $coursesFilter[] = $course['id']; } $tableRows = $objSkill->listUsersWhoAchieved($selectedSkill, $coursesFilter); break; } foreach ($tableRows as &$row) { $row['completeName'] = api_get_person_name($row['firstname'], $row['lastname']); $row['achievedAt'] = api_format_date($row['acquired_skill_at'], DATE_FORMAT_NUMBER); $row['courseImage'] = Display::return_icon('course.png', null, null, ICON_SIZE_MEDIUM, null, true); $imageSysPath = sprintf("%s%s/course-pic.png", api_get_path(SYS_COURSE_PATH), $row['c_directory']); if (file_exists($imageSysPath)) {
$skillInfo['courses'][] = ['name' => $courseName, 'date_issued' => api_format_date($userSkillDate, DATE_TIME_FORMAT_LONG)]; $assertionUrl = api_get_path(WEB_CODE_PATH) . "badge/assertion.php?"; $assertionUrl .= http_build_query(array('user' => $user->getId(), 'skill' => $skill->getId(), 'course' => $userSkill->getCourseId(), 'session' => $userSkill->getSessionId())); $badgeAssertions[] = $assertionUrl; } $allowExport = api_get_user_id() == $user->getId(); if ($allowExport) { $backpack = 'https://backpack.openbadges.org/'; $configBackpack = api_get_setting('gradebook.openbadges_backpack'); if (strcmp($backpack, $configBackpack) !== 0) { $backpack = $configBackpack; } $htmlHeadXtra[] = '<script src="' . $backpack . 'issuer.js"></script>'; } $objSkill = new Skill(); $skills = $objSkill->get($skillId); $unbakedBadge = api_get_path(SYS_UPLOAD_PATH) . "badges/" . $skills['icon']; $unbakedBadge = file_get_contents($unbakedBadge); $badgeInfoError = false; $personalBadge = ""; $png = new PNGImageBaker($unbakedBadge); if ($png->checkChunks("tEXt", "openbadges")) { $bakedInfo = $png->addChunk("tEXt", "openbadges", $assertionUrl); $bakedBadge = UserManager::getUserPathById($userId, "system"); $bakedBadge = $bakedBadge . 'badges'; if (!file_exists($bakedBadge)) { mkdir($bakedBadge, api_get_permissions_for_new_directories(), true); } $skillRelUserId = $userSkills[0]->getId(); if (!file_exists($bakedBadge . "/badge_" . $skillRelUserId)) { file_put_contents($bakedBadge . "/badge_" . $skillRelUserId . ".png", $bakedInfo);
/** * @param int $skill_id * @param bool $load_user_data * @param bool $user_id * @return array */ public function get_children($skill_id, $load_user_data = false, $user_id = false) { $skills = $this->find('all', array('where' => array('parent_id = ? ' => $skill_id))); $skill_obj = new Skill(); $skill_rel_user = new SkillRelUser(); if ($load_user_data) { $passed_skills = $skill_rel_user->get_user_skills($user_id); $done_skills = array(); foreach ($passed_skills as $done_skill) { $done_skills[] = $done_skill['skill_id']; } } if (!empty($skills)) { foreach ($skills as &$skill) { $skill['data'] = $skill_obj->get($skill['skill_id']); if (isset($skill['data']) && !empty($skill['data'])) { if (!empty($done_skills)) { $skill['data']['passed'] = 0; if (in_array($skill['skill_id'], $done_skills)) { $skill['data']['passed'] = 1; } } } else { $skill = null; } } } return $skills; }
/** * Generates units from user work and pays his salary * * @return mixed (boolean/array) */ public function work() { /* http://wiki.e-sim.org/index.php/Productivity_formula * P = 10 * (4+E) * N * C * R * Q P - Productivity E - Economy skill level N - Employee multiplier (Number of employees already worked that day in the company.) if employeesWorked <=10 Then N = 1.0 + (10-employeesWorked) * 0.05 elseif employeesWorked <=20 Then N = 1.0 - (employeesWorked-10) * 0.03 elseif employeesWorked <=30 Then N = 0.7 - (employeesWorked-20) * 0.02 else N=0.5; C 1 If home country controls capital 0.75 If not R for manufacture companies: 1.25 If region's country owns the appropriate high raw. (eg: Iron for Weapons) 1 If region's country do not own the appropriate high raw. for raw companies: 1.0 in high regions 0.75 in medium region. Q 1.0 for manufacture companies for raw companies 1.0 for Q1 companies 1.2 for Q2 companies 1.4 for Q3 companies 1.6 for Q4 companies 1.8 for Q5 companies * */ $job = new Job(); $job = $job->getByUid($this->uid); if (!$job) { throw new Exception("you don't have a job"); } $skills = new Skill(); $skills->get($this->uid); $E = $skills->economic; $employeesWorked = 1; //ToDO PENDING if ($employeesWorked <= 10) { $N = 1.0 + (10 - $employeesWorked) * 0.05; } elseif ($employeesWorked <= 20) { $N = 1.0 - ($employeesWorked - 10) * 0.03; } elseif ($employeesWorked <= 30) { $N = 0.7 - ($employeesWorked - 20) * 0.02; } else { $N = 0.5; } $company = new Company(); $company->get($job->company); $region = new Region(); $companyRegion = $region->get($company->region); //does the region have the resource that company produces? // also determine product quality if ($company->productType == Company::PRODUCT_TYPE_RESOURCE) { $R = $companyRegion->resourceAmount / 10; $Q = 1; } else { $product = new Product(); $product->get($company->product); if ($companyRegion->resourceType == $product->resource) { $R = 1.25; } else { $R = 1; } $Q = 0.8 + 0.2 * $company->quality; } $country = new Country(); $country = $country->get($companyRegion->country); $capitalRegion = $region->get($country->capitalRegionId); //is country capital owned by original owners? if ($capitalRegion->country == $capitalRegion->countryConqueror) { $C = 1; } else { $C = 0.75; } if ($companyRegion->resourceAmount > 0) { $productivity = 10 * (4 + $E) * $N * $C * $R * $Q; } else { $productivity = 10 * (4 + $E) * $N * $C * $Q; } $user = new User($this->uid); $user->updateXP('WORK'); $skills->economic += 0.125; $skills->save(); $company->pendingUnits += $productivity; //calculate produced units if ($company->productType == Company::PRODUCT_TYPE_RESOURCE) { $createdUnits = floor($company->pendingUnits); $company->pendingUnits -= $createdUnits; $added = $company->addStock($createdUnits, Company::PRODUCT_TYPE_PRODUCT); if ($added) { $company->save(); } } else { $minProduct = $product->productivityBase * $company->quality; $createdUnits = floor($company->pendingUnits / $minProduct); if ($company->pendingUnits > $minProduct) { } $company->pendingUnits -= $createdUnits * $minProduct; $added = $company->addStock($createdUnits, Company::PRODUCT_TYPE_PRODUCT); if ($added) { $company->save(); } } //pay salary $transactionData = array('quantity' => $job->salary, 'action' => 'PAY_SALARY', 'receiver' => $this->uid, 'receiverType' => Company::RECEIVER_TYPE_USER); if ($company->transaction($transactionData)) { //save historial Service::getDB()->insert('work_historial', array('uid' => $this->uid, 'date' => $this->now())); return array('productivity' => $productivity, 'createdUnits' => $createdUnits); } else { return false; } }
} else { echo 0; } } break; case 'save_profile': if (api_is_platform_admin() || api_is_drh()) { $skill_profile = new SkillProfile(); $params = $_REQUEST; //$params['skills'] = isset($_SESSION['skills']) ? $_SESSION['skills'] : null; $params['skills'] = $params['skill_id']; $skill_data = $skill_profile->save($params); if (!empty($skill_data)) { echo 1; } else { echo 0; } } break; case 'skill_exists': $skill_data = $skill->get($_REQUEST['skill_id']); if (!empty($skill_data)) { echo 1; } else { echo 0; } break; default: echo ''; } exit;