/** {@inheritdoc} */ public function init() { parent::init(); $submit = new \Library\Form\Element\Submit('Submit'); $submit->setLabel('Assign'); $this->add($submit); }
/** {@inheritdoc} */ public function init() { parent::init(); $config = $this->getOption('config'); $mergeCustomFields = new Element\Checkbox('mergeCustomFields'); $mergeCustomFields->setLabel('Merge user supplied information'); $mergeCustomFields->setChecked($config->defaultMergeCustomFields); $this->add($mergeCustomFields); $mergeGroups = new Element\Checkbox('mergeGroups'); $mergeGroups->setLabel('Merge manual group assignments'); $mergeGroups->setChecked($config->defaultMergeGroups); $this->add($mergeGroups); $mergePackages = new Element\Checkbox('mergePackages'); $mergePackages->setLabel('Merge missing package assignments'); $mergePackages->setChecked($config->defaultMergePackages); $this->add($mergePackages); $submit = new \Library\Form\Element\Submit('submit'); $submit->setLabel('Merge selected clients'); $this->add($submit); // Checkboxes for "clients[]" are generated manually, without // \Zend\Form\Element. Define an input filter to have them processed. $arrayCount = new \Zend\Validator\Callback(); $arrayCount->setCallback(array($this, 'validateArrayCount'))->setMessage('At least 2 different clients have to be selected', \Zend\Validator\Callback::INVALID_VALUE); $inputFilter = new \Zend\InputFilter\InputFilter(); $inputFilter->add(array('name' => 'clients', 'required' => true, 'continue_if_empty' => true, 'filters' => array(array($this, 'clientsFilter')), 'validators' => array($arrayCount, new \Zend\Validator\Explode(array('validator' => new \Zend\Validator\Digits()))), 'error_message' => $arrayCount->getDefaultTranslator()->translate($arrayCount->getMessageTemplates()[\Zend\Validator\Callback::INVALID_VALUE]))); $this->setInputFilter($inputFilter); }
/** {@inheritdoc} */ public function init() { parent::init(); $preferences = new \Zend\Form\Fieldset('Preferences'); $this->add($preferences); $submit = new \Library\Form\Element\Submit('Submit'); $submit->setLabel('Set'); $this->add($submit); }
/** {@inheritdoc} */ public function init() { parent::init(); $translator = $this->getOption('translator'); $this->_filters = array('Name' => $translator->translate('Name'), 'UserName' => $translator->translate('User name'), 'Windows.UserDomain' => $translator->translate('User domain'), 'Windows.Workgroup' => $translator->translate('Workgroup'), 'OsName' => $translator->translate('OS name'), 'OsVersionNumber' => $translator->translate('OS version number'), 'OsVersionString' => $translator->translate('OS version string'), 'Windows.CpuArchitecture' => $translator->translate('OS architecture'), 'OsComment' => $translator->translate('OS comment'), 'Windows.ProductKey' => $translator->translate('Windows product key'), 'Windows.ManualProductKey' => $translator->translate('Windows product key (manual)'), 'Software.Name' => $translator->translate('Software: Name'), 'Software.Version' => $translator->translate('Software: Version'), 'Software.Publisher' => $translator->translate('Software: Publisher'), 'Software.Comment' => $translator->translate('Software: Comment'), 'Software.InstallLocation' => $translator->translate('Software: Install location'), 'MsOfficeProduct.ProductKey' => $translator->translate('MS Office product key'), 'MsOfficeProduct.ProductId' => $translator->translate('MS Office product ID'), 'InventoryDate' => $translator->translate('Last inventory'), 'LastContactDate' => $translator->translate('Last contact'), 'CpuType' => $translator->translate('CPU type'), 'CpuClock' => $translator->translate('CPU clock (MHz)'), 'CpuCores' => $translator->translate('CPU cores'), 'PhysicalMemory' => $translator->translate('Physical memory'), 'SwapMemory' => $translator->translate('Swap memory'), 'Manufacturer' => $translator->translate('Manufacturer'), 'ProductName' => $translator->translate('Model'), 'Serial' => $translator->translate('Serial number'), 'AssetTag' => $translator->translate('Asset tag'), 'BiosVersion' => $translator->translate('BIOS version'), 'BiosDate' => $translator->translate('BIOS date'), 'Filesystem.Size' => $translator->translate('Filesystem size (MB)'), 'Filesystem.FreeSpace' => $translator->translate('Filesystem free space (MB)'), 'DnsServer' => $translator->translate('DNS server'), 'DefaultGateway' => $translator->translate('Default gateway'), 'NetworkInterface.IpAddress' => $translator->translate('IP address'), 'NetworkInterface.MacAddress' => $translator->translate('MAC address'), 'NetworkInterface.Subnet' => $translator->translate('Network address'), 'NetworkInterface.Netmask' => $translator->translate('Network Mask'), 'Printer.Name' => $translator->translate('Printer name'), 'Printer.Port' => $translator->translate('Printer port'), 'Printer.Driver' => $translator->translate('Printer driver'), 'UserAgent' => $translator->translate('User agent'), 'Display.Manufacturer' => $translator->translate('Monitor: manufacturer'), 'Display.Description' => $translator->translate('Monitor: description'), 'Display.Serial' => $translator->translate('Monitor: serial'), 'Display.Edid' => $translator->translate('Monitor: EDID'), 'DisplayController.Name' => $translator->translate('Display controller'), 'DisplayController.Memory' => $translator->translate('GPU memory'), 'Modem.Name' => $translator->translate('Modem'), 'AudioDevice.Name' => $translator->translate('Audio device'), 'Port.Name' => $translator->translate('Port name')); // Append filters and labels for registry values/data foreach ($this->getOption('registryManager')->getValueDefinitions() as $regValue) { $name = $regValue['Name']; $this->_filters["Registry.{$name}"] = "Registry: {$name}"; } // Append filters and labels for user defined info $template = $translator->translate('User defined: %s'); foreach ($this->getOption('customFieldManager')->getFields() as $name => $type) { $key = "CustomFields.{$name}"; switch ($type) { case 'text': case 'clob': break; case 'integer': case 'float': case 'date': $this->_types[$key] = $type; break; default: throw new \UnexpectedValueException('Unsupported datatype: ' . $type); } if ($name == 'TAG') { $label = $translator->translate('Category'); } else { $label = $name; } $this->_filters[$key] = sprintf($template, $label); } $filter = new Element\Select('filter'); $filter->setLabel('Search for')->setAttribute('type', 'select_untranslated')->setAttribute('onchange', 'filterChanged();')->setValueOptions($this->_filters); $this->add($filter); $search = new Element\Text('search'); $search->setLabel('Value'); $this->add($search); // Operators dropdown. Options are set by JS depending on filter type. // Since valid options are known only after submission, the internal // InArray validator must be disabled and replaced by a callback. $operator = new Element\Select('operator'); $operator->setDisableInArrayValidator(true)->setLabel('Operator'); $this->add($operator); $invert = new Element\Checkbox('invert'); $invert->setLabel('Invert results'); $this->add($invert); $submit = new \Library\Form\Element\Submit('customSearch'); $submit->setLabel('Search'); $this->add($submit); $inputFilter = new \Zend\InputFilter\InputFilter(); $inputFilter->add(array('name' => 'search', 'continue_if_empty' => true, 'filters' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'filterSearch')))), 'validators' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateSearch')))))); $inputFilter->add(array('name' => 'operator', 'validators' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateOperator')))))); $this->setInputFilter($inputFilter); $this->_operatorsText = array('like' => $translator->translate("Substring match, wildcards '?' and '*' allowed"), 'eq' => $translator->translate('Exact match')); }
/** {@inheritdoc} */ public function init() { parent::init(); $inputFilter = new \Zend\InputFilter\InputFilter(); // Create list of values as array because nested iteration does not work with ResultSet objects. $this->_definedValues = iterator_to_array($this->getOption('registryManager')->getValueDefinitions()); // Subform for enabling/disabling registry inspection, in addition to // the same setting in preferences. $fieldsetInspect = new \Zend\Form\Fieldset('inspect'); $inspect = new Element\Checkbox('inspect'); $inspect->setLabel('Inspect registry')->setChecked($this->getOption('config')->inspectRegistry); $fieldsetInspect->add($inspect); $this->add($fieldsetInspect); // Subform for existing values $fieldsetExisting = new \Zend\Form\Fieldset('existing'); $inputFilterExisting = new \Zend\InputFilter\InputFilter(); // Create text elements for existing values to rename them foreach ($this->_definedValues as $value) { $name = $value['Name']; $elementName = "value_{$value['Id']}_name"; $element = new Element\Text($elementName); $element->setValue($name)->setLabel($value['FullPath']); $inputFilterExisting->add(array('name' => $elementName, 'required' => true, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'StringLength', 'options' => array('max' => 255)), $this->_createBlacklistValidator($name)))); $fieldsetExisting->add($element); } $this->add($fieldsetExisting); $inputFilter->add($inputFilterExisting, 'existing'); // Subform for new value $fieldsetNew = new \Zend\Form\Fieldset('new_value'); $newName = new Element\Text('name'); $newName->setLabel('Name'); $fieldsetNew->add($newName); $newRootKey = new Element\Select('root_key'); $newRootKey->setLabel('Root key')->setAttribute('type', 'select_untranslated')->setValueOptions(\Model\Registry\Value::rootKeys())->setValue(\Model\Registry\Value::HKEY_LOCAL_MACHINE); $fieldsetNew->add($newRootKey); // Additional validation in isValid() $newSubKeys = new Element\Text('subkeys'); $newSubKeys->setLabel('Subkeys'); $fieldsetNew->add($newSubKeys); $newValue = new Element\Text('value'); $newValue->setLabel('Only this value (optional)'); $fieldsetNew->add($newValue); $submit = new \Library\Form\Element\Submit('submit'); $submit->setLabel('Change'); $fieldsetNew->add($submit); $this->add($fieldsetNew); $inputFilterNew = new \Zend\InputFilter\InputFilter(); $inputFilterNew->add(array('name' => 'name', 'required' => false, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'StringLength', 'options' => array('max' => 255)), $this->_createBlacklistValidator()))); $inputFilterNew->add(array('name' => 'subkeys', 'continue_if_empty' => true, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateEmptySubkeys'), 'message' => "Value is required and can't be empty")), array('name' => 'StringLength', 'options' => array('max' => 255))))); $inputFilterNew->add(array('name' => 'value', 'required' => false, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'StringLength', 'options' => array('max' => 255))))); $inputFilter->add($inputFilterNew, 'new_value'); $this->setInputFilter($inputFilter); }
/** {@inheritdoc} */ public function init() { parent::init(); $inputFilter = new \Zend\InputFilter\InputFilter(); $id = new Element\Text('Id'); $id->setLabel('Login name'); $this->add($id); $inputFilter->add(array('name' => 'Id', 'required' => true, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'StringLength', 'options' => array('max' => 255))))); $password = new Element\Password('Password'); $password->setLabel('Password'); $this->add($password); $inputFilter->add(array('name' => 'Password', 'validators' => array(array('name' => 'StringLength', 'options' => array('min' => 8))))); $password2 = new Element\Password('PasswordRepeat'); $password2->setLabel('Repeat password'); $this->add($password2); $identicalValidator = new \Zend\Validator\Identical(); $identicalValidator->setToken('Password'); $identicalValidator->setTranslatorTextDomain('default')->setMessage('The passwords do not match'); $inputFilter->add(array('name' => 'PasswordRepeat', 'continue_if_empty' => 'true', 'validators' => array($identicalValidator))); $firstName = new Element\Text('FirstName'); $firstName->setLabel('First name'); $this->add($firstName); $inputFilter->add(array('name' => 'FirstName', 'required' => false, 'allow_empty' => true, 'continue_if_empty' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Null')), 'validators' => array(array('name' => 'Library\\Validator\\StringLength', 'options' => array('max' => 255))))); $lastName = new Element\Text('LastName'); $lastName->setLabel('Last name'); $this->add($lastName); $inputFilter->add(array('name' => 'LastName', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Null')), 'validators' => array(array('name' => 'Library\\Validator\\StringLength', 'options' => array('max' => 255))))); $mailAddress = new Element\Text('MailAddress'); $mailAddress->setLabel('Mail address'); $this->add($mailAddress); $inputFilter->add(array('name' => 'MailAddress', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Null')), 'validators' => array(array('name' => 'Library\\Validator\\StringLength', 'options' => array('max' => 255)), array('name' => 'EmailAddress', 'options' => array('allow' => \Zend\Validator\Hostname::ALLOW_ALL))))); $comment = new Element\Textarea('Comment'); $comment->setLabel('Comment'); $this->add($comment); $inputFilter->add(array('name' => 'Comment', 'required' => false, 'filters' => array(array('name' => 'StringTrim'), array('name' => 'Null')))); // Submit button text is set in subclass $submit = new \Library\Form\Element\Submit('Submit'); $this->add($submit); $this->setInputFilter($inputFilter); }
/** {@inheritdoc} */ public function init() { parent::init(); $inputFilter = new \Zend\InputFilter\InputFilter(); $integerFilter = array('name' => 'Callback', 'options' => array('callback' => array($this, 'normalize'), 'callback_params' => 'integer')); $integerValidator = array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateType'), 'callbackOptions' => 'integer')); // Package name $name = new Element\Text('Name'); $name->setLabel('Name'); $this->add($name); $inputFilter->add(array('name' => 'Name', 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'StringLength', 'options' => array('max' => 255)), array('name' => 'Library\\Validator\\NotInArray', 'options' => array('haystack' => $this->getOption('packageManager')->getAllNames(), 'caseSensitivity' => \Library\Validator\NotInArray::CASE_INSENSITIVE))))); // Comment $comment = new Element\Textarea('Comment'); $comment->setLabel('Comment'); $this->add($comment); $inputFilter->add(array('name' => 'Comment', 'required' => false, 'filters' => array(array('name' => 'StringTrim')))); // Platform combobox $platform = new Element\Select('Platform'); $platform->setLabel('Platform')->setAttribute('type', 'select_untranslated')->setAttribute('id', 'form_package_build_platform')->setAttribute('onchange', 'changePlatform()')->setValueOptions(array('windows' => 'Windows', 'linux' => 'Linux', 'mac' => 'MacOS')); $this->add($platform); // Action combobox // Translate labels manually to let xgettext recognize them $action = new Element\Select('DeployAction'); $action->setLabel('Action')->setAttribute('onchange', 'changeParam()')->setValueOptions(array('launch' => $this->_('Download package, execute command, retrieve result'), 'execute' => $this->_('Optionally download package, execute command'), 'store' => $this->_('Just download package to target path'))); $this->add($action); // Command line or target path for action // Label is set by JavaScript code. $actionParam = new Element\Text('ActionParam'); $this->add($actionParam); $inputFilter->add(array('name' => 'ActionParam', 'required' => true)); // Upload file $file = new Element\File('File'); $file->setLabel('File'); $this->add($file); $inputFilter->add(array('name' => 'File')); // Requirement is set in isValid() // Priority combobox $priority = new \Library\Form\Element\SelectSimple('Priority'); $priority->setValueOptions(range(0, 10))->setLabel('Priority (0: exclusive, 10: lowest)'); $this->add($priority); // Maximum fragment size. $maxFragmentSize = new Element\Text('MaxFragmentSize'); $maxFragmentSize->setAttribute('size', '8')->setLabel('Maximum fragment size (kB)'); $this->add($maxFragmentSize); $inputFilter->add(array('name' => 'MaxFragmentSize', 'required' => false, 'filters' => array($integerFilter), 'validators' => array($integerValidator))); // Warn user before installation $warn = new Element\Checkbox('Warn'); $warn->setLabel('Warn user')->setAttribute('id', 'form_package_build_warn')->setAttribute('onchange', 'toggleWarn()'); $this->add($warn); // Message to display to user before installation $warnMessage = new Element\Textarea('WarnMessage'); $warnMessage->setLabel('Message'); $this->add($warnMessage); $inputFilter->add(array('name' => 'WarnMessage', 'required' => false, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateNotificationMessage'), 'message' => $this->_('Message must not contain double quotes.')))))); // Countdown before installation starts automatically $warnCountdown = new Element\Text('WarnCountdown'); $warnCountdown->setAttribute('size', '5')->setLabel('Countdown (seconds)'); $this->add($warnCountdown); $inputFilter->add(array('name' => 'WarnCountdown', 'required' => false, 'filters' => array($integerFilter), 'validators' => array($integerValidator))); // Allow user abort $warnAllowAbort = new Element\Checkbox('WarnAllowAbort'); $warnAllowAbort->setLabel('Allow abort by user'); $this->add($warnAllowAbort); // Allow user delay $warnAllowDelay = new Element\Checkbox('WarnAllowDelay'); $warnAllowDelay->setLabel('Allow delay by user'); $this->add($warnAllowDelay); // Message to display to user after deployment $postInstMessage = new Element\Textarea('PostInstMessage'); $postInstMessage->setLabel('Post-installation message'); $this->add($postInstMessage); $inputFilter->add(array('name' => 'PostInstMessage', 'required' => false, 'filters' => array(array('name' => 'StringTrim')), 'validators' => array(array('name' => 'Callback', 'options' => array('callback' => array($this, 'validateNotificationMessage'), 'message' => $this->_('Message must not contain double quotes.')))))); // Submit button $submit = new \Library\Form\Element\Submit('Submit'); $submit->setLabel('Build'); $this->add($submit); $this->setInputFilter($inputFilter); }
/** {@inheritdoc} */ public function init() { parent::init(); $inputFilter = new \Zend\InputFilter\InputFilter(); // Agent options $agent = new \Zend\Form\Fieldset('Agent'); $inputFilterAgent = new \Zend\InputFilter\InputFilter(); $contactInterval = new Element\Text('contactInterval'); $contactInterval->setLabel('Agent contact interval (in hours)')->setAttribute('size', '5'); $agent->add($contactInterval); $inputFilterAgent->add($this->_getIntegerFilter('contactInterval', 1)); $inventoryInterval = new Element\Text('inventoryInterval'); $inventoryInterval->setLabel('Inventory interval (in days, 0 = always, -1 = never)')->setAttribute('size', '5'); $agent->add($inventoryInterval); $inputFilterAgent->add($this->_getIntegerFilter('inventoryInterval', -1)); $this->add($agent); $inputFilter->add($inputFilterAgent, 'Agent'); // Download options $download = new \Zend\Form\Fieldset('Download'); $inputFilterDownload = new \Zend\InputFilter\InputFilter(); $packageDeployment = new Element\Checkbox('packageDeployment'); $packageDeployment->setLabel('Enable package download')->setAttribute('onchange', 'toggle(this)'); $download->add($packageDeployment); $downloadPeriodDelay = new Element\Text('downloadPeriodDelay'); $downloadPeriodDelay->setLabel('Delay (in seconds) between periods')->setAttribute('size', '5'); $download->add($downloadPeriodDelay); $inputFilterDownload->add($this->_getIntegerFilter('downloadPeriodDelay', 1)); $downloadCycleDelay = new Element\Text('downloadCycleDelay'); $downloadCycleDelay->setLabel('Delay (in seconds) between cycles')->setAttribute('size', '5'); $download->add($downloadCycleDelay); $inputFilterDownload->add($this->_getIntegerFilter('downloadCycleDelay', 1)); $downloadFragmentDelay = new Element\Text('downloadFragmentDelay'); $downloadFragmentDelay->setLabel('Delay (in seconds) between fragments')->setAttribute('size', '5'); $download->add($downloadFragmentDelay); $inputFilterDownload->add($this->_getIntegerFilter('downloadFragmentDelay', 1)); $downloadMaxPriority = new Element\Text('downloadMaxPriority'); $downloadMaxPriority->setLabel('Maximum package priority')->setAttribute('size', '5'); $download->add($downloadMaxPriority); $inputFilterDownload->add($this->_getIntegerFilter('downloadMaxPriority', 1)); $downloadTimeout = new Element\Text('downloadTimeout'); $downloadTimeout->setLabel('Timeout (in days)')->setAttribute('size', '5'); $download->add($downloadTimeout); $inputFilterDownload->add($this->_getIntegerFilter('downloadTimeout', 1)); $this->add($download); $inputFilter->add($inputFilterDownload, 'Download'); // Network scanning options $scan = new \Zend\Form\Fieldset('Scan'); $inputFilterScan = new \Zend\InputFilter\InputFilter(); $allowScan = new Element\Checkbox('allowScan'); $allowScan->setLabel('Allow network scanning')->setAttribute('onchange', 'toggle(this)'); $scan->add($allowScan); $subnets = new \Library\Form\Element\SelectSimple('scanThisNetwork'); $subnets->setLabel('Always scan this network')->setEmptyOption(''); $scan->add($subnets); $inputFilterScan->add(array('name' => 'scanThisNetwork', 'required' => false)); $scanSnmp = new Element\Checkbox('scanSnmp'); $scanSnmp->setLabel('Use SNMP'); $scan->add($scanSnmp); $this->add($scan); $inputFilter->add($inputFilterScan, 'Scan'); $submit = new \Library\Form\Element\Submit('Submit'); $submit->setLabel('OK'); $this->add($submit); $this->setInputFilter($inputFilter); }