aina 0.2.0.beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9bf384084ac4dcc6deb23c59231c73d92fc8676e
4
+ data.tar.gz: e1a802445afe753a40e06b6f70d558b92e015a52
5
+ SHA512:
6
+ metadata.gz: 759048bad7a66d82e8435a7daa4bd74d4a47ce78fa28166ec11c893d228d1c50ff527464f4896ba292da46ac5c7736b8b4edab6bf7a902ab35e358f42d1cc755
7
+ data.tar.gz: 804cb8f919f337a57743ecffd388391ac07cbf32ba542be302586d4505f07955524e09e2bb34f75109886679fe363027b4f38a3a443f12fed19f4c34b0a6b861
@@ -0,0 +1,6 @@
1
+ = aina
2
+
3
+ Describe your project here
4
+
5
+ :include:aina.rdoc
6
+
@@ -0,0 +1,5 @@
1
+ = aina
2
+
3
+ Generate this with
4
+ aina rdoc
5
+ After you have described your command line interface
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env ruby
2
+ require 'gli'
3
+
4
+ require 'aina'
5
+
6
+ include GLI::App
7
+
8
+ program_desc 'Code generator for WordPress themes'
9
+
10
+ version Aina::VERSION
11
+
12
+ # desc 'Describe some switch here'
13
+ # switch [:s,:switch]
14
+
15
+ # desc 'Describe some flag here'
16
+ # default_value 'the default'
17
+ # arg_name 'The name of the argument'
18
+ # flag [:f,:flagname]
19
+
20
+ desc 'Generates a piece of code from a template'
21
+ arg_name 'element_type element_name'
22
+ command [:generate, :g] do |c|
23
+ # c.desc 'Describe a switch to generate'
24
+ # c.switch :s
25
+
26
+ c.desc '[post_type] Content fields that a post_type supports, comma separated'
27
+ c.default_value PostType::DEFAULT_SUPPORT
28
+ c.arg_name 'supports'
29
+ c.flag [:s, :supports]
30
+
31
+ c.desc '[post_type] Capability type'
32
+ c.default_value PostType::DEFAULT_CAPABILITY
33
+ c.arg_name 'capability'
34
+ c.flag [:c, :capability]
35
+
36
+ c.desc 'Install Aina framework to easily create custom post_type fields'
37
+ c.switch [:i, :install]
38
+
39
+ c.action do |global_options,options,args|
40
+ @type = args.shift
41
+ @name = args.shift
42
+
43
+ if @type.nil?
44
+ raise NoMethodError, 'You need to generate something'
45
+ elsif @name.nil?
46
+ raise NoMethodError, 'You need to put a name to what you want tot generate'
47
+ end
48
+
49
+ if Generable.accepts?(@type)
50
+ element = Object.const_get(Generable.class_name_for @type).new(@name, options)
51
+ unless File.exists?(element.file)
52
+ element.generate
53
+ else
54
+ raise Exception, "A #{@type} named #{element.name} already exists. Action aborted."
55
+ end
56
+
57
+ output = "A #{@type} with name #{element.name} has been succesfully generated"
58
+ if options[:i]
59
+ output += ". Also, Aina's framework has been added.\n"
60
+ end
61
+
62
+ puts output
63
+ else
64
+ raise Exception, "#{@type} is not a generable piece of code. Options are: #{Generable.generable_types.join(', ')}"
65
+ end
66
+ end
67
+ end
68
+
69
+ desc 'Destroys a generated piece of code'
70
+ arg_name 'element_type element_name'
71
+ command [:destroy] do |c|
72
+ c.action do |global_options,options,args|
73
+ @type = args.shift
74
+ @name = args.shift
75
+
76
+ if @type.nil?
77
+ raise NoMethodError, 'You must specify what kind of file you want to destroy (i.e. post_type)'
78
+ elsif @name.nil?
79
+ raise NoMethodError, 'You must specify the name of what you want to destroy'
80
+ end
81
+
82
+ if Generable.accepts?(@type)
83
+ element = Object.const_get(Generable.class_name_for @type).new(@name)
84
+ if element.destroy
85
+ puts "The #{@type} #{element.name} has been succesfully destroyed"
86
+ end
87
+ else
88
+ raise Exception, "#{@type} is not a destroyable piece of code. Options are: #{Generable.generable_types.join(', ')}"
89
+ end
90
+ end
91
+ end
92
+
93
+ desc 'Add custom fields to post_types'
94
+ arg_name 'element_name field:type'
95
+ command [:add] do |c|
96
+ c.action do |global_options,options,args|
97
+ @name = args.shift
98
+
99
+ if @name.nil?
100
+ raise Exception, "Please, write the name of the post_type"
101
+ end
102
+
103
+ unless Aina.is_installed?
104
+ Aina.install
105
+ puts "We have installed Aina's framework for you. Next time, you can run `aina install` yourself ;-)"
106
+ end
107
+
108
+ add = Addable.new(@name, args)
109
+ add.add_custom_fields
110
+
111
+ puts "#{add.fields.map{|f| f[:key]}} fields have been added to #{@name}"
112
+ end
113
+ end
114
+
115
+ desc 'Installs Aina framework, that allows you to easily create custom fields for post_types'
116
+ arg_name 'field:type'
117
+ command [:install] do |c|
118
+ c.action do |global_options, options, args|
119
+ Aina.install(true)
120
+ end
121
+ end
122
+
123
+ pre do |global,command,options,args|
124
+ unless is_wordpress_theme? or tests_being_runned?
125
+ puts "This does not look like a WordPress theme"
126
+ return false
127
+ end
128
+ true
129
+ end
130
+
131
+ post do |global,command,options,args|
132
+ # Post logic here
133
+ # Use skips_post before a command to skip this
134
+ # block on that command only
135
+ end
136
+
137
+ on_error do |exception|
138
+ # Error logic here
139
+ # return false to skip default error handling
140
+ true
141
+ end
142
+
143
+ exit run(ARGV)
@@ -0,0 +1,53 @@
1
+ # Lib
2
+ Dir.glob(File.dirname(__FILE__) + "/aina/*.rb") { |file| require file }
3
+ Dir.glob(File.dirname(__FILE__) + "/aina/generable/*.rb") { |file| require file }
4
+ Dir.glob(File.dirname(__FILE__) + "/aina/generable/types/*.rb") { |file| require file }
5
+
6
+ # Templates
7
+ Dir.glob(File.expand_path('..') + "/templates/*") { |file| require file }
8
+
9
+ module Aina
10
+ def self.aina_version
11
+ Aina::VERSION
12
+ end
13
+
14
+ def self.install(output = false)
15
+ unless Dir.exists?(Dir.pwd + '/inc')
16
+ Dir.mkdir(Dir.pwd + '/inc')
17
+ end
18
+
19
+ # Install Aina
20
+ unless self.is_installed?
21
+ text = File.read(Aina::TEMPLATES_DIR + '/aina_framework.php')
22
+
23
+ ['{{aina_version}}'].each do |replace|
24
+ attribute = replace.gsub(/[{}]/, '')
25
+ @output = text.gsub!(/#{replace}/, self.send(attribute))
26
+ end
27
+
28
+ File.open(Dir.pwd + "/inc/aina.php", "w") {|file| file.puts @output}
29
+
30
+ message = "Aina has been installed in your WordPress theme.\n"
31
+ message += "\n\nIf you want your post type to be automatically included, put this is functions.php:\n"
32
+ message += "function aina_post_types() {\n"
33
+ message += " return array('your_post_type', 'another_post_type', 'etc');\n"
34
+ message += "}\n"
35
+ else
36
+ message = "Aina was already installed in your WordPress theme ;-)\n"
37
+ end
38
+
39
+ # Include Aina
40
+ unless functions_php_exists?
41
+ create_empty_functions_php
42
+ end
43
+ File.open(functions_php, "a+") {|file| file.puts aina_inclusion}
44
+
45
+ if output
46
+ puts message
47
+ end
48
+ end
49
+
50
+ def self.is_installed?
51
+ File.exists?(Dir.pwd + "/inc/aina.php")
52
+ end
53
+ end
@@ -0,0 +1,106 @@
1
+ class Addable
2
+ attr_accessor :name, :aina_version, :fields
3
+
4
+ def initialize(name, fields = nil)
5
+ @type = 'post_type'
6
+ @name = validate_name(name)
7
+ @aina_version = Aina::VERSION
8
+
9
+ parse_fields(fields)
10
+ end
11
+
12
+ def parse_fields(fields)
13
+ @fields = Array.new
14
+ fields.each do |f|
15
+ a = f.split(':')
16
+ # TODO: Validate type against a whitelist
17
+ @fields << {key: a[0], type: a[1]}
18
+ end
19
+ end
20
+
21
+ def fields_php_array
22
+ a = ''
23
+ @fields.each do |f|
24
+ a += "'#{f[:key]}' => array(\n"
25
+ a += " 'label' => '#{f[:key].capitalize}',\n"
26
+ a += " 'type' => '#{f[:type]}',\n"
27
+ a += " 'options' => array('option_1', 'option_2', 'etc'),\n" if %w(radio checkbox select).include?(f[:type])
28
+ a += "),\n"
29
+ end
30
+ a
31
+ end
32
+
33
+ def custom_fields
34
+ c = Array.new
35
+ c << "/**"
36
+ c << " * Custom data fields"
37
+ c << " * Add these custom fields to the #{@name} post type"
38
+ c << " * IMPORTANT: Thou shalt not rename this function, or bad things may happen"
39
+ c << " */"
40
+ c << "if ( ! function_exists( '#{@name}_custom_fields' ) ) {"
41
+ c << " function #{@name}_custom_fields() {"
42
+ c << " return array("
43
+ c << " #{fields_php_array}"
44
+ c << " );"
45
+ c << " }"
46
+ c << "}"
47
+ c.join("\n")
48
+ end
49
+
50
+ def add_custom_fields
51
+ @file = Dir.pwd + "/post-types/#{@name}.php"
52
+
53
+ # The post type wasn't using custom fields yet,
54
+ # so wrap them with the custom_fields function
55
+ unless File.read(@file).include? "function #{@name}_custom_fields"
56
+ File.open(@file, 'a+') {|file| file.puts custom_fields}
57
+ else
58
+ output = Array.new
59
+ counter = 0 # This will help us keep track of lines
60
+
61
+ File.open(@file).each do |line|
62
+ output << line
63
+
64
+ # When we reach a line that includes "function #{@name}_custom_fields"
65
+ # it means that we have to add the items two lines later
66
+ if line.include?("function #{@name}_custom_fields")
67
+ # Negative number, so we know that this + 1 will we the line
68
+ # after which we want to add text
69
+ counter = -2
70
+ end
71
+
72
+ # Ok! It's ok to add the new items here, after 'return array('
73
+ if counter === -1 and line.include?('return array(')
74
+ output << fields_php_array
75
+ end
76
+
77
+ counter = counter + 1
78
+ end
79
+
80
+ File.open(@file, 'w') {|file| file.puts output}
81
+ end
82
+
83
+ # Make sure they can be saved
84
+ text = File.read(@file)
85
+ unless text.include? "function #{@name}_meta_box"
86
+ template = File.read("#{Aina::TEMPLATES_DIR}/add.php")
87
+ ['{{name}}'].each do |replace|
88
+ attribute = replace.gsub(/[{}]/, '')
89
+ @output = template.gsub!(/#{replace}/, self.send(attribute))
90
+ end
91
+ File.open(@file, "a+") {|file| file.puts @output}
92
+ end
93
+ end
94
+
95
+ def self.accepts?(type)
96
+ Generable.accepts?(type)
97
+ end
98
+
99
+ protected
100
+ def validate_name(name)
101
+ unless File.exists?(Dir.pwd + "/post-types/#{name}.php")
102
+ raise Exception, "There's no file named /post-types/#{name}.php"
103
+ end
104
+ name
105
+ end
106
+ end
@@ -0,0 +1,62 @@
1
+ module Generable
2
+ # List of generable types
3
+ def self.generable_types
4
+ g = Array.new
5
+ Dir.glob(File.dirname(__FILE__) + "/generable/types/*.rb").each do |f|
6
+ g << f.split('/').last.split('.rb').join()
7
+ end
8
+ g
9
+ end
10
+
11
+ def self.class_name_for(type)
12
+ "Generable::#{type.camelcase}"
13
+ end
14
+
15
+ # Is generable?
16
+ def self.accepts?(type)
17
+ generable_types.include?(type)
18
+ end
19
+
20
+ # Does type need to be created in a directory?
21
+ # Then, in type use:
22
+ # dir 'my-directory'
23
+ def dir(directory)
24
+ @dir = directory
25
+ end
26
+
27
+ def get_dir
28
+ @dir
29
+ end
30
+
31
+ # Does type use a template?
32
+ # Then, in type use:
33
+ # template 'my-template.php'
34
+ def template(template)
35
+ @template = "#{Aina::TEMPLATES_DIR}/#{template}" if template
36
+ end
37
+
38
+ def get_template
39
+ @template
40
+ end
41
+
42
+ # Does type template need custom replacements?
43
+ # Then, in type use:
44
+ # replacements %w({{replace_this}} {{and_this_too}})
45
+ def replacements(*replacements)
46
+ @replacements = %w(name aina_version)
47
+ @replacements += replacements.flatten if replacements
48
+ @replacements = @replacements.map { |r| "{{#{r}}}" }
49
+ end
50
+
51
+ def get_replacements
52
+ @replacements
53
+ end
54
+
55
+ def after_generate(*callbacks)
56
+ @after_generate = callbacks
57
+ end
58
+
59
+ def get_after_generate
60
+ @after_generate
61
+ end
62
+ end
@@ -0,0 +1,72 @@
1
+ # Generable class
2
+ class Generable::Base
3
+ extend Generable
4
+ attr_reader :name, :template, :file, :aina_version, :supports
5
+
6
+ def initialize(name, options=nil)
7
+ @name = name
8
+ @options = options
9
+ @aina_version = Aina::VERSION
10
+ @template = self.template
11
+ @dir = self.dir
12
+ @file = generate_file_name
13
+
14
+ set_custom_vars
15
+ end
16
+
17
+ def set_custom_vars
18
+ # Nothing here
19
+ # This can be used in types to parse required instance variables
20
+ end
21
+
22
+ def dir
23
+ self.class.get_dir
24
+ end
25
+
26
+ def template
27
+ self.class.get_template
28
+ end
29
+
30
+ def replacements
31
+ self.class.get_replacements
32
+ end
33
+
34
+ def generate
35
+ text = File.read(@template)
36
+ replacements.each do |replace|
37
+ attribute = replace.gsub(/[{}]/, '')
38
+ @output = text.gsub!(/#{replace}/, self.send(attribute))
39
+ end
40
+ File.open(@file, "w") {|file| file.puts @output}
41
+
42
+ after_generate
43
+ end
44
+
45
+ def after_generate
46
+ if self.class.get_after_generate
47
+ self.class.get_after_generate.each do |callback|
48
+ self.send(callback)
49
+ end
50
+ end
51
+ end
52
+
53
+ def destroy
54
+ if File.exists?(@file)
55
+ File.delete(@file)
56
+ else
57
+ raise "No #{self.class} with name #{@name}"
58
+ end
59
+ end
60
+
61
+ private
62
+ def generate_file_name
63
+ unless @dir.nil?
64
+ unless Dir.exists?(Dir.pwd + '/' + @dir)
65
+ Dir.mkdir(Dir.pwd + '/' + @dir)
66
+ end
67
+ Dir.pwd + "/#{@dir}/#{@name}.php"
68
+ else
69
+ Dir.pwd + "/#{@name}.php"
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,49 @@
1
+ class PostType < Generable::Base
2
+ attr_reader :name_capitalize, :capability, :supports
3
+
4
+ DEFAULT_SUPPORT = 'title,editor,excerpt,thumbnail'
5
+ DEFAULT_CAPABILITY = 'post'
6
+
7
+ template 'post_type.php'
8
+ dir 'post-types'
9
+ replacements %w(name_capitalize capability supports)
10
+
11
+ after_generate :install_aina_framework?, :include_post_type
12
+
13
+ def set_custom_vars
14
+ @name_capitalize = self.name.capitalize
15
+ if @options
16
+ @supports = get_supports
17
+ @capability = get_capability
18
+ end
19
+ end
20
+
21
+ def get_supports
22
+ s = @options[:s] ? @options[:s] : DEFAULT_SUPPORT
23
+ s = s.split(',')
24
+
25
+ supports = Array.new
26
+ s.each do |item|
27
+ supports << "'#{item}'"
28
+ end
29
+ supports.join(',')
30
+ end
31
+
32
+ def get_capability
33
+ @options[:c] ? @options[:c] : DEFAULT_CAPABILITY
34
+ end
35
+
36
+ protected
37
+ def install_aina_framework?
38
+ if @options and @options[:i]
39
+ Aina.install
40
+ end
41
+ end
42
+
43
+ def include_post_type
44
+ unless functions_php_exists?
45
+ create_empty_functions_php
46
+ end
47
+ File.open(functions_php, "a+") {|file| file.puts "\n/* Include #{self.name} */\nrequire_once '#{dir}/#{self.name}.php';\n"}
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module Aina
2
+ TEMPLATES_DIR = File.expand_path('../../..',__FILE__) + '/templates'
3
+ end
@@ -0,0 +1,46 @@
1
+ def is_wordpress_theme?
2
+ theme_path = Dir.pwd.split('/')
3
+ theme_path.pop
4
+ theme_path.last(2).join('/') == 'wp-content/themes'
5
+ end
6
+
7
+ def tests_being_runned?
8
+ ENV['HOME'] == 'tmp/aruba'
9
+ end
10
+
11
+ def functions_php
12
+ Dir.pwd + "/functions.php"
13
+ end
14
+
15
+ def functions_php_exists?
16
+ File.exists?(Dir.pwd + "/functions.php")
17
+ end
18
+
19
+ def create_empty_functions_php
20
+ unless functions_php_exists?
21
+ File.open(functions_php, "w") {|file| file.puts "<?php\n"}
22
+ end
23
+ end
24
+
25
+ def aina_inclusion
26
+ output = "\n/**\n"
27
+ output += " * Include Aina's framework\n"
28
+ output += " */\n"
29
+ output += "if ( file_exists( dirname(__FILE__) . '/inc/aina.php' ) ) {\n"
30
+ output += " require_once 'inc/aina.php';\n"
31
+ output += "}\n"
32
+ end
33
+
34
+ class String
35
+ def camelcase
36
+ r = Array.new
37
+
38
+ pieces = self.split(' ')
39
+ pieces = self.split('_') unless pieces.length > 1
40
+
41
+ pieces.each do |p|
42
+ r << p.capitalize
43
+ end
44
+ r.join()
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ module Aina
2
+ VERSION = '0.2.0.beta'
3
+ end
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Add meta box
3
+ * add_meta_box( $id, $title, $callback, $post_type, $context, $priority );
4
+ */
5
+ if ( ! function_exists('{{name}}_meta_box') ) {
6
+ function {{name}}_meta_box(){
7
+ add_meta_box("{{name}}_meta", "Extra", "add_{{name}}_custom_fields", "{{name}}", "normal", "low");
8
+ }
9
+ add_action("admin_init", "{{name}}_meta_box");
10
+ }
11
+
12
+ /**
13
+ * Add Custom Fields
14
+ */
15
+ if ( ! function_exists('add_{{name}}_custom_fields') ) {
16
+ function add_{{name}}_custom_fields() {
17
+ aina_add_custom_fields('{{name}}');
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Make sure we can save it
23
+ */
24
+ if ( ! function_exists('save_{{name}}_custom') ) {
25
+ function save_{{name}}_custom() {
26
+ aina_save_custom('{{name}}');
27
+ }
28
+ add_action('save_post', 'save_{{name}}_custom');
29
+ }
@@ -0,0 +1,138 @@
1
+ <?php
2
+
3
+ /**
4
+ * Aina
5
+ * Generated with Aina. Version {{aina_version}}
6
+ */
7
+
8
+ /**
9
+ * Include Custom Post-Types
10
+ */
11
+ if ( function_exists( 'aina_post_types' ) ) {
12
+ foreach ( aina_post_types() as $pt ) {
13
+ require dirname(dirname(__FILE__)) . '/post-types/' . $pt . '.php';
14
+ }
15
+ }
16
+
17
+ /**
18
+ * Add Post-Type Custom Fields
19
+ */
20
+ function aina_add_custom_fields($post_type) {
21
+ global $post;
22
+ $custom = get_post_custom($post->ID);
23
+
24
+ $add_custom_function = $post_type . '_custom_fields';
25
+
26
+ $custom_fields = $add_custom_function();
27
+
28
+ foreach ( $custom_fields as $field => $args ) {
29
+ $value = isset($custom[$field][0]) ? $custom[$field][0] : null;
30
+ echo aina_custom_field_for($field, $value, $args);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Make sure we can save it
36
+ */
37
+ function aina_save_custom($post_type) {
38
+ global $post;
39
+
40
+ // Is this a new post being created?
41
+ if ( ! isset($post->ID) ) return;
42
+
43
+ $add_custom_function = $post_type . '_custom_fields';
44
+
45
+ $save_fields = $add_custom_function();
46
+
47
+ foreach ( $save_fields as $field => $args ) {
48
+ $value = null;
49
+ if ( isset($_POST[$field]) ) {
50
+ if ( is_array($_POST[$field]) ) {
51
+ $value = $_POST[$field][0];
52
+ } else {
53
+ $value = $_POST[$field];
54
+ }
55
+ }
56
+ update_post_meta($post->ID, $field, $value);
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Get single custom fields
62
+ */
63
+ function aina_get_field($post_type, $field = '') {
64
+ global $post;
65
+ $custom_fields = get_post_custom($post->ID);
66
+ return isset($custom_fields[$field][0]) ? $custom_fields[$field][0] : false;
67
+ }
68
+
69
+ /**
70
+ * Echo single custom fields
71
+ * This is a wrapper for aina_get_field()
72
+ */
73
+ function aina_field($post_type, $field = '') {
74
+ echo aina_get_field($post_type, $field);
75
+ }
76
+
77
+ /**
78
+ * Custom Field For
79
+ */
80
+ function aina_custom_field_for($field, $value, $args = array()) {
81
+
82
+ $return = '';
83
+
84
+ if ( isset($args) && is_array($args) ) {
85
+
86
+ // Is label set?
87
+ if ( isset($args['label']) ) {
88
+ $return .= '<label>' . ucfirst($args['label']) . '</label><br />';
89
+ } else {
90
+ $return .= '<label>' . ucfirst($field) . '</label><br />';
91
+ }
92
+
93
+ // Options
94
+ $placeholder = isset($args['placeholder']) ? $args['placeholder'] : '';
95
+
96
+ // Is type set?
97
+ if ( isset($args['type']) ) {
98
+ switch ($args['type']) {
99
+ // Simple inputs
100
+ case 'text':
101
+ $return .= '<input type="text" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
102
+ break;
103
+ case 'url':
104
+ $return .= '<input type="url" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
105
+ break;
106
+ case 'email':
107
+ $return .= '<input type="email" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
108
+ break;
109
+ case 'datetime-local':
110
+ case 'datetime':
111
+ $return .= '<input type="datetime-local" name="' . $field . '" value="' . $value . '" />';
112
+ break;
113
+ case 'textarea':
114
+ $return .= '<textarea name="' . $field . '">' . $value . '</textarea>';
115
+ break;
116
+
117
+ // With options
118
+ case 'radio':
119
+ if ( isset($args['options']) && is_array($args['options']) ) {
120
+ foreach ($args['options'] as $option) {
121
+ $checked = $option == $value ? true : false;
122
+ $is_checked = $checked == true ? 'checked' : '';
123
+ $return .= '<input type="radio" name=" ' . $field . '[]" value="' . $option . '" ' . $is_checked . '/>' . $option;
124
+ }
125
+ }
126
+ break;
127
+ default:
128
+ # code...
129
+ break;
130
+ }
131
+ }
132
+ } else {
133
+ $return .= '<label>' . ucfirst($field) . '</label><br />';
134
+ $return .= '<input type="text" name=" ' . $field . '" value="' . $value . '" />';
135
+ }
136
+
137
+ return '<p>' . $return . '</p>';
138
+ }
@@ -0,0 +1,101 @@
1
+ <?php
2
+
3
+ /**
4
+ * Custom Post Type: {{name_capitalize}}
5
+ * Generated with Aina. Version {{aina_version}}
6
+ */
7
+
8
+ /* {{name_capitalize}} Properties */
9
+ function {{name}}_register() {
10
+ $labels = array(
11
+ 'name' => _x("{{name_capitalize}}", '{{name}}'),
12
+ 'singular_name' => _x("{{name_capitalize}} Item", '{{name}}'),
13
+ 'add_new' => _x('New {{name_capitalize}} Item', '{{name}}'),
14
+ 'add_new_item' => __('Add New {{name_capitalize}} Item'),
15
+ 'edit_item' => __('Edit {{name_capitalize}} Item'),
16
+ 'new_item' => __('New {{name_capitalize}} Item'),
17
+ 'view_item' => __('View {{name_capitalize}} Item'),
18
+ 'search_items' => __('Search {{name_capitalize}} Items'),
19
+ 'not_found' => __('Nothing found'),
20
+ 'not_found_in_trash' => __('Nothing found in Trash'),
21
+ 'parent_item_colon' => '',
22
+ );
23
+ $args = array(
24
+ 'labels' => $labels,
25
+ 'public' => true,
26
+ 'publicly_queryable' => true,
27
+ 'show_ui' => true,
28
+ 'query_var' => true,
29
+ 'menu_icon' => false, // get_stylesheet_directory_uri() . '/your_pt_icon_here.png'
30
+ 'rewrite' => true,
31
+ 'capability_type' => '{{capability}}',
32
+ 'hierarchical' => true,
33
+ 'has_archive' => true,
34
+ 'menu_position' => null,
35
+ 'supports' => array({{supports}}),
36
+ );
37
+ register_post_type( '{{name}}' , $args );
38
+ }
39
+
40
+ add_action('init', '{{name}}_register');
41
+
42
+
43
+ /* {{name_capitalize}} Taxonomy */
44
+ add_action( 'init', 'register_taxonomy_{{name}}categories' );
45
+
46
+ function register_taxonomy_{{name}}categories() {
47
+ // Taxonomy slug
48
+ ${{name}}_taxonomy = '{{name}}categories';
49
+
50
+ $labels = array(
51
+ 'name' => _x( '{{name_capitalize}} Categories', ${{name}}_taxonomy ),
52
+ 'singular_name' => _x( '{{name_capitalize}} Category', ${{name}}_taxonomy ),
53
+ 'search_items' => _x( 'Search {{name_capitalize}} Category', ${{name}}_taxonomy ),
54
+ 'popular_items' => _x( 'Popular {{name_capitalize}} Category', ${{name}}_taxonomy ),
55
+ 'all_items' => _x( 'All {{name_capitalize}} Category', ${{name}}_taxonomy ),
56
+ 'parent_item' => _x( 'Parent {{name_capitalize}} Category', ${{name}}_taxonomy ),
57
+ 'parent_item_colon' => _x( 'Parent {{name_capitalize}} Category:', ${{name}}_taxonomy ),
58
+ 'edit_item' => _x( 'Edit {{name_capitalize}} Category', ${{name}}_taxonomy ),
59
+ 'update_item' => _x( 'Update {{name_capitalize}} Category', ${{name}}_taxonomy ),
60
+ 'add_new_item' => _x( 'Add New {{name_capitalize}} Category', ${{name}}_taxonomy ),
61
+ 'new_item_name' => _x( 'New {{name_capitalize}} Category', ${{name}}_taxonomy ),
62
+ 'separate_items_with_commas' => _x( 'Separate {{name_capitalize}} Categories with commas', ${{name}}_taxonomy ),
63
+ 'add_or_remove_items' => _x( 'Add or remove {{name_capitalize}} Categories', ${{name}}_taxonomy ),
64
+ 'choose_from_most_used' => _x( 'Choose from the most used {{name_capitalize}} Categories', ${{name}}_taxonomy ),
65
+ 'menu_name' => _x( '{{name_capitalize}} Category', ${{name}}_taxonomy ),
66
+ );
67
+
68
+ $args = array(
69
+ 'labels' => $labels,
70
+ 'public' => true,
71
+ 'show_in_nav_menus' => true,
72
+ 'show_ui' => true,
73
+ 'show_tagcloud' => true,
74
+ 'show_admin_column' => true,
75
+ 'hierarchical' => true,
76
+ //'update_count_callback' => '',
77
+ 'rewrite' => array( 'hierarchical' => true ), // Use taxonomy as categories
78
+ 'query_var' => true
79
+ );
80
+
81
+ register_taxonomy( ${{name}}_taxonomy, array('{{name}}'), $args );
82
+ }
83
+
84
+ /**
85
+ * Displays the {{name_capitalize}} post type icon in the dashboard
86
+ */
87
+ //add_action( 'admin_head', '{{name}}_icon' );
88
+ function {{name}}_icon() {
89
+ echo '<style type="text/css" media="screen">
90
+ #menu-posts-projecte .wp-menu-image {
91
+ background: url(<?php echo get_stylesheet_directory_uri(); ?>/img/{{name}}-icon.png) no-repeat 6px 6px !important;
92
+ }
93
+ #menu-posts-projecte:hover .wp-menu-image, #menu-posts-projecte.wp-has-current-submenu .wp-menu-image {
94
+ background-position:6px -16px !important;
95
+ }
96
+ #icon-edit.icon32-posts-projecte {
97
+ background: url(<?php echo get_stylesheet_directory_uri(); ?>/img/{{name}}-32x32.png) no-repeat;
98
+ }
99
+ </style>';
100
+ }
101
+
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aina
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0.beta
5
+ platform: ruby
6
+ authors:
7
+ - Carles Jove i Buxeda
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: aruba
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gli
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.8.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.8.1
69
+ description:
70
+ email: info@joanielena.cat
71
+ executables:
72
+ - aina
73
+ extensions: []
74
+ extra_rdoc_files:
75
+ - README.rdoc
76
+ - aina.rdoc
77
+ files:
78
+ - bin/aina
79
+ - lib/aina/addable.rb
80
+ - lib/aina/generable.rb
81
+ - lib/aina/globals.rb
82
+ - lib/aina/support.rb
83
+ - lib/aina/version.rb
84
+ - lib/aina/generable/base.rb
85
+ - lib/aina/generable/types/post_type.rb
86
+ - templates/add.php
87
+ - templates/aina_framework.php
88
+ - templates/post_type.php
89
+ - lib/aina.rb
90
+ - README.rdoc
91
+ - aina.rdoc
92
+ homepage: http://joanielena.cat
93
+ licenses: []
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options:
97
+ - --title
98
+ - aina
99
+ - --main
100
+ - README.rdoc
101
+ - -ri
102
+ require_paths:
103
+ - lib
104
+ - lib
105
+ - templates
106
+ required_ruby_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - '>'
114
+ - !ruby/object:Gem::Version
115
+ version: 1.3.1
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 2.0.3
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Code generation for WordPress
122
+ test_files: []