Reputation: 317
Been a long time since I've been here but I'm stumped on this one. Unclear if this is a codeignter thing or not but I have this function that pulls a lot of data and takes longer then 60seconds. In dev it allows me to go over 60 seconds but on prod it's a hard stop at 60 seconds.
I've tried changing the execution time in the php.ini... nothing. ini_set('max_execution_time', '300'); woks on some functions but not on my function... I'm lost here and my work is coming down on me. What is the deal?
Here's the function, that ini_set won't work on. Even here, set to zero still times out at 60seconds on prod:
public function cron_clever_import()
{ ini_set('max_execution_time', 0);
$this->load->model('Clever_model', 'clevermodel');
$this->load->model('Licenses_model', 'licenses');
$this->load->model('Users_model', 'users');
$this->load->model('Groups_model', 'groups');
$this->load->model('Userslicenses_model', 'userLicenses');
$this->load->library('Clever');
$adny_group_schools = array();
$adny_group_distric = array();
$special_da_emails = array();
$getChildHierarchy = $this->groups->getChildHierarchy(7699);
foreach($getChildHierarchy as $child_id) {
$adny_group = $this->groups->get($child_id);
if($adny_group->group_type == 'S') {
array_push($adny_group_schools, $child_id);
}
if($adny_group->group_type == 'D'){
array_push($adny_group_distric, $child_id);
}
}
$imploded_adny_groups = implode(",",$adny_group_distric);
$current_da_adny_users = $this->users->getActiveDaAdny($imploded_adny_groups);
foreach($current_da_adny_users as $current_da_adny_user)
{
array_push($special_da_emails, $current_da_adny_user->email);
}
foreach($adny_group_schools as $groupID) {
//arrays for checking our system against clever.
$current_active_emails = array();
$current_clever_emails = array();
$current_in_system = $this->users->getByGroupID($groupID);
//fill array with current active users in otis system
foreach($current_in_system as $current) {
if($current->is_active == 1 && !in_array($current->email, $special_da_emails)) {
array_push($current_active_emails, $current->email);
}
}
//get the entry id and oauth toke to gain access to clever, then grab the data and license info
$is_in_mapping = $this->clevermodel->getCurrentMapByGroupId($groupID, 7699);
if (!empty($is_in_mapping)) {
$clever_teachers = $this->clever->clever_get_school_users($is_in_mapping->clever_school_key, $is_in_mapping->district_oauthtoken, 'teacher');
$clever_staff = $this->clever->clever_get_school_users($is_in_mapping->clever_school_key, $is_in_mapping->district_oauthtoken, 'staff');
$teachers_decoded = json_decode($clever_teachers);
$staff_decoded = json_decode($clever_staff);
}
else {
$group_settings = $this->clevermodel->getSchoolSettings($groupID);
$oauth_token = $this->clevermodel->grabOauthToken($group_settings->district_oauthtoken_id);
//calls for teacher and staff(or school admin)
$clever_teachers = $this->clever->clever_get_school_users($group_settings->entry_id, $oauth_token, 'teacher');
$clever_staff = $this->clever->clever_get_school_users($group_settings->entry_id, $oauth_token, 'staff');
$groupMappingBySchoolId = $this->clevermodel->getCurrentMapBySchoolId($group_settings->entry_id);
if($groupMappingBySchoolId->otis_group_id < 1) {
$teachers_decoded = array();
$staff_decoded = array();
}
else {
$teachers_decoded = json_decode($clever_teachers);
$staff_decoded = json_decode($clever_staff);
}
}
//fill data into coherent array I can work with
foreach ($teachers_decoded->data as $teacher_data) {
if (is_null($teacher_data->data->email) || in_array($teacher_data->data->email, $special_da_emails)) {
//do not add to import users list
} else {
$import_users[$teacher_data->data->id] = array(
'first_name' => $teacher_data->data->name->first,
'last_name' => $teacher_data->data->name->last,
'email' => $teacher_data->data->email,
'role_id' => '2'
);
//push array of clever emails so I can check aginst current in otis
array_push($current_clever_emails, $teacher_data->data->email);
}
}
foreach ($staff_decoded->data as $staff_data) {
if (is_null($staff_data->data->email) || in_array($staff_data->data->email, $special_da_emails)) {
//do not add to import users list
} else {
$import_users[$staff_data->data->id] = array(
'first_name' => $staff_data->data->name->first,
'last_name' => $staff_data->data->name->last,
'email' => $staff_data->data->email,
'role_id' => '3'
);
array_push($current_clever_emails, $staff_data->data->email);
}
}
//if user active in our system but not existing in clever, make them inactive in otis
foreach($current_active_emails as $current_otis) {
if(!in_array($current_otis, $current_clever_emails)) {
$this->users->makeUserInactiveClever($current_otis);
}
}
//do the actual import of users. If they exist and are not active make them active, if they do not exists add them to group and apply license
foreach ($import_users as $clever_users) {
$user_exists = $this->users->getByEmail($clever_users['email']);
if (!empty($user_exists)) {
if ($user_exists->is_active == 0 || $user_exists->is_deleted == 1 || $user_exists->is_locked == 1) {
$this->users->updateInactiveCleverUser($user_exists->id);
}
} else {
$cleverData = array(
'first_name' => $clever_users['first_name'],
'last_name' => $clever_users['last_name'],
'email' => $clever_users['email'],
'role_id' => $clever_users['role_id'],
'password' => 'hidden',
'confirm_password' => 'hidden',
'group_id' => $groupID
);
$saved = $this->save($cleverData);
$new_user = $this->users->getByEmail($clever_users['email']);
if (!empty($new_user)) {
$current_group_license = $this->licenses->getByGroupIDAndTypeForClever(7699, 'opd');
$current_available_licenses = ($current_group_license[0]->license_count - $current_group_license[0]->total_users);
if($current_available_licenses > 0)
{
$add_license = $this->users->addLicenceCleverImport($saved, $current_group_license[0]->id);
$this->userLicenses->add(array(
'license_id' => $current_group_license[0]->id,
'user_id' => $saved,
'start_date' => date('Y-m-d H:i:s'),
'end_date' => $current_group_license[0]->expiration_date,
'expiration_date' => $current_group_license[0]->expiration_date,
'is_active' => 1,
'create_date' => date('Y-m-d H:i:s')
));
}
}
}
}
Upvotes: 0
Views: 91