상속: PHPIniBase, IRemoteObject
예제 #1
0
        internal void Parse()
        {
            if (String.IsNullOrEmpty(FileName))
            {
                throw new InvalidOperationException();
            }

            string extensionDir = String.Empty;

            using (StreamReader reader = new StreamReader(FileName))
            {
                foreach (object o in PHPIniFile.ParseIniFile(reader))
                {
                    PHPIniSetting directive = o as PHPIniSetting;
                    if (directive != null)
                    {
                        Settings.Add(directive);
                        RawEntries.Add(directive);

                        // Get the path to the extension directory - this will be used later
                        if (String.Equals(directive.Name, "extension_dir", StringComparison.OrdinalIgnoreCase))
                        {
                            extensionDir = directive.GetTrimmedValue();
                        }
                    }
                    else
                    {
                        PHPIniExtension extension = o as PHPIniExtension;
                        if (extension != null)
                        {
                            Extensions.Add(extension);
                            RawEntries.Add(extension);
                        }
                        else
                        {
                            PHPIniBase entry = o as PHPIniBase;
                            if (entry != null)
                            {
                                RawEntries.Add(entry);
                            }
                        }
                    }
                }
            }

            if (String.IsNullOrEmpty(extensionDir) ||
                !Path.IsPathRooted(extensionDir))
            {
                extensionDir = Path.Combine(Path.GetDirectoryName(FileName), "ext");
            }

            if (Directory.Exists(extensionDir))
            {
                AddAllAvailableExtensions(extensionDir);
            }
        }
예제 #2
0
        public override bool Equals(object obj)
        {
            PHPIniSetting setting = obj as PHPIniSetting;

            if (setting == null)
            {
                return(false);
            }

            return(String.Equals(setting.Name, Name, StringComparison.OrdinalIgnoreCase) &&
                   String.Equals(setting.Value, Value, StringComparison.OrdinalIgnoreCase) &&
                   String.Equals(setting.Section, Section, StringComparison.OrdinalIgnoreCase));
        }
        // Constructor for Edit Setting Dialog
        public AddEditSettingDialog(PHPModule module, PHPIniSetting setting)
            : base(module)
        {
            _module = module;

            InitializeComponent();
            InitializeUI();

            // The dialog is used in the "Edit setting" mode
            Text = Resources.AddEditSettingDialogEditSetting;

            _nameTextBox.Enabled = false;
            _sectionTextBox.Enabled = false;
            _nameTextBox.Text = setting.Name;
            _valueTextBox.Text = setting.Value;
            _sectionTextBox.Text = setting.Section;

            UpdateUI();
        }
예제 #4
0
        internal void AddOrUpdateSettings(IEnumerable <PHPIniSetting> settings)
        {
            foreach (PHPIniSetting setting in settings)
            {
                bool settingFound = false;
                int  index        = -1;
                int  lastIndex    = -1;

                for (int i = 0; i < RawEntries.Count; i++)
                {
                    PHPIniBase b = RawEntries[i];

                    PHPIniSetting existing = b as PHPIniSetting;
                    if (existing != null)
                    {
                        lastIndex = i;

                        if (String.Equals(existing.Name, setting.Name, StringComparison.OrdinalIgnoreCase))
                        {
                            existing.Value = setting.Value;
                            existing.UpdateText();
                            settingFound = true;

                            break;
                        }

                        // This finds the index after the last setting for a given section
                        if (String.Equals(existing.Section, setting.Section, StringComparison.OrdinalIgnoreCase))
                        {
                            index = i;
                        }
                    }
                    else
                    {
                        // This finds the index after section declaration,
                        // in case there are no settings defined in that section
                        PHPIniSection section = b as PHPIniSection;
                        if ((section != null) && (String.Equals(section.Name, setting.Section, StringComparison.OrdinalIgnoreCase)))
                        {
                            index = i;
                        }
                    }
                }

                if (!settingFound)
                {
                    setting.UpdateText();

                    if (index == -1)
                    {
                        lastIndex++;
                        RawEntries.Insert(lastIndex, new PHPIniString(""));
                        lastIndex++;
                        RawEntries.Insert(lastIndex, new PHPIniString('[' + setting.Section + ']'));
                        lastIndex++;
                        RawEntries.Insert(lastIndex, setting);
                    }
                    else
                    {
                        RawEntries.Insert(index + 1, setting);
                    }
                }
            }
        }
예제 #5
0
 internal void RemoveSetting(PHPIniSetting setting)
 {
     Invoke("RemovePHPIniSetting", setting.GetData());
 }
예제 #6
0
 public PHPSettingItem(PHPIniSetting setting)
 {
     _setting = setting;
     Text = _setting.Name;
     SubItems.Add(_setting.Value);
     SubItems.Add(_setting.Section);
 }
예제 #7
0
        private static PHPIniSetting GetToApplyUploadTmpDir(PHPIniFile file)
        {
            PHPIniSetting setting = file.GetSetting("upload_tmp_dir");
            if (setting == null || !IsAbsoluteFilePath(setting.GetTrimmedValue(), false))
            {
                string value = Environment.ExpandEnvironmentVariables(@"%WINDIR%\Temp\");
                setting = new PHPIniSetting("upload_tmp_dir", DoubleQuotesWrap(value), "PHP");
            }

            return setting;
        }
예제 #8
0
 private static PHPIniSetting GetToApplySessionPath(PHPIniFile file)
 {
     PHPIniSetting setting = file.GetSetting("session.save_path");
     if (setting == null || !IsAbsoluteFilePath(setting.GetTrimmedValue(), false))
     {
         string value = Environment.ExpandEnvironmentVariables(@"%WINDIR%\Temp\");
         setting = new PHPIniSetting("session.save_path", DoubleQuotesWrap(value), "Session");
     }
     
     return setting;
 }
예제 #9
0
        private PHPIniSetting GetToApplyErrorLog(PHPIniFile file)
        {
            var handlerName = _currentPhpHandler.Name;
            var setting = file.GetSetting("error_log");
            if (setting == null || !IsAbsoluteFilePath(setting.GetTrimmedValue(), true))
            {
                var value = Path.Combine(Environment.ExpandEnvironmentVariables(@"%WINDIR%\Temp\"), handlerName + "_errors.log");
                setting = new PHPIniSetting("error_log", DoubleQuotesWrap(value), "PHP");
            }

            return setting;
        }
예제 #10
0
        public void RemovePHPIniSetting(object settingData)
        {
            EnsureServerConnection();

            PHPIniFile file = GetPHPIniFile();

            PHPIniSetting setting = new PHPIniSetting();
            setting.SetData(settingData);

            if (file.Remove(setting))
            {
                file.Save(file.FileName);
            }
        }
예제 #11
0
        public void RemovePHPIniSetting(object settingData)
        {
            EnsureServerConnection();

            PHPIniSetting setting = new PHPIniSetting();
            setting.SetData(settingData);

            try
            {
                PHPConfigHelper configHelper = new PHPConfigHelper(ManagementUnit);
                configHelper.RemovePHPIniSetting(setting);
            }
            catch (FileNotFoundException)
            {
                RaiseException("ErrorPHPIniNotFound");
            }
        }
예제 #12
0
        public bool SaveSetting(string settingName, string settingValue, string settingSection)
        {
            var setting = GetSetting(settingName);
            if (setting == null)
            {
                // The setting doesn't currently exist. Add a new setting
                setting = new PHPIniSetting()
                {
                    Name = settingName,
                    Section = settingSection,
                };
            }
            else
            {
                if (String.Compare(setting.Value, settingValue) == 0) return true; // No update needed
            }

            setting.Value = settingValue;

            var settingChangableType = PlacementRules.GetChangableLocation(settingName);
            if (!filesWhereSettingIsReadFrom[settingChangableType].Contains(SettingLocation.UserIni))
            {
                //throw new InvalidOperationException("Can't set this");
                return false;
            }

            // Save this setting to .user.ini file
            var phpFile = _settings[SettingLocation.UserIni];
            phpFile.AddOrUpdateSettings(new List<PHPIniSetting>() { setting });
            phpFile.Save();

            return true;
        }
예제 #13
0
        public void RemovePHPIniSetting(object settingData)
        {
            EnsureServerConnection();

            PHPIniSetting setting = new PHPIniSetting();
            setting.SetData(settingData);

            try
            {
                ManagementUnitWrapper mgmtUnitWrapper = new ManagementUnitWrapper(ManagementUnit);
                PHPConfigHelper configHelper = new PHPConfigHelper(mgmtUnitWrapper);
                configHelper.RemovePHPIniSetting(setting);
            }
            catch (FileNotFoundException)
            {
                RaiseException("ErrorPHPIniNotFound");
            }
            catch (InvalidOperationException)
            {
                RaiseException("ErrorPHPIsNotRegistered");
            }
        }
예제 #14
0
        protected override void OnAccept()
        {
            try
            {
                PHPIniSetting setting = new PHPIniSetting();
                setting.Name = _nameTextBox.Text.Trim();
                setting.Value = _valueTextBox.Text.Trim();
                setting.Section = _sectionTextBox.Text.Trim();

                RemoteObjectCollection<PHPIniSetting> settings = new RemoteObjectCollection<PHPIniSetting>();
                settings.Add(setting);
                _module.Proxy.AddOrUpdateSettings(settings);

                DialogResult = DialogResult.OK;
                SettingName = setting.Name;
                Close();
            }
            catch (Exception ex)
            {
                DisplayErrorMessage(ex, Resources.ResourceManager);
            }
        }
예제 #15
0
        private static PHPIniSetting GetToApplyDateTimeZone(PHPIniFile file)
        {
            PHPIniSetting setting = file.GetSetting("date.timezone");
            if (setting == null)
            {
                setting = new PHPIniSetting("date.timezone", DoubleQuotesWrap(GetPHPTimeZone()), "Date");
            }

            return setting;
        }
예제 #16
0
        public void RemovePHPIniSetting(PHPIniSetting setting)
        {
            Debug.Assert(IsPHPRegistered());

            PHPIniFile file = new PHPIniFile(PHPIniFilePath);
            file.Parse();

            if (file.Remove(setting))
            {
                file.Save(file.FileName);
            }
        }
예제 #17
0
        public void RemovePHPIniSetting(PHPIniSetting setting)
        {
            EnsurePHPIsRegistered();

            var file = new PHPIniFile(PHPIniFilePath);
            file.Parse();

            if (file.Remove(setting))
            {
                file.Save(file.FileName);
            }
        }
예제 #18
0
 public PHPSettingItem(PHPIniSetting setting)
 {
     _setting = setting;
 }