function Admin() { global $IN, $LANG, $SESS, $LOG, $DSP; // This flag determines if a user can edit categories from the publish page. $category_exception = ($IN->GBL('M') == 'blog_admin' and in_array($IN->GBL('P'), array('category_editor', 'edit_category', 'update_category', 'del_category_conf', 'del_category', 'cat_order')) and $IN->GBL('Z') == 1) ? TRUE : FALSE; if ($category_exception == FALSE and !$DSP->allowed_group('can_access_admin') and $IN->GBL('P', 'GET') != 'save_ping_servers') { return $DSP->no_access_message(); } switch ($IN->GBL('M')) { case 'config_mgr': if (!$DSP->allowed_group('can_admin_preferences')) { return $DSP->no_access_message(); } switch ($IN->GBL('P')) { case 'update_cfg': $this->update_config_prefs(); break; case 'member_cfg': $this->member_config_manager(); break; default: $this->config_manager(); break; } break; case 'members': // Instantiate the member administration class require PATH_CP . 'cp.members' . EXT; $MBR = new Members(); switch ($IN->GBL('P')) { case 'view_members': $MBR->view_all_members(); break; case 'mbr_conf': $MBR->member_confirm(); break; case 'mbr_del_conf': $MBR->member_delete_confirm(); break; case 'mbr_delete': $MBR->member_delete(); break; case 'resend_act_email': $MBR->resend_activation_emails(); break; case 'member_reg_form': $MBR->new_member_profile_form(); break; case 'register_member': $MBR->create_member_profile(); break; case 'mbr_group_manager': $MBR->member_group_manager(); break; case 'edit_mbr_group': $MBR->edit_member_group_form(); break; case 'update_mbr_group': $MBR->update_member_group(); break; case 'mbr_group_del_conf': $MBR->delete_member_group_conf(); break; case 'delete_mbr_group': $MBR->delete_member_group(); break; case 'member_banning': $MBR->member_banning_forms(); break; case 'save_ban_data': $MBR->update_banning_data(); break; case 'profile_fields': $MBR->custom_profile_fields(); break; case 'edit_field': $MBR->edit_profile_field_form(); break; case 'del_field_conf': $MBR->delete_profile_field_conf(); break; case 'delete_field': $MBR->delete_profile_field(); break; case 'edit_field_order': $MBR->edit_field_order_form(); break; case 'update_field_order': $MBR->update_field_order(); break; case 'update_profile_fields': $MBR->update_profile_fields(); break; case 'member_search': $MBR->member_search_form(); break; case 'do_member_search': $MBR->do_member_search(); break; case 'ip_search': $MBR->ip_search_form(); break; case 'do_ip_search': $MBR->do_ip_search(); break; case 'member_validation': $MBR->member_validation(); break; case 'validate_members': $MBR->validate_members(); break; case 'email_console_logs': $MBR->email_console_logs(); break; case 'view_email': $MBR->view_email(); break; case 'delete_email_console': $MBR->delete_email_console_messages(); break; case 'profile_templates': $MBR->profile_templates(); break; case 'list_templates': $MBR->list_templates(); break; case 'edit_template': $MBR->edit_template(); break; case 'save_template': $MBR->save_template(); break; case 'login_as_member': $MBR->login_as_member(); break; case 'do_login_as_member': $MBR->do_login_as_member(); break; default: return FALSE; break; } break; case 'sp_templ': // Instantiate the specialty templates class require PATH_CP . 'cp.specialty_tmp' . EXT; $SP = new Specialty_Templates(); switch ($IN->GBL('P')) { case 'mbr_notification_tmpl': $SP->mbr_notification_tmpl(); break; case 'edit_notification_tmpl': $SP->edit_notification_tmpl(); break; case 'update_notification_tmpl': $SP->update_notification_tmpl(); break; case 'offline_tmpl': $SP->offline_template(); break; case 'update_offline_template': $SP->update_offline_template(); break; case 'user_messages_tmpl': $SP->user_messages_template(); break; case 'update_user_messages_tmpl': $SP->update_user_messages_template(); break; } break; case 'site_admin': if (!$DSP->allowed_group('can_admin_sites')) { return $DSP->no_access_message(); } // Instantiate the site administration class require PATH_CP . 'cp.sites' . EXT; $SA = new SitesAdmin(); switch ($IN->GBL('P')) { case 'sites_list': $SA->sites_list(); break; case 'new_site': $SA->new_site_form(); break; case 'edit_site': $SA->edit_site_form(); break; case 'update_site': $SA->update_site(); break; case 'delete_site': $SA->delete_site(); break; case 'delete_site_confirm': $SA->delete_site_confirm(); break; default: $SA->sites_list(); break; } break; case 'blog_admin': if ($category_exception == FALSE and !$DSP->allowed_group('can_admin_weblogs') and $IN->GBL('P', 'GET') != 'save_ping_servers') { return $DSP->no_access_message(); } // Instantiate the publish administration class require PATH_CP . 'cp.publish_ad' . EXT; $PA = new PublishAdmin(); switch ($IN->GBL('P')) { case 'blog_list': $PA->weblog_overview(); break; case 'new_weblog': $PA->new_weblog_form(); break; case 'blog_prefs': $PA->edit_blog_form(); break; case 'group_prefs': $PA->edit_group_form(); break; case 'create_blog': $PA->update_weblog_prefs(); break; case 'update_preferences': $PA->update_weblog_prefs(); break; case 'delete_conf': $PA->delete_weblog_conf(); break; case 'delete': $PA->delete_weblog(); break; case 'categories': $PA->category_overview(); break; case 'cat_group_editor': $PA->edit_category_group_form(); break; case 'update_cat_group': $PA->update_category_group(); break; case 'cat_group_del_conf': $PA->delete_category_group_conf(); break; case 'delete_group': $PA->delete_category_group(); break; case 'category_editor': $PA->category_manager(); break; case 'update_category': $PA->update_category(); break; case 'edit_category': $PA->edit_category_form(); break; case 'cat_order': $PA->change_category_order(); break; case 'global_cat_order': $PA->global_category_order(); break; case 'del_category_conf': $PA->delete_category_confirm(); break; case 'del_category': $PA->delete_category(); break; case 'cat_field_group_edit': $PA->category_field_group_manager(); break; case 'del_cat_field_conf': $PA->delete_category_field_confirm(); break; case 'del_cat_field': $PA->delete_category_field(); break; case 'edit_cat_field': $PA->edit_category_field_form(); break; case 'edit_cat_field_order': $PA->edit_category_field_order_form(); break; case 'ud_cat_field_order': $PA->update_category_field_order(); break; case 'update_cat_fields': $PA->update_category_fields(); break; case 'statuses': $PA->status_overview(); break; case 'status_group_editor': $PA->edit_status_group_form(); break; case 'update_status_group': $PA->update_status_group(); break; case 'status_group_del_conf': $PA->delete_status_group_conf(); break; case 'delete_status_group': $PA->delete_status_group(); break; case 'status_editor': $PA->status_manager(); break; case 'update_status': $PA->update_status(); break; case 'edit_status': $PA->edit_status_form(); break; case 'del_status_conf': $PA->delete_status_confirm(); break; case 'del_status': $PA->delete_status(); break; case 'edit_status_order': $PA->edit_status_order(); break; case 'update_status_order': $PA->update_status_order(); break; case 'custom_fields': $PA->field_overview(); break; case 'update_field_group': $PA->update_field_group(); break; case 'del_field_group_conf': $PA->delete_field_group_conf(); break; case 'delete_field_group': $PA->delete_field_group(); break; case 'field_editor': $PA->field_manager(); break; case 'edit_field': $PA->edit_field_form(); break; case 'update_weblog_fields': $PA->update_weblog_fields(); break; case 'field_group_editor': $PA->edit_field_group_form(); break; case 'del_field_conf': $PA->delete_field_conf(); break; case 'delete_field': $PA->delete_field(); break; case 'edit_field_order': $PA->edit_field_order_form(); break; case 'update_field_order': $PA->update_field_order(); break; case 'edit_fmt_buttons': $PA->edit_formatting_buttons(); break; case 'update_fmt_buttons': $PA->update_formatting_buttons(); break; case 'html_buttons': $PA->html_buttons(); break; case 'save_html_buttons': $PA->save_html_buttons(); break; case 'ping_servers': $PA->ping_servers(); break; case 'save_ping_servers': $PA->save_ping_servers(); break; case 'upload_prefs': $PA->file_upload_preferences(); break; case 'edit_upload_pref': $PA->edit_upload_preferences_form(); break; case 'update_upload_prefs': $PA->update_upload_preferences(); break; case 'del_upload_pref_conf': $PA->delete_upload_preferences_conf(); break; case 'del_upload_pref': $PA->delete_upload_preferences(); break; default: return FALSE; break; } break; case 'utilities': if (!$DSP->allowed_group('can_admin_utilities')) { return $DSP->no_access_message(); } // We handle the pMachine import via a different class, // so we'll test for that separately if ($IN->GBL('P') == 'pm_import') { require PATH_CP . 'cp.pm_import' . EXT; $PMI = new PM_Import(); return; } if ($IN->GBL('P') == 'mt_import') { require PATH_CP . 'cp.mt_import' . EXT; $MT = new MT_Import(); return; } if ($IN->GBL('P') == 'member_import') { require PATH_CP . 'cp.member_import' . EXT; $MI = new Member_Import(); return; } require PATH_CP . 'cp.utilities' . EXT; switch ($IN->GBL('P')) { case 'view_logs': $LOG->view_logs(); break; case 'clear_cplogs': $LOG->clear_cp_logs(); break; case 'view_search_log': $LOG->view_search_log(); break; case 'view_throttle_log': $LOG->view_throttle_log(); break; case 'blacklist_ips': $LOG->blacklist_ips(); break; case 'clear_search_log': $LOG->clear_search_log(); break; case 'clear_cache_form': Utilities::clear_cache_form(); break; case 'clear_caching': Utilities::clear_caching(); break; case 'run_query': Utilities::sql_manager('run_query'); break; case 'sql_query': Utilities::sql_query_form(); break; //case 'sql_backup' : Utilities::sql_backup(); // break; //case 'do_sql_backup' : Utilities::do_sql_backup(); // break; //case 'sql_backup' : Utilities::sql_backup(); // break; //case 'do_sql_backup' : Utilities::do_sql_backup(); // break; case 'view_database': Utilities::view_database(); break; case 'table_action': Utilities::run_table_action(); break; case 'sandr': Utilities::search_and_replace_form(); break; case 'recount_stats': Utilities::recount_statistics(); break; case 'recount_prefs': Utilities::recount_preferences_form(); break; case 'set_recount_prefs': Utilities::set_recount_prefs(); break; case 'do_recount': Utilities::do_recount(); break; case 'do_stats_recount': Utilities::do_stats_recount(); break; case 'prune': Utilities::data_pruning(); break; case 'member_pruning': Utilities::member_pruning(); break; case 'prune_member_conf': Utilities::prune_member_confirm(); break; case 'prune_members': Utilities::prune_members(); break; case 'entry_pruning': Utilities::entry_pruning(); break; case 'prune_entry_conf': Utilities::prune_entry_confirm(); break; case 'prune_entries': Utilities::prune_entries(); break; case 'comment_pruning': Utilities::comment_pruning(); break; case 'prune_comment_conf': Utilities::prune_comment_confirmation(); break; case 'prune_comments': Utilities::prune_comments(); break; case 'trackback_pruning': Utilities::trackback_pruning(); break; case 'prune_trackback_conf': Utilities::prune_trackback_confirmation(); break; case 'prune_trackbacks': Utilities::prune_trackbacks(); break; /* Someday, oh someday... case 'pm_pruning' : Utilities::pm_pruning(); break; case 'prune_pm_conf' : Utilities::prune_pm_confirmation(); break; case 'prune_pms' : Utilities::prune_pms(); break; */ /* Someday, oh someday... case 'pm_pruning' : Utilities::pm_pruning(); break; case 'prune_pm_conf' : Utilities::prune_pm_confirmation(); break; case 'prune_pms' : Utilities::prune_pms(); break; */ case 'topic_pruning': Utilities::topic_pruning(); break; case 'prune_topic_conf': Utilities::prune_topic_confirmation(); break; case 'prune_topics': Utilities::prune_topics(); break; case 'run_sandr': Utilities::search_and_replace(); break; case 'php_info': Utilities::php_info(); break; case 'sql_manager': Utilities::sql_info(); break; case 'sql_status': Utilities::sql_manager('status'); break; case 'sql_sysvars': Utilities::sql_manager('sysvars'); break; case 'sql_plist': Utilities::sql_manager('plist'); break; case 'plugin_manager': Utilities::plugin_manager(); break; case 'plugin_info': Utilities::plugin_info(); break; case 'plugin_remove_conf': Utilities::plugin_remove_confirm(); break; case 'plugin_remove': Utilities::plugin_remove(); break; case 'plugin_install': Utilities::plugin_install('file'); break; case 'import_utilities': Utilities::import_utilities(); break; case 'trans_menu': Utilities::translate_select(); break; case 'translate': Utilities::translate(); break; case 'save_translation': Utilities::save_translation(); break; case 'extensions_manager': Utilities::extensions_manager(); break; case 'toggle_extension_confirm': Utilities::toggle_extension_confirm(); break; case 'toggle_extension': Utilities::toggle_extension(); break; case 'extension_settings': Utilities::extension_settings(); break; case 'save_extension_settings': Utilities::save_extension_settings(); break; default: return FALSE; break; } break; default: $this->admin_home_page(); break; } }
/** * Module Updater * * @access public * @return bool */ public function update() { // -------------------------------------------- // ExpressionEngine 2.x attempts to do automatic updates. // - Mitchell questioned clients/customers and discovered // that the majority preferred to update // themselves, especially on higher traffic sites. // So, we forbid EE 2.x from doing updates // unless it comes through our update form. // -------------------------------------------- if (!isset($_POST['run_update']) or $_POST['run_update'] != 'y') { return FALSE; } if ($this->version_compare($this->database_version(TRUE), '==', constant(strtoupper($this->lower_name) . '_VERSION')) and $this->extensions_enabled()) { return TRUE; } if (APP_VER < 2.0 and !$this->extensions_enabled() and !$this->extensions_allowed()) { return ee()->output->show_user_error('general', lang('cannot_update_extensions_disabled')); } // -------------------------------------------- // Default Module Update // -------------------------------------------- $this->default_module_update(); // -------------------------------------------- // Do DB work // -------------------------------------------- if (!file_exists($this->addon_path . strtolower($this->lower_name) . '.sql')) { return FALSE; } $sql = preg_split("/;;\\s*(\n+|\$)/", file_get_contents($this->addon_path . strtolower($this->lower_name) . '.sql'), -1, PREG_SPLIT_NO_EMPTY); if (count($sql) == 0) { return FALSE; } foreach ($sql as $i => $query) { $sql[$i] = trim($query); } // -------------------------------------------- // Database Change // - Added: 1.0.0.a2 // -------------------------------------------- if ($this->version_compare($this->database_version(), '<', '1.0.0.a2')) { $sql[] = ' ALTER TABLE ' . CALENDAR_TABLE_CALENDARS . ' ADD COLUMN `tz_offset` CHAR(5) NOT NULL DEFAULT "+0000", ADD COLUMN `timezone` VARCHAR(100) NOT NULL DEFAULT "Europe/London", ADD COLUMN `time_format` VARCHAR(10) NOT NULL DEFAULT "H:i a" '; } // -------------------------------------------- // Database Change // - Added: 1.0.0.b2 // -------------------------------------------- if ($this->version_compare($this->database_version(), '<', '1.0.0.b2')) { // ------------------------------------- // Add a new field // ------------------------------------- $query = ee()->db->query('SELECT group_id FROM exp_field_groups WHERE group_name = "' . CALENDAR_CALENDARS_FIELD_GROUP . '"'); $calendars_field_group = $query->row['group_id']; $fields[] = array('site_id' => $this->data->get_site_id(), 'group_id' => $calendars_field_group, 'field_name' => CALENDAR_CALENDARS_FIELD_PREFIX . 'ics_url', 'field_label' => '.ics URL', 'field_instructions' => 'Add one or more URLs to .ics files - separated by newlines - to import to this calendar.', 'field_type' => 'textarea', 'field_list_items' => '', 'field_pre_populate' => 'n', 'field_pre_blog_id' => '0', 'field_pre_field_id' => '0', 'field_related_to' => APP_VER < 2.0 ? 'blog' : 'channel', 'field_related_id' => '0', 'field_related_orderby' => 'date', 'field_related_sort' => 'desc', 'field_related_max' => '0', 'field_ta_rows' => '3', 'field_maxl' => '20', 'field_required' => 'n', 'field_text_direction' => 'ltr', 'field_search' => 'n', 'field_is_hidden' => 'y', 'field_fmt' => 'none', 'field_show_fmt' => 'n', 'field_order' => ''); // ------------------------------------- // Create new fields // ------------------------------------- $PA; if (APP_VER < 2.0) { if (!class_exists('PublishAdmin')) { require_once PATH_CP . 'cp.publish_ad' . EXT; } $PA = new PublishAdmin(); } foreach ($fields as $field) { $_POST = $field; if (APP_VER < 2.0) { $PA->update_weblog_fields(); } else { $this->update_channel_fields(); } } // ------------------------------------- // Add a new column // ------------------------------------- $sql[] = ' ALTER TABLE exp_calendar_calendars ADD COLUMN ics_url TEXT DEFAULT "" '; // ------------------------------------- // Modify a column // ------------------------------------- $sql[] = ' UPDATE exp_calendar_preferences SET preferences = "' . ee()->db->escape_str($this->_default_preferences()) . '" WHERE preferences = "" '; } // -------------------------------------------- // Database Change // - Added: 1.0.0.b3 // -------------------------------------------- if ($this->version_compare($this->database_version(), '<', '1.0.0.b3')) { // ------------------------------------- // Add a new column // ------------------------------------- $sql[] = ' ALTER TABLE exp_calendar_calendars ADD COLUMN ics_updated DATETIME DEFAULT "0000-00-00" '; $sql[] = ' UPDATE exp_calendar_calendars SET ics_updated = "0000-00-00" WHERE ics_updated IS NULL'; } // -------------------------------------------- // Run module SQL - dependent on CREATE TABLE IF NOT EXISTS syntax // -------------------------------------------- foreach ($sql as $query) { ee()->db->query($query); } // -------------------------------------------- // Database Change // - Added: 1.0.2.d3 // -------------------------------------------- if ($this->version_compare($this->database_version(), '<', '1.0.2.d3')) { $asql = ' SELECT cp.* FROM exp_calendar_preferences cp'; $query = ee()->db->query($asql); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $data = unserialize($row['preferences']); if (!array_key_exists('date_format', $data)) { $data['date_format'] = 'mm/dd/yy'; } ee()->db->query(ee()->db->update_string('exp_calendar_preferences', array('preferences' => serialize($data)), 'site_id = ' . ee()->db->escape_str($row['site_id']))); } } } // -------------------------------------------- // Preferences go wacko before this // -------------------------------------------- if ($this->version_compare($this->database_version(), '<', '1.5.1')) { $prefs = $this->data->get_module_preferences(TRUE); if (!isset($prefs['calendar_weblog']) or $prefs['calendar_weblog'] === '') { $query = ee()->db->query("SELECT {$this->sc->db->channel_id}\n\t\t\t\t\t FROM \t{$this->sc->db->channels}\n\t\t\t\t\t WHERE \t{$this->sc->db->channel_name} = '" . ee()->db->escape_str(CALENDAR_CALENDARS_CHANNEL_NAME_DEFAULT) . "'"); $prefs['calendar_weblog'] = $query->num_rows() > 0 ? $query->row($this->sc->db->channel_id) : ''; } if (!isset($prefs['event_weblog']) or $prefs['event_weblog'] === '') { $query = ee()->db->query("SELECT {$this->sc->db->channel_id}\n\t\t\t\t\t FROM \t{$this->sc->db->channels}\n\t\t\t\t\t WHERE \t{$this->sc->db->channel_name} = '" . ee()->db->escape_str(CALENDAR_EVENTS_CHANNEL_NAME_DEFAULT) . "'"); $prefs['event_weblog'] = $query->num_rows() > 0 ? $query->row($this->sc->db->channel_id) : ''; } $this->data->update_preferences($prefs); } //seems that we did not properly set default_entry_title and that causes all heck with //liveUrlTitle() in the publish area. if ($this->version_compare($this->database_version(), '<', '1.5.2')) { $prefs = $this->data->get_module_preferences(TRUE); $where = implode(',', ee()->db->escape_str(array($prefs['calendar_weblog'], $prefs['event_weblog']))); ee()->db->query("UPDATE {$this->sc->db->channels}\n\t\t\t\t SET \tdefault_entry_title = ''\n\t\t\t\t WHERE \t{$this->sc->db->channel_id}\n\t\t\t\t IN\t\t({$where})"); } //Update the tables to have a default status_group of one //the default for the table is 0, and everything _should_ //work fine, but it seems like this might come to a head //at some point, so extra protection. if ($this->version_compare($this->database_version(), '<', '1.5.5')) { $prefs = $this->data->get_module_preferences(TRUE); $where = implode(',', ee()->db->escape_str(array($prefs['calendar_weblog'], $prefs['event_weblog']))); ee()->db->query("UPDATE {$this->sc->db->channels}\n\t\t\t\t SET \tstatus_group = 1\n\t\t\t\t WHERE \t{$this->sc->db->channel_id}\n\t\t\t\t IN\t\t({$where})\n\t\t\t\t AND\t( status_group IS NULL OR status_group = 0 )"); } if ($this->version_compare($this->database_version(), '<', '1.6.4')) { ee()->db->query("UPDATE exp_extensions\n\t\t\t\t SET \thook = 'calendar_calendars_channel_query'\n\t\t\t\t WHERE \thook = 'calendar_calendars_weblog_query'"); } if ($this->version_compare($this->database_version(), '<', '1.7.0')) { if (APP_VER >= 2.0 and ee()->db->table_exists('exp_calendar_permissions_preferences') === FALSE) { $newest_prefs = TRUE; $module_install_sql = file_get_contents($this->addon_path . strtolower($this->lower_name) . '.sql'); //gets JUST the tag prefs table from the sql $prefs_table = stristr($module_install_sql, "CREATE TABLE IF NOT EXISTS `exp_calendar_permissions_preferences`"); $prefs_table = substr($prefs_table, 0, stripos($prefs_table, ';;')); //install it ee()->db->query($prefs_table); } } if ($this->version_compare($this->database_version(), '<', '1.7.1.b1')) { $fqiu = ee()->db->where('field_name', CALENDAR_CALENDARS_FIELD_PREFIX . 'ics_url')->where('site_id', $this->data->get_site_id())->limit(1)->get('exp_channel_fields'); if ($fqiu->num_rows() > 0) { ee()->db->query(ee()->db->update_string('exp_channel_fields', array('field_instructions' => $fqiu->row('field_instructions') . ' ' . lang('ics_url_stub')), array('site_id' => $fqiu->row('site_id'), 'field_id' => $fqiu->row('field_id')))); } } // ------------------------------------- // Is this going from EE 1.x to EE 2.x? // ------------------------------------- if (APP_VER >= 2.0) { // ------------------------------------- // If the calendar fieldtype isn't installed // we can assume that this is EE 1.x -> 2.x // ------------------------------------- $ft_query = ee()->db->where('name', 'calendar')->get('exp_fieldtypes'); if ($ft_query->num_rows() == 0) { //install calendar fieldtype ee()->load->library('addons/addons_installer'); ee()->load->model('addons_model'); if (!ee()->addons_model->fieldtype_installed($this->lower_name)) { ee()->addons_installer->install($this->lower_name, 'fieldtype', FALSE); } //update field_related_to ee()->db->where_in('field_name', array(CALENDAR_CALENDARS_FIELD_PREFIX . 'summary', CALENDAR_CALENDARS_FIELD_PREFIX . 'tz_offset', CALENDAR_CALENDARS_FIELD_PREFIX . 'time_format', CALENDAR_CALENDARS_FIELD_PREFIX . 'ics_url', CALENDAR_EVENTS_FIELD_PREFIX . 'dates_and_options', CALENDAR_EVENTS_FIELD_PREFIX . 'summary', CALENDAR_EVENTS_FIELD_PREFIX . 'location'))->update('exp_channel_fields', array('field_related_to' => 'channel')); //update fieldtypes for ee()->db->where_in('field_name', array(CALENDAR_CALENDARS_FIELD_PREFIX . 'tz_offset', CALENDAR_EVENTS_FIELD_PREFIX . 'dates_and_options'))->update('exp_channel_fields', array('field_type' => 'calendar')); } } // -------------------------------------------- // Version Number Update - LAST! // -------------------------------------------- $data = array('module_version' => CALENDAR_VERSION); //for EE 1.x -> 2.x update if (APP_VER >= 2.0) { $data['has_publish_fields'] = 'n'; } ee()->db->query(ee()->db->update_string('exp_modules', $data, array('module_name' => $this->class_name))); return TRUE; }