Example #1
0
 public static function modify_file($file, $content, $force = FALSE, $unlink = FALSE)
 {
     if ($unlink) {
         $file_already_exists = is_file($file);
         if ($file_already_exists) {
             unlink($file);
             Minion_CLI::write(Minion_CLI::color('Removed file ' . Debug::path($file), 'light_green'));
         } else {
             Minion_CLI::write(Minion_CLI::color('File does not exist ' . Debug::path($file), 'brown'));
         }
     } elseif ($force) {
         $file_already_exists = is_file($file);
         if (!is_dir(dirname($file))) {
             mkdir(dirname($file), 0777, TRUE);
         }
         file_put_contents($file, $content);
         if ($file_already_exists) {
             Minion_CLI::write(Minion_CLI::color('Overwritten file ' . Debug::path($file), 'brown'));
         } else {
             Minion_CLI::write(Minion_CLI::color('Generated file ' . Debug::path($file), 'light_green'));
         }
     } else {
         if (is_file($file)) {
             Minion_CLI::write(Minion_CLI::color('File already exists ' . Debug::path($file), 'brown'));
         } else {
             if (!is_dir(dirname($file))) {
                 mkdir(dirname($file), 0777, TRUE);
             }
             file_put_contents($file, $content);
             Minion_CLI::write(Minion_CLI::color('Generated file ' . Debug::path($file), 'light_green'));
         }
     }
 }
Example #2
0
 /**
  * Task to run pending migrations
  *
  * @return null
  */
 protected function _execute(array $params)
 {
     $migrations = new MigrationManager();
     Database::$default = $params['db'];
     $this->db = Database::instance();
     $db_config = Kohana::$config->load('database')->{$params['db']};
     if (!ORM::factory('Migration')->is_installed()) {
         /**
          * Get platform from database config
          */
         $platform = strtolower($db_config['type']);
         if ('mysqli' == $platform) {
             $platform = 'mysql';
         }
         /**
          * Get SQL from file for selected platform
          */
         $file = realpath(substr(__DIR__, 0, strlen(__DIR__) - strlen('classes/Task/Db')) . 'sql/' . $platform . '.sql');
         $handle = fopen($file, 'rb');
         $sql_create = fread($handle, filesize($file));
         $this->db->query(0, $sql_create);
         $msg = Minion_CLI::color("-----------------------------\n", 'green');
         $msg .= Minion_CLI::color("| Migration table create!!! |\n", 'green');
         $msg .= Minion_CLI::color("-----------------------------\n", 'green');
         Minion_CLI::write($msg);
     }
     $migrations->migrate($params['db'], $params['step']);
 }
Example #3
0
 protected function _execute(array $params)
 {
     $model = $params['model'];
     $orm = ORM::factory($model);
     $orm->send_search_mapping();
     Minion_CLI::write('Search mapping for model ' . Minion_CLI::color($model, 'blue') . ' updated!');
 }
 protected function _execute(array $options)
 {
     $db = $this->db_params($options['database']);
     $file = $options['file'] ? $options['file'] : Kohana::$config->load("migrations.path") . DIRECTORY_SEPARATOR . 'schema.sql';
     $command = strtr("mysqldump -u:username :password -h :hostname --skip-comments --add-drop-database --add-drop-table --no-data :database | sed 's/AUTO_INCREMENT=[0-9]*\\b//' > :file ", array(':username' => $db['username'], ':password' => $db['password'] ? '-p' . $db['password'] : '', ':database' => $db['database'], ':hostname' => $db['hostname'], ':file' => $file));
     Minion_CLI::write(Minion_CLI::color('Saving structure of database "' . $db['database'] . '" to ' . Debug::path($file), 'green'));
     system($command);
 }
 protected function _execute(array $options)
 {
     $db = $this->db_params($options['database']);
     $file = $options['file'] ? $options['file'] : Kohana::$config->load("migrations.path") . DIRECTORY_SEPARATOR . 'schema.sql';
     if ($options['force'] === NULL or 'yes' === Minion_CLI::read("This will destroy database " . $db['database'] . " Are you sure? [yes/NO]")) {
         $command = strtr("mysql -u:username :password -h :hostname :database < :file ", array(':username' => $db['username'], ':password' => $db['password'] ? '-p' . $db['password'] : '', ':database' => $db['database'], ':hostname' => $db['hostname'], ':file' => $file));
         Minion_CLI::write(Minion_CLI::color('Loading data from ' . Debug::path($file) . ' to ' . $db['database'], 'green'));
         system($command);
     } else {
         Minion_CLI::write(Minion_CLI::color('Nothing done', 'brown'));
     }
 }
 protected function _execute(array $options)
 {
     if ($options['force'] === NULL or 'yes' === Minion_CLI::read('This will destroy all data in the current database. Are you sure? [yes/NO]')) {
         Minion_CLI::write('Dropping Tables', 'green');
         $migrations = new Migrations(array('log' => 'Minion_CLI::write'));
         $migrations->clear_all();
         $options['task'] = 'db:migrate';
         Minion_Task::factory($options)->execute();
     } else {
         Minion_CLI::write(Minion_CLI::color('Nothing done', 'brown'));
     }
 }
 /**
  * Execute the task and copy the required files
  *
  * @param array $params the command options
  *
  * @return void
  */
 protected function _execute(array $params)
 {
     // Identify the vendor and destination path
     $vendor_path = $params['vendor-path'];
     $public_path = $params['public-path'];
     // Publish the twitter bootstrap js at DOCROOT/assets/js/twbs
     $this->copy_files($vendor_path . '/twbs/bootstrap/js', '/\\.js$/', $public_path . '/js/twbs');
     Minion_CLI::write(Minion_CLI::color('Published bootstrap javascripts to ' . $public_path . '/js/twbs', 'green'));
     // Publish the font-awesome font files as DOCROOT/assets/font
     $this->copy_files($vendor_path . '/fortawesome/font-awesome/font', '/^fontawesome/i', $public_path . '/font');
     Minion_CLI::write(Minion_CLI::color('Published font-awesome font to ' . $public_path . '/font', 'green'));
 }
 private function _resource(Resource $resource, array $route_params, $is_parent = FALSE)
 {
     $resource->param($route_params);
     $output = '';
     if (isset($route_params['id'])) {
         $output = (string) $resource->object();
     } elseif ($resource->option('singular')) {
         if ($model = $resource->option('model')) {
             $output = 'Singular model: ' . Minion_CLI::color(Jam::class_name($model), 'light_red');
         }
     } else {
         $output = 'Collection of: ' . Minion_CLI::color(Jam::class_name($resource->option('model')), 'light_red');
     }
     if ($is_parent) {
         $output = 'Parent: ' . $output;
     }
     Minion_CLI::write($output);
 }
Example #9
0
 protected function _execute(array $params)
 {
     $model = $params['model'];
     $limit = $params['limit'];
     $times = $params['times'];
     $offset = $params['offset'];
     $elasticsearch = ElasticSearch::instance();
     $orm = ORM::factory($model);
     $type = $orm->_search_type();
     $total = $orm->count_all();
     // Write the header
     Minion_CLI::write('#########################################' . str_repeat('#', strlen($model)) . '##');
     Minion_CLI::write('# Bulk updating search indexes in model: ' . Minion_CLI::color($model, 'blue') . ' #');
     Minion_CLI::write('#########################################' . str_repeat('#', strlen($model)) . '##');
     Minion_CLI::write();
     Minion_CLI::write('Importing ' . $limit . ' items at a time, beginning at offset ' . $offset . ', ' . $times . ' times');
     Minion_CLI::write();
     while ($times !== 0) {
         $results = ORM::factory($model)->limit($limit)->offset($offset)->find_all();
         // Break the loop if there are no more results in the database.
         if ($results->count() <= 0) {
             break;
         }
         $documents = array();
         foreach ($results as $result) {
             $documents[] = $result->get_search_document();
         }
         $elasticsearch->add_documents($type, $documents);
         $current = $offset + $results->count();
         Minion_CLI::write('Imported: ' . $current . '/' . $total);
         $offset += $limit;
         $times -= 1;
     }
     // Write the footer
     Minion_CLI::write();
     Minion_CLI::write('##########################');
     Minion_CLI::write('# Bulk update completed! #');
     Minion_CLI::write('##########################');
 }
Example #10
0
 private function _method($method)
 {
     return Minion_CLI::color(str_pad(implode(', ', array_map('strtoupper', (array) $method)), 20, ' ', STR_PAD_RIGHT), 'purple');
 }
Example #11
0
 /**
  * Rollback last executed migration.
  *
  */
 public function rollback($group = 'default', $step = 1)
 {
     Database::$default = $group;
     //Get last executed migration
     if (strtolower($step) === 'all') {
         $migrations = ORM::factory('Migration')->order_by('hash', 'DESC')->find_all();
     } else {
         $migrations = ORM::factory('Migration')->order_by('hash', 'DESC')->limit((int) $step)->find_all();
     }
     if (!count($migrations)) {
         $this->message("There's no migration to rollback");
         return;
     }
     $total_time = 0;
     foreach ($migrations as $key => $item) {
         $msg = "Migration '" . $item->name . "' with hash: " . $item->hash . ' was succefully "rollbacked"';
         $this->message($msg);
         $interval = microtime(true);
         try {
             $migration_object = $this->load_migration($item->hash, $group);
             $migration_object->down();
             $interval = microtime(true) - $interval;
             $total_time += $interval;
             $this->message(Minion_CLI::color("----------- with {$interval} s -----------\n", 'green'));
             $item->delete();
         } catch (Exception $e) {
             $this->message_error($e->getMessage());
             break;
         }
     }
     $this->message(Minion_CLI::color("\n----------- TOTAL TIME IS {$total_time} s -----------", 'green'));
 }
 public function execute(array $options)
 {
     $migrations = new Migrations(array('log' => 'Minion_CLI::write'));
     $migration = $migrations->generate_new_migration_file($options['name'], $options['template']);
     Minion_CLI::write(Minion_CLI::color($migration, 'green') . Minion_CLI::color(' Migration File Generated', 'brown'));
 }
Example #13
0
 /**
  * Outputs a string to the cli, replacing the previous line.
  *
  * @param string|array $text the text to output, or array of lines
  */
 public static function write_replace($text = '', $foreground = null, $background = null)
 {
     if ($foreground or $background) {
         $text = Minion_CLI::color($text, $foreground, $background);
     }
     fwrite(STDOUT, "\r" . $text);
 }
Example #14
0
 /**
  * Execute the task and compile the LESS files
  *
  * @param array $params the passed command options
  *
  * @throws Exception
  * @return void
  */
 protected function _execute(array $params)
 {
     // Prepare the options for recess
     $recess_opts = array();
     // Create the list of valid assets/less paths found in the CFS and format them as recess arguments
     $paths = Kohana::include_paths();
     foreach ($paths as $path) {
         $path .= 'assets/less';
         if (file_exists($path)) {
             $recess_opts[] = '--includePath ' . escapeshellarg($path);
         }
     }
     // Add paths for fontawesome and twitter bootstrap
     // Note that these are deliberately set at organisation level to namespace the less files below
     $recess_opts[] = '--includePath ' . escapeshellarg(realpath($params['vendor-path'] . '/fortawesome'));
     $recess_opts[] = '--includePath ' . escapeshellarg(realpath($params['vendor-path'] . '/twbs'));
     // Determine whether to lint or compile, and whether the output should be compressed
     if ($params['lint-only']) {
         $output = '';
     } else {
         $recess_opts[] = '--compile';
         // Find the path for the output file
         $output = ' > ' . escapeshellarg($params['public-path'] . '/css/' . $params['css-output'] . '.css');
         if (!$params['no-compress']) {
             $recess_opts[] = '--compress';
         }
     }
     // Find the input file to use
     $input = Kohana::find_file('assets/less', $params['less-input'], 'less');
     if (!$input) {
         throw new Exception("Could not find a valid input file source for {$params['less-input']}");
     }
     // Build and log the recess command
     $command = 'recess ' . implode(' ', $recess_opts) . ' ' . escapeshellarg($input) . $output;
     Minion_CLI::write(Minion_CLI::color('Preparing to execute recess with following command', 'green'));
     Minion_CLI::write(Minion_CLI::color('> ' . $command, 'green'));
     $loop = $params['loop-after'] > 0;
     do {
         Minion_CLI::write(Minion_CLI::color('Building CSS', 'light_gray'));
         // Execute and check the result
         system($command, $exit_code);
         if ($exit_code != 0) {
             throw new Exception("Command '" . $command . '" failed with exit code ' . $exit_code);
         }
         Minion_CLI::write(Minion_CLI::color('Compiled ' . $input . ' to ' . $output, 'green'));
         if ($loop) {
             sleep($params['loop-after']);
         }
     } while ($loop);
 }
$level = -1;
foreach (Debug::trace($trace) as $i => $step) {
    $level++;
    $file = $step['file'] ? Debug::path($step['file']) . '[' . $step['line'] . ']' : '{PHP internal call}';
    echo Minion_CLI::color(str_pad("#" . $level, 3), 'black', 'yellow') . " " . Minion_CLI::color($step['function'], 'yellow') . " - " . Minion_CLI::color($file, 'cyan') . \PHP_EOL;
    if (!$step['args']) {
        continue;
    }
    $max_name_len = max(array_map(function ($key) {
        return strlen($key);
    }, array_keys($step['args'])));
    $indent = str_repeat(" ", $max_name_len + 5);
    $wrap_at = $cols - strlen($indent);
    foreach ($step['args'] as $name => $arg) {
        $name = str_pad(is_numeric($name) ? "#" . $name : "\$" . $name, $max_name_len + 1);
        echo "  " . Minion_CLI::color($name, 'purple') . "  ";
        // FATAL have already converted args to strings
        $arg = $code === 'Fatal Error' ? $arg : html_entity_decode(strip_tags(Debug::dump($arg)), ENT_QUOTES, 'UTF-8');
        $arg = explode(\PHP_EOL, wordwrap($arg, $wrap_at, \PHP_EOL, TRUE));
        // Don't allow ridiculously long output if the method took a lot of args or a big array
        if (count($arg) > 20) {
            $truncated_count = count($arg) - 20;
            $arg = array_slice($arg, 0, 20);
            $arg[] = '<<<--- ' . $truncated_count . ' lines truncated --->>>';
        }
        $arg = implode(\PHP_EOL . $indent, $arg);
        echo $arg . \PHP_EOL;
    }
    if ($level >= 5) {
        break;
    }