/**
  * bulk update groups
  *
  */
 public function update_groups()
 {
     // check nonce
     if (!isset($_POST['advads-group-update-nonce']) || !wp_verify_nonce($_POST['advads-group-update-nonce'], 'update-advads-groups')) {
         return new WP_Error('invalid_ad_group', __('Invalid Ad Group', 'advanced-ads'));
     }
     // check user rights
     if (!current_user_can('manage_options')) {
         return new WP_Error('invalid_ad_group_rights', __('You don’t have permission to change the ad groups', 'advanced-ads'));
     }
     // iterate through groups
     if (isset($_POST['advads-groups']) && count($_POST['advads-groups'])) {
         // empty group settings
         update_option('advads-ad-groups', array());
         foreach ($_POST['advads-groups'] as $_group_id => $_group) {
             // save basic wp term
             wp_update_term($_group_id, Advanced_Ads::AD_GROUP_TAXONOMY, $_group);
             // save ad weights
             $group = new Advanced_Ads_Group($_group['id']);
             if (isset($_group['ads'])) {
                 $group->save_ad_weights($_group['ads']);
             }
             // save other attributes
             $type = isset($_group['type']) ? $_group['type'] : 'default';
             $ad_count = isset($_group['ad_count']) ? $_group['ad_count'] : 1;
             $options = isset($_group['options']) ? $_group['options'] : array();
             // allow other add-ons to save their own group attributes
             $atts = apply_filters('advanced-ads-group-save-atts', array('type' => $type, 'ad_count' => $ad_count, 'options' => $options), $_group);
             $group->save($atts);
         }
     }
     // reload groups
     $this->load_groups();
     return true;
 }