function setPermission($permission_arr, $old_permission_arr = array())
 {
     if ($this->getId() == FALSE) {
         return FALSE;
     }
     $pf = new PermissionFactory();
     //Don't Delete all previous permissions, do that in the Permission class.
     if (isset($permission_arr) and is_array($permission_arr) and count($permission_arr) > 0) {
         foreach ($permission_arr as $section => $permissions) {
             Debug::Text('  Section: ' . $section, __FILE__, __LINE__, __METHOD__, 10);
             foreach ($permissions as $name => $value) {
                 Debug::Text('     Name: ' . $name . ' - Value: ' . $value, __FILE__, __LINE__, __METHOD__, 10);
                 if ((!isset($old_permission_arr[$section][$name]) or isset($old_permission_arr[$section][$name]) and $value != $old_permission_arr[$section][$name]) and $pf->isIgnore($section, $name, $this->getCompanyObject()->getProductEdition()) == FALSE) {
                     if ($value == 0 or $value == 1) {
                         Debug::Text('    Modifying/Adding Permission: ' . $name . ' - Value: ' . $value, __FILE__, __LINE__, __METHOD__, 10);
                         $tmp_pf = new PermissionFactory();
                         $tmp_pf->setPermissionControl($this->getId());
                         $tmp_pf->setSection($section);
                         $tmp_pf->setName($name);
                         $tmp_pf->setValue((int) $value);
                         if ($tmp_pf->isValid()) {
                             $tmp_pf->save();
                         }
                     }
                 } else {
                     Debug::Text('     Permission didnt change... Skipping', __FILE__, __LINE__, __METHOD__, 10);
                 }
             }
         }
     }
     return TRUE;
 }
         Debug::Text('Found Current Permissions!', __FILE__, __LINE__, __METHOD__, 10);
         foreach ($plf as $p_obj) {
             foreach ($plf as $p_obj) {
                 $current_permissions[$p_obj->getSection()][$p_obj->getName()] = $p_obj;
             }
         }
     }
     //print_r($current_permissions);
 }
 $section_groups = Misc::prependArray(array(-1 => TTi18n::gettext('-- None --')), $pf->getOptions('section_group'));
 $section_group_map = $pf->getOptions('section_group_map');
 $sections = $pf->getOptions('section');
 $names = $pf->getOptions('name');
 //Trim out ignored sections
 foreach ($section_groups as $section_group_key => $section_group_value) {
     if ($pf->isIgnore($section_group_key, NULL, $current_company->getProductEdition()) == TRUE) {
         unset($section_groups[$section_group_key]);
     }
 }
 unset($section_group_key, $section_group_value);
 if (!isset($group_id) or !isset($section_groups[$group_id])) {
     $group_id = 0;
     //None
     //$group_id = 'all'; //None
 }
 Debug::Text('Group ID: ' . $group_id, __FILE__, __LINE__, __METHOD__, 10);
 foreach ($names as $section => $permission_arr) {
     if ($pf->isIgnore($section, NULL, $current_company->getProductEdition()) == FALSE and ($group_id == 'all' and $group_id !== 0 or isset($section_group_map[$group_id]) and in_array($section, $section_group_map[$group_id]))) {
         foreach ($permission_arr as $name => $display_name) {
             if (isset($current_permissions[$section][$name])) {
                 $permission_result_obj = $current_permissions[$section][$name];