function createPermissionGroups($company_id)
 {
     Debug::text('Adding Preset Permission Groups: ' . $company_id, __FILE__, __LINE__, __METHOD__, 9);
     $pf = new PermissionFactory();
     $pf->StartTransaction();
     if (getTTProductEdition() == 20) {
         $preset_flags = array('invoice' => 0, 'job' => 1, 'document' => 0);
         /*
         			$preset_flags = array(
         								'job' => 1,
         								'invoice' => 1,
         								'document' => 1,
         								);
         */
     } else {
         $preset_flags = array();
     }
     $preset_options = $pf->getOptions('preset');
     foreach ($preset_options as $preset_id => $preset_name) {
         $pcf = new PermissionControlFactory();
         $pcf->setCompany($company_id);
         $pcf->setName($preset_name);
         $pcf->setDescription('');
         if ($pcf->isValid()) {
             $pcf_id = $pcf->Save(FALSE);
             $this->permission_presets[$preset_id] = $pcf_id;
             $pf->applyPreset($pcf_id, $preset_id, $preset_flags);
         }
     }
     //$pf->FailTransaction();
     $pf->CommitTransaction();
 }
 function applyPreset($permission_control_id, $preset, $preset_flags)
 {
     $preset_permissions = $this->getPresetPermissions($preset, $preset_flags);
     if (!is_array($preset_permissions)) {
         return FALSE;
     }
     $this->setPermissionControl($permission_control_id);
     $pf = new PermissionFactory();
     $pf->StartTransaction();
     //Delete all previous permissions for this user.
     $this->deletePermissions($this->getCompany(), $permission_control_id);
     foreach ($preset_permissions as $section => $permissions) {
         foreach ($permissions as $name => $value) {
             Debug::Text('Setting Permission - Section: ' . $section . ' Name: ' . $name . ' Value: ' . (int) $value, __FILE__, __LINE__, __METHOD__, 10);
             $pf->setPermissionControl($permission_control_id);
             $pf->setSection($section);
             $pf->setName($name);
             $pf->setValue((int) $value);
             if ($pf->isValid()) {
                 $pf->save();
             }
         }
     }
     //Clear cache for all users assigned to this permission_control_id
     $pclf = new PermissionControlListFactory();
     $pclf->getById($permission_control_id);
     if ($pclf->getRecordCount() > 0) {
         $pc_obj = $pclf->getCurrent();
         if (is_array($pc_obj->getUser())) {
             foreach ($pc_obj->getUser() as $user_id) {
                 $pf->clearCache($user_id, $this->getCompany());
             }
         }
     }
     unset($pclf, $pc_obj, $user_id);
     //$pf->FailTransaction();
     $pf->CommitTransaction();
     return TRUE;
 }
 function postSave()
 {
     $this->removeCache($this->getId());
     $this->remoteSave();
     if ($this->getDeleted() == FALSE) {
         //Add base currency for this new company.
         if ($this->getEnableAddCurrency() == TRUE) {
             $clf = new CurrencyListFactory();
             $clf->getByCompanyId($this->getId());
             if ($clf->getRecordCount() == 0) {
                 Debug::text('Adding Default Currency', __FILE__, __LINE__, __METHOD__, 9);
                 $cf = new CurrencyFactory();
                 $country_to_currency_map_arr = $cf->getOptions('country_currency');
                 if (isset($country_to_currency_map_arr[$this->getCountry()])) {
                     $base_currency = $country_to_currency_map_arr[$this->getCountry()];
                     Debug::text('Found Base Currency For Country: ' . $this->getCountry() . ' Currency: ' . $base_currency, __FILE__, __LINE__, __METHOD__, 9);
                 } else {
                     Debug::text('DID NOT Find Base Currency For Country: ' . $this->getCountry() . ' Using default USD.', __FILE__, __LINE__, __METHOD__, 9);
                     $base_currency = 'USD';
                 }
                 $cf->setCompany($this->getId());
                 $cf->setStatus(10);
                 $cf->setName($base_currency);
                 $cf->setISOCode($base_currency);
                 $cf->setConversionRate('1.000000000');
                 $cf->setAutoUpdate(FALSE);
                 $cf->setBase(TRUE);
                 $cf->setDefault(TRUE);
                 if ($cf->isValid()) {
                     $cf->Save();
                 }
             }
         }
         if ($this->getEnableAddPermissionGroupPreset() == TRUE) {
             Debug::text('Adding Preset Permission Groups', __FILE__, __LINE__, __METHOD__, 9);
             $pf = new PermissionFactory();
             $pf->StartTransaction();
             if ($this->getProductEdition() == 20) {
                 $preset_flags = array('job' => 1, 'invoice' => 1, 'document' => 1);
             } else {
                 $preset_flags = array();
             }
             $preset_options = $pf->getOptions('preset');
             foreach ($preset_options as $preset_id => $preset_name) {
                 $pcf = new PermissionControlFactory();
                 $pcf->setCompany($this->getId());
                 $pcf->setName($preset_name);
                 $pcf->setDescription('');
                 if ($pcf->isValid()) {
                     $pcf_id = $pcf->Save(FALSE);
                     $pf->applyPreset($pcf_id, $preset_id, $preset_flags);
                 }
             }
             //$pf->FailTransaction();
             $pf->CommitTransaction();
         }
         if ($this->getEnableAddStation() == TRUE) {
             Debug::text('Adding Default Station', __FILE__, __LINE__, __METHOD__, 9);
             //Enable punching in from all stations
             $sf = new StationFactory();
             $sf->setCompany($this->getId());
             $sf->setStatus(20);
             $sf->setType(10);
             $sf->setSource('ANY');
             $sf->setStation('ANY');
             $sf->setDescription('All stations');
             $sf->setGroupSelectionType(10);
             $sf->setBranchSelectionType(10);
             $sf->setDepartmentSelectionType(10);
             if ($sf->isValid()) {
                 $sf->Save();
             }
         }
         if ($this->getEnableAddPayStubEntryAccountPreset() == TRUE) {
             Debug::text('Adding Pay Stub Entry Account Presets', __FILE__, __LINE__, __METHOD__, 9);
             PayStubEntryAccountFactory::addPresets($this->getId());
         }
         if ($this->getEnableAddCompanyDeductionPreset() == TRUE) {
             Debug::text('Adding Company Deduction Presets', __FILE__, __LINE__, __METHOD__, 9);
             CompanyDeductionFactory::addPresets($this->getId());
         }
         if ($this->getEnableAddRecurringHolidayPreset() == TRUE) {
             Debug::text('Adding Recurring Holiday Presets', __FILE__, __LINE__, __METHOD__, 9);
             RecurringHolidayFactory::addPresets($this->getId(), $this->getCountry());
         }
     }
     if ($this->getDeleted() == TRUE) {
         $ulf = new UserListFactory();
         $ulf->getByCompanyId($this->getID());
         if ($ulf->getRecordCount() > 0) {
             $ulf->StartTransaction();
             foreach ($ulf as $u_obj) {
                 Debug::text('Deleting User ID: ' . $u_obj->getId(), __FILE__, __LINE__, __METHOD__, 9);
                 $u_obj->setDeleted(TRUE);
                 if ($u_obj->isValid()) {
                     $u_obj->Save();
                 }
             }
             $ulf->CommitTransaction();
         }
     }
     return TRUE;
 }
    echo $help_output;
} else {
    //Handle command line arguments
    $last_arg = count($argv) - 1;
    if (isset($argv[$last_arg]) and $argv[$last_arg] != '') {
        $user_name = $argv[$last_arg];
        //Get user_id from user_name
        $ulf = new UserListFactory();
        $ulf->getByUserName($user_name);
        if ($ulf->getRecordCount() == 1) {
            echo "Found user, apply administrator permissions...\n";
            ob_flush();
            $u_obj = $ulf->getCurrent();
            //Create new Permission Group just for this purpose.
            $pf = new PermissionFactory();
            $pf->StartTransaction();
            $preset_flags = array();
            $preset_options = $pf->getOptions('preset');
            $pcf = new PermissionControlFactory();
            $pcf->setCompany($u_obj->getCompany());
            $pcf->setName('Administrator Fix (' . rand(1, 1000) . ')');
            $pcf->setDescription('Created By set_admin_permissions.php');
            if ($pcf->isValid()) {
                $pcf_id = $pcf->Save(FALSE);
                $pcf->setUser(array($u_obj->getId()));
                $pcf->Save();
                if ($pf->applyPreset($pcf_id, 40, $preset_flags) == TRUE) {
                    echo "Success!\n";
                }
            }
            //$pf->FailTransaction();