Commit: da1c35610c65ffc530d05d7d6d312465cc3f62b8
Author: gwoo | Date: 2010-01-20 19:29:04 -0800
diff --git a/controllers/ExtensionsController.php b/controllers/ExtensionsController.php
index 320fb37..09fe123 100644
--- a/controllers/ExtensionsController.php
+++ b/controllers/ExtensionsController.php
@@ -79,16 +79,19 @@ class ExtensionsController extends \lithium\action\Controller {
$extension = Extension::find('first', compact('conditions'));
if (isset($extension->error) && $extension->error == 'not_found') {
$this->redirect(array(
- 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'));
+ 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'
+ ));
}
} else {
$extension = Extension::find($this->request->data['id']);
if (isset($extension->error) && $extension->error == 'not_found') {
$this->redirect(array(
- 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'));
+ 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'
+ ));
} elseif ($extension->save($this->request->data)) {
$this->redirect(array(
- 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'));
+ 'plugin' => 'li3_lab', 'controller' => 'extensions','action' => 'index'
+ ));
}
}
$url = array(
diff --git a/controllers/PluginsController.php b/controllers/PluginsController.php
index 1f5ec9b..e757400 100644
--- a/controllers/PluginsController.php
+++ b/controllers/PluginsController.php
@@ -97,11 +97,25 @@ class PluginsController extends \lithium\action\Controller {
public function add() {
if (!empty($this->request->data['formula'])) {
$formula = Formula::create($this->request->data['formula']);
+ }
+ if (!empty($this->request->data['json'])) {
+ $data = json_decode($this->request->data['json']);
+ $formula = Formula::create(array(
+ 'name' => "{$data->name}.json",
+ 'contents' => $this->request->data['json']
+ ));
+ }
+ if (!empty($formula)) {
if ($formula->save()) {
$this->request->data = json_decode($formula->contents(), true);
- return $this->verify();
+ $this->verify();
}
}
+ if (empty($plugin)) {
+ $plugin = Plugin::create();
+ }
+ $url = array('plugin' => 'li3_lab', 'controller' => 'plugins', 'action' => 'add');
+ return compact('plugin', 'url');
}
/**
@@ -122,9 +136,9 @@ class PluginsController extends \lithium\action\Controller {
if (empty($plugin)) {
$plugin = Plugin::create($this->request->data);
}
-
- $this->set(compact('plugin'));
- $this->render('form');
+ $url = array('plugin' => 'li3_lab', 'controller' => 'plugins', 'action' => 'verify');
+ $this->set(compact('plugin', 'url'));
+ $this->render('verify');
}
}
diff --git a/extensions/data/source/Media.php b/extensions/data/source/Media.php
index 9c78602..649c111 100644
--- a/extensions/data/source/Media.php
+++ b/extensions/data/source/Media.php
@@ -8,8 +8,6 @@
namespace li3_lab\extensions\data\source;
-use \ArrayIterator;
-use \SplFileInfo;
use \lithium\core\Libraries;
/**
@@ -158,17 +156,16 @@ class Media extends \lithium\data\Source {
$data = $query->data();
$filename = preg_replace('/\W-/', '', $data['name']);
if (!empty($data['tmp_name'])) {
- $contents = file_get_contents($data['tmp_name']);
-
- if (preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $contents)) {
- $contents = base64_decode($contents);
- }
- $file = "{$path}/{$table}/{$filename}";
- if (file_put_contents($file, $contents)) {
- $query->conditions(array('name' => $filename));
- $record = $self->read($query, $options);
- return $query->record()->data = $record;
- }
+ $data['contents'] = file_get_contents($data['tmp_name']);
+ }
+ if (preg_match('%^[a-zA-Z0-9/+]*={0,2}$%', $data['contents'])) {
+ $data['contents'] = base64_decode($data['contents']);
+ }
+ $file = "{$path}/{$table}/{$filename}";
+ if (file_put_contents($file, $data['contents'])) {
+ $query->conditions(array('name' => $filename));
+ $record = $self->read($query, $options);
+ return $query->record()->data = $record;
}
return false;
});
diff --git a/extensions/helper/Form.php b/extensions/helper/Form.php
index 0ffa825..bc35e09 100644
--- a/extensions/helper/Form.php
+++ b/extensions/helper/Form.php
@@ -7,20 +7,34 @@ class Form extends \lithium\template\helper\Form {
public function multi($name, $fields = array(), $options = array()) {
$defaults = empty($fields) ? array($name => null) : array_flip($fields);
$data = $this->_binding->data($name);
- $data = is_object($data) ? $data->data() : array($defaults);
- $fieldset = array();
+ $data = is_object($data) ? $data->data() : $data;
+ $default = null;
- foreach ($data as $key => $data) {
- $data = array_merge($defaults, (array) $data);
- $fields = array();
+ if (empty($data)) {
+ $data = array($defaults);
+ $default = false;
+ }
+ $fieldset = $inputs = array();
+
+ if (empty($fields)) {
+ $inputs[] = $this->label($name, ucwords($name));
+ foreach ($data as $key => $value) {
+ $value = isset($default) ? $default : $value;
+ $inputs[] = $this->text("{$name}[{$key}]", $options + compact('value'));
+ }
+ $fieldset[] = "<div class=\"{$name}\">" . join("\n", $inputs) . "</div>";
+ return join("\n", $fieldset);
+ }
- foreach (array_keys($defaults) as $field) {
- $fields[] = join("\n", array(
+ foreach ($data as $key => $fields) {
+ foreach ((array) $fields as $field => $value) {
+ $value = isset($default) ? $default : $value;
+ $inputs[] = join("\n", array(
$this->label("{$name}.{$key}.{$field}", ucwords($field)),
- $this->text("{$name}[{$key}][{$field}]", $options)
+ $this->text("{$name}[{$key}][{$field}]", $options + compact('value'))
));
}
- $fieldset[] = "<div class=\"{$name}\">" . join("\n", $fields) . "</div>";
+ $fieldset[] = "<div class=\"{$name}\">" . join("\n", $inputs) . "</div>";
}
return join("\n", $fieldset);
}
diff --git a/views/extensions/form.html.php b/views/extensions/form.html.php
index 85ec00f..dde4948 100644
--- a/views/extensions/form.html.php
+++ b/views/extensions/form.html.php
@@ -2,44 +2,8 @@
<?php $errors = $extension->errors(); ?>
-<ul class="tabs">
- <li><a id="paste-json-tab" href="#paste-json">Paste JSON</a></li>
- <li><a id="upload-json-tab" href="#upload-json">Upload JSON</a></li>
- <li><a id="add-form-tab" href="#add-form">New Extension Form</a></li>
-</ul>
-
-<div id="paste-json" class="tab-page">
- <h3>Paste JSON</h3>
- <?php echo $this->form->create($extension, array('method' => 'POST','url' => $url)); ?>
- <div class="input">
- <?php
- echo $this->form->textarea('json', array('cols' => 40, 'rows' => 10));
- if (isset($errors['json'])) {
- echo '<div style="color:red">' . implode(', ', $errors['json']) . '</div>';
- }
- ?>
- </div>
- <?php
- echo $this->form->submit('save');
- echo $this->form->submit('cancel', array('value' => 'cancel'));
- ?>
- </form>
-</div>
-
-<div id="upload-json" class="tab-page">
- <h3>Upload JSON</h3>
- <form method="POST" enctype="multipart/form-data">
- <input type="file" name="formula">
- <?php
- echo $this->form->submit('upload');
- echo $this->form->submit('cancel', array('value' => 'cancel'));
- ?>
- </form>
-</div>
-
<div id="add-form" class="tab-page">
- <h3>New Extension Form</h3>
-<?php
+<?php
echo $this->form->create($extension, array('method' => 'POST','url' => $url));
@@ -87,10 +51,9 @@ if (isset($extension->id) && isset($extension->rev)) {
if (isset($errors['maintainers'])) {
echo '<div style="color:red">' . implode(', ', $errors['maintainers']) . '</div>';
}
- echo $this->maintainer->render($extension->maintainers);
+ echo $this->form->multi('maintainers', array('name', 'email', 'website'));
?>
</fieldset>
- <button id="add-maintainer">add maintainer</button>
</div>
<div class="buttons">
<?php
@@ -101,20 +64,12 @@ if (isset($extension->id) && isset($extension->rev)) {
</form>
</div>
-
-<script type="text/javascript">
+<?php
+$this->scripts(
+<<<'script'
$(document).ready(function() {
- $(".tab-page").hide().addClass("hidden");
- $("ul.tabs li a").click(function() {
- var id = $(this).attr("id");
- var page = id.match(/(.*)\-tab/);
- page = "#"+page[1];
- if ($(page).hasClass("hidden")) {
- $(".tab-page").hide().addClass("hidden");
- $(page).show().removeClass("hidden");
- }
- return false;
- });
- $("#add-form").show().removeClass("hidden");
+ $(".maintainers").input_list();
});
-</script>
+script
+);
+?>
\ No newline at end of file
diff --git a/views/layouts/default.html.php b/views/layouts/default.html.php
index 3a73b05..140f8f1 100644
--- a/views/layouts/default.html.php
+++ b/views/layouts/default.html.php
@@ -15,12 +15,15 @@
<head>
<?=$this->html->charset(); ?>
<title>Li3 Lab</title>
- <?=$this->scripts(); ?>
<?=$this->html->link('Icon', null, array('type' => 'icon')); ?>
- <?=$this->html->style(array('base', 'http://li3.rad-dev.org/css/li3.css'))?>
- <?=$this->html->style('li3_lab')?>
- <?=$this->html->script('li3_lab')?>
- <?=$this->html->script('http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js')?>
+
+ <?=$this->html->style(array('base', 'http://li3.rad-dev.org/css/li3.css', 'li3_lab'))?>
+ <?=$this->html->script(array(
+ 'http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js',
+ 'http://li3.rad-dev.org/js/jquery.input_list.js'
+ ));?>
+ <script type="text/javascript"><?=$this->scripts();?></script>
+
</head>
<body>
<div id="wrapper">
@@ -66,12 +69,10 @@
</div>
<?php echo $this->html->script(array(
- 'li3_lab', 'http://li3.rad-dev.org/js/li3.console.js'
+ 'http://li3.rad-dev.org/js/li3.console.js'
)); ?>
<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
- //li3Lab.maintainers();
- $('#maintainers').inputList();
li3Console.setup();
});
</script>
diff --git a/views/plugins/add.html.php b/views/plugins/add.html.php
index 5fd952e..11e132d 100644
--- a/views/plugins/add.html.php
+++ b/views/plugins/add.html.php
@@ -1,6 +1,113 @@
-<form method="POST" enctype="multipart/form-data">
+<h2>Add Plugin</h2>
- <input type="file" name="formula">
- <input type="submit" value="add">
+<?php $errors = $plugin->errors(); ?>
-</form>
\ No newline at end of file
+<ul class="tabs">
+ <li><a id="paste-json-tab" href="#paste-json">Paste Formula</a></li>
+ <li><a id="upload-json-tab" href="#upload-json">Upload Formula</a></li>
+ <li><a id="add-form-tab" href="#add-form">New Plugin Form</a></li>
+</ul>
+
+<div id="paste-json" class="tab-page">
+ <h3>Paste JSON</h3>
+ <?php echo $this->form->create($plugin, array('method' => 'POST', 'url' => $url)); ?>
+ <div class="input">
+ <?php
+ echo $this->form->textarea('json', array('cols' => 40, 'rows' => 10));
+ if (isset($errors['json'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['json']) . '</div>';
+ }
+ ?>
+ </div>
+ <?php
+ echo $this->form->submit('save');
+ echo $this->form->submit('cancel', array('value' => 'cancel'));
+ ?>
+ </form>
+</div>
+
+<div id="upload-json" class="tab-page">
+ <h3>Upload JSON</h3>
+ <?php echo $this->form->create($plugin, array(
+ 'method' => 'POST', 'url' => $url, 'enctype' => 'multipart/form-data'
+ ));?>
+ <input type="file" name="formula">
+ <?php
+ echo $this->form->submit('upload');
+ echo $this->form->submit('cancel', array('value' => 'cancel'));
+ ?>
+ </form>
+</div>
+
+<div id="add-form" class="tab-page">
+<h3>New Plugin Form</h3>
+<?php echo $this->form->create($plugin, array('method' => 'POST', 'url' => $url));?>
+
+<div class="input">
+ <?php
+ echo $this->form->label('summary', 'Summary', array('class' => 'required'));
+ echo $this->form->text('summary');
+ if (isset($errors['summary'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['summary']) . '</div>';
+ }
+ ?>
+</div>
+<div class="input">
+ <?php
+ echo $this->form->label('description', 'Description');
+ echo $this->form->textarea('description', array('cols' => 40, 'rows' => 10));
+ if (isset($errors['description'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['description']) . '</div>';
+ }
+ ?>
+</div>
+<div class="input">
+ <?php
+ if (isset($errors['sources'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['sources']) . '</div>';
+ }
+ echo $this->form->multi('sources');
+ ?>
+</div>
+<div class="input">
+ <fieldset id="maintainers">
+ <legend>Maintainers</legend>
+ <?php
+ if (isset($errors['maintainers'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['maintainers']) . '</div>';
+ }
+ echo $this->form->multi('maintainers', array('name', 'email', 'website'));
+ ?>
+ </fieldset>
+</div>
+<div class="buttons">
+<?php
+ echo $this->form->submit('save');
+ echo $this->form->submit('cancel', array('value' => 'cancel'));
+?>
+</div>
+</form>
+
+</div>
+<?php
+$this->scripts(
+<<<'script'
+ $(document).ready(function() {
+ $(".tab-page").hide().addClass("hidden");
+ $("ul.tabs li a").click(function() {
+ var id = $(this).attr("id");
+ var page = id.match(/(.*)\-tab/);
+ page = "#"+page[1];
+ if ($(page).hasClass("hidden")) {
+ $(".tab-page").hide().addClass("hidden");
+ $(page).show().removeClass("hidden");
+ }
+ return false;
+ });
+ $("#paste-json").show().removeClass("hidden");
+ $(".sources").input_list();
+ $(".maintainers").input_list();
+ });
+script
+);
+?>
\ No newline at end of file
diff --git a/views/plugins/form.html.php b/views/plugins/form.html.php
deleted file mode 100644
index 05b2125..0000000
--- a/views/plugins/form.html.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-$errors = $plugin->errors();
-echo $this->form->create($plugin, array('url' => array('plugin' => 'li3_lab', 'action' => 'verify')));
-
-$this->form->config(array('templates' => array('checkbox' =>
- '<input type="hidden" name="{:name}" value="0" />
- <input type="checkbox" value="1" name="{:name}"{:options} />'
-)));
-
-if (isset($plugin->id) && isset($plugin->rev)) {
- echo $this->form->hidden('id');
- echo $this->form->hidden('rev');
-}
-?>
-<div class="input">
- <?php
- echo $this->form->label('name', 'Plugin Name', array(
- 'class' => 'required'
- ));
- echo $this->form->text('name');
- if (isset($errors['name'])) {
- echo '<p style="color:red">' . implode(', ', $errors['name']) . '</p>';
- }
- ?>
-</div>
-<div class="input">
- <?php
- echo $this->form->label('version', 'Version', array(
- 'class' => 'required'
- ));
- echo $this->form->text('version');
- if (isset($errors['version'])) {
- echo '<p style="color:red">' . implode(', ', $errors['version']) . '</p>';
- }
- ?>
-</div>
-<div class="input">
- <?php
- echo $this->form->label('summary', 'Summary', array(
- 'class' => 'required'
- ));
- echo $this->form->textarea('summary', array('cols' => 40, 'rows' => 5));
- if (isset($errors['summary'])) {
- echo '<p style="color:red">' . implode(', ', $errors['summary']) . '</p>';
- }
- ?>
-</div>
-<div class="input">
- <?php
- echo $this->form->label('description', 'Description');
- echo $this->form->textarea('description', array('cols' => 40, 'rows' => 15));
- if (isset($errors['description'])) {
- echo '<p style="color:red">' . implode(', ', $errors['description']) . '</p>';
- }
- ?>
-</div>
-<div class="input">
- <?php
- if (isset($errors['sources'])) {
- echo '<div style="color:red">' . implode(', ', $errors['sources']) . '</div>';
- }
- echo $this->form->multi('sources');
- ?>
- <a href="#add-source" id="add-source" class="adder">Add Source</a>
-</div>
-<div class="input">
- <fieldset id="maintainers">
- <legend>Maintainers</legend>
- <?php
- if (isset($errors['maintainers'])) {
- echo '<div style="color:red">' . implode(', ', $errors['maintainers']) . '</div>';
- }
- echo $this->form->multi('maitainers', array('name', 'email', 'website'));
- ?>
- </fieldset>
- <a href="#add-maintainer" id="add-maintainer" class="adder">Add Maintainer</a>
-</div>
-<?php echo $this->form->submit('save', array('name' => 'verified'));?>
-<?php echo $this->form->submit('cancel', array('value' => 'cancel'));?>
-</form>
-<p></p>
\ No newline at end of file
diff --git a/views/plugins/verify.html.php b/views/plugins/verify.html.php
new file mode 100644
index 0000000..89d4376
--- /dev/null
+++ b/views/plugins/verify.html.php
@@ -0,0 +1,70 @@
+<h2>Add Plugin</h2>
+
+<?php $errors = $plugin->errors(); ?>
+
+<div id="add-form" class="tab-page">
+<h3>Verify</h3>
+<?php
+echo $this->form->create($plugin, array('method' => 'POST', 'url' => $url));
+
+ if (isset($plugin->id) && isset($plugin->rev)) {
+ echo $this->form->hidden('id');
+ echo $this->form->hidden('rev');
+ }
+ ?>
+ <div class="input">
+ <?php
+ echo $this->form->label('summary', 'Summary', array('class' => 'required'));
+ echo $this->form->text('summary');
+ if (isset($errors['summary'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['summary']) . '</div>';
+ }
+ ?>
+ </div>
+ <div class="input">
+ <?php
+ echo $this->form->label('description', 'Description');
+ echo $this->form->textarea('description', array('cols' => 40, 'rows' => 10));
+ if (isset($errors['description'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['description']) . '</div>';
+ }
+ ?>
+ </div>
+ <div class="input">
+ <?php
+ if (isset($errors['sources'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['sources']) . '</div>';
+ }
+ echo $this->form->multi('sources');
+ ?>
+ </div>
+ <div class="input">
+ <fieldset id="maintainers">
+ <legend>Maintainers</legend>
+ <?php
+ if (isset($errors['maintainers'])) {
+ echo '<div style="color:red">' . implode(', ', $errors['maintainers']) . '</div>';
+ }
+ echo $this->form->multi('maintainers', array('name', 'email', 'website'));
+ ?>
+ </fieldset>
+ </div>
+ <div class="buttons">
+ <?php
+ echo $this->form->submit('save');
+ echo $this->form->submit('cancel', array('value' => 'cancel'));
+ ?>
+ </div>
+</form>
+
+</div>
+<?php
+$this->scripts(
+<<<'script'
+ $(document).ready(function() {
+ $(".sources").input_list();
+ $(".maintainers").input_list();
+ });
+script
+);
+?>
\ No newline at end of file