Commit: da1c35610c65ffc530d05d7d6d312465cc3f62b8

Author: gwoo | Date: 2010-01-20 19:29:04 -0800
refactoring js and forms.
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