Source of file BuildTaskTools.php
Size: 6,753 Bytes - Last Modified: 2021-12-23T10:00:25+00:00
/var/www/docs.ssmods.com/process/src/src/BuildTaskTools.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 | <?php namespace LeKoala\DevToolkit; use SilverStripe\ORM\ArrayLib; use SilverStripe\Core\ClassInfo; use SilverStripe\ORM\DataObject; use SilverStripe\Control\Director; use SilverStripe\Core\Environment; use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\Manifest\ClassLoader; use SilverStripe\Core\Manifest\ModuleLoader; /** * Makes your life easier with build tasks */ trait BuildTaskTools { /** * @var SilverStripe\Control\HTTPRequest */ protected $request; /** * @var array */ protected $options = []; /** * Increase time limit * * @return void */ protected function increaseTimeLimitTo($timeLimit = null) { Environment::increaseTimeLimitTo($timeLimit); if (!$timeLimit) { $this->message("Time limit is disabled", "info"); } else { $this->message("Time limit has been set to $timeLimit seconds", "info"); } } /** * Rebuild the class manifest * * @return void */ protected function regenerateClassManifest() { ClassLoader::inst()->getManifest()->regenerate(false); $this->message("The class manifest has been rebuilt", "created"); } /** * All dataobjects * * @return array */ protected function getValidDataObjects() { $list = ClassInfo::getValidSubClasses(DataObject::class); array_shift($list); return $list; } /** * All modules * * @return array */ protected function getModules() { return ArrayLib::valuekey(array_keys(ModuleLoader::inst()->getManifest()->getModules())); } /** * Get the request (and keep your imports clean :-) ) * * @return HTTPRequest */ protected function getRequest() { if (!$this->request) { die('Make sure to call $this->request = $request in your own class'); } return $this->request; } /** * Add options (to be called later with askOptions) * * @param string $key * @param string $title * @param mixed $default Default value. Input type will be based on this (bool => checkbox, etc) * @param array|Map $list An array of value for a dropdown * @return void */ protected function addOption($key, $title, $default = '', $list = null) { // Handle maps if (is_object($list) && method_exists($list, 'toArray')) { $list = $list->toArray(); } $opt = [ 'key' => $key, 'title' => $title, 'default' => $default, 'list' => $list, ]; $this->options[] = $opt; return $opt; } /** * Display a form with options * * Options are added through addOption method * * @return array Array with key => value corresponding to options asked */ protected function askOptions() { $values = []; $request = $this->getRequest(); echo '<form action="" method="post"><fieldset>'; foreach ($this->options as $opt) { $val = $request->requestVar($opt['key']); if ($val === null) { $val = $opt['default']; } $values[$opt['key']] = $val; if ($opt['list']) { $input = '<select name="' . $opt['key'] . '">'; $input .= '<option></option>'; foreach ($opt['list'] as $k => $v) { $selected = ''; if ($k == $val) { $selected = ' selected="selected"'; } $input .= '<option value="' . $k . '"' . $selected . '>' . $v . '</option>'; } $input .= '</select>'; } else { $type = 'text'; $input = null; if (isset($opt['default'])) { if (is_bool($opt['default'])) { $type = 'checkbox'; $checked = $val ? ' checked="checked"' : ''; $input = '<input type="hidden" name="' . $opt['key'] . '" value="0" />'; $input .= '<input type="' . $type . '" name="' . $opt['key'] . '" value="1"' . $checked . ' />'; } else { if (is_int($opt['default'])) { $type = 'numeric'; } } } if (!$input) { $input = '<input type="' . $type . '" name="' . $opt['key'] . '" value="' . $val . '" />'; } } echo '<div class="field">'; echo '<label> ' . $opt['title'] . ' ' . $input . '</label>'; echo '</div>'; echo '<br/>'; } echo '</fieldset><br/><input type="submit" />'; echo '</form>'; echo '<hr/ >'; return $values; } protected function message($message, $type = 'default') { if (Director::is_cli()) { $cli_map = [ 'repaired' => '>', 'success' => '✓', 'created' => '+', 'changed' => '+', 'bad' => '-', 'obsolete' => '-', 'deleted' => '-', 'notice' => '!', 'error' => '-', ]; $message = strip_tags($message); if (isset($cli_map[$type])) { $message = $cli_map[$type] . ' ' . $message; } if (!is_string($message)) { $message = json_encode($message); } echo " $message\n"; } else { $web_map = [ 'info' => 'blue', 'repaired' => 'blue', 'success' => 'green', 'created' => 'green', 'changed' => 'green', 'obsolete' => 'red', 'notice' => 'orange', 'deleted' => 'red', 'bad' => 'red', 'error' => 'red', ]; $color = '#000000'; if (isset($web_map[$type])) { $color = $web_map[$type]; } if (!is_string($message)) { $message = print_r($message, true); echo "<pre style=\"color:$color\">$message</pre>"; } else { echo "<div style=\"color:$color\">$message</div>"; } } } protected function isDev() { return Director::isDev(); } protected function isLive() { return Director::isLive(); } } |