Commit 013f15768322aca4db7524537cd9a1d107ee25c6
1 parent
5a5a01d4
Exists in
staging
and in
42 other branches
Reorganizing documentation
Showing
7 changed files
with
536 additions
and
523 deletions
Show diff stats
... | ... | @@ -0,0 +1,51 @@ |
1 | += Noosfero instructions for developers | |
2 | + | |
3 | +This document provides useful information to those who want to help with | |
4 | +Noosfero development. | |
5 | + | |
6 | +== Requirements for development | |
7 | + | |
8 | +* Mocha: http://mocha.rubyforge.org/ | |
9 | +* Tidy: http://tidy.sourceforge.net/ | |
10 | +* Hpricot: http://github.com/whymirror/hpricot | |
11 | +* Imagemagick: http://wwwimagemagick.org/ | |
12 | + | |
13 | +You must install these packages to be able to run Noosfero tests. On Debian | |
14 | +GNU/Linux you install them with the following command: | |
15 | + | |
16 | + apt-get install libtidy-ruby libhpricot-ruby libmocha-ruby imagemagick | |
17 | + | |
18 | +== Boostraping a development/test environment | |
19 | + | |
20 | +You can copy and paste the commands below into a terminal (please review the | |
21 | +commands and make sure you understand what you are doing): | |
22 | + | |
23 | + # checkout the code from repository | |
24 | + git clone git://git.colivre.coop.br/noosfero.git | |
25 | + # enter the directory | |
26 | + cd noosfero | |
27 | + # copy a sample config file | |
28 | + cp config/database.yml.sqlite3 config/database.yml | |
29 | + # create the database: | |
30 | + rake db:migrate | |
31 | + # compile translations: | |
32 | + rake makemo | |
33 | + # create some test data: | |
34 | + ./script/sample-data | |
35 | + # run the automated test suite to make sure your environment is sane: | |
36 | + rake test | |
37 | + | |
38 | +You should now be ready to go. Issue the following command to start the Rails | |
39 | +development server: | |
40 | + | |
41 | + ./script/server | |
42 | + | |
43 | +The server will be available at http://localhost:3000/ . If you want to use | |
44 | +another port than 3000, you can use the -p option of ./script/server: | |
45 | + | |
46 | + ./script/server -p 9999 | |
47 | + | |
48 | +The above command makes the server available at http://localhost:9999/ | |
49 | + | |
50 | +The sample-data data scripts creates one administrator user with login "ze" and | |
51 | +password "test". | ... | ... |
... | ... | @@ -0,0 +1,90 @@ |
1 | += Noosfero installation instructions | |
2 | + | |
3 | +Noosfero is written in Ruby with the "Rails framework":http://www.rubyonrails.org, | |
4 | +so the process of setting it up is pretty similar to other Rails applications. | |
5 | + | |
6 | +Below we have the instructions for installing Noosfero dependencies and setting | |
7 | +up a production environment. If you have problems with the setup, please feel | |
8 | +free to ask questions in the development mailing list. | |
9 | + | |
10 | +== Requirements | |
11 | + | |
12 | +* Ruby: http://www.ruby-lang.org/ | |
13 | +* Rake: http://rake.rubyforge.org/ | |
14 | +* Ruby-GetText: http://www.yotabanana.com/hiki/ruby-gettext.html?ruby-gettext (at least version 1.9.0) | |
15 | +* Ruby-sqlite3: http://rubyforge.org/projects/sqlite-ruby | |
16 | +* rcov: http://eigenclass.org/hiki/rcov | |
17 | +* Ferret: http://ferret.davebalmain.com/trac | |
18 | +* RMagick: http://rmagick.rubyforge.org/ | |
19 | +* RedCloth: http://whytheluckystiff.net/ruby/redcloth/ | |
20 | +* will_paginate: http://github.com/mislav/will_paginate/wikis | |
21 | +* iso-codes: http://pkg-isocodes.alioth.debian.org/ | |
22 | +* feedparser: http://packages.debian.org/sid/libfeedparser-ruby | |
23 | +* Daemons - http://daemons.rubyforge.org/ | |
24 | +* Mongrel: http://mongrel.rubyforge.org/ | |
25 | +* tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library | |
26 | + | |
27 | +On Debian GNU/Linux, all of these packages are available through the Debian | |
28 | +archive. You can install them with the following command: | |
29 | + | |
30 | + # aptitude install ruby rake libgettext-ruby1.8 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libwill-paginate-ruby iso-codes libfeedparser-ruby libferret-ruby libdaemons-ruby mongrel mongrel-cluster tango-icon-theme | |
31 | + | |
32 | +We do not have specific instructions for other plaforms yet. If you manage to | |
33 | +install Noosfero successfully, please feel free to contact the Noosfero | |
34 | +development mailing with the instructions for doing so, and we'll include it | |
35 | +here. | |
36 | + | |
37 | +=== Setting up a production environment | |
38 | + | |
39 | +* install memcached. Study whether you need to raise the ammount of memory it uses for caching, depending on the demand you expect for your site. | |
40 | +* copy config/ferret_server.yml.dist to config/ferret_server.yml.dist | |
41 | +* configure the mongrel cluster: `mongrel_rails cluster::configure` | |
42 | +** then edit config/mongrel_cluster.yml to suit your environment. Make sure your apache configuration matches the mongrel cluster configuration, specially in respect to the ports and numbers of mongrel instances. | |
43 | +* create needed temporary directories: | |
44 | + mkdir tmp | |
45 | + mkdir tmp/pids | |
46 | + mkdir log | |
47 | +* create database (example using PostgreSQL, YMMV) | |
48 | + | |
49 | + root user | |
50 | + ========= | |
51 | + # sudo apt-get install postgresql libpgsql-ruby | |
52 | + # su - postgres | |
53 | + | |
54 | + postgres user | |
55 | + ============= | |
56 | + postgres@HOST:~$ createuser noosfero | |
57 | + Shall the new role be a superuser? (y/n) n | |
58 | + Shall the new role be allowed to create databases? (y/n) y | |
59 | + Shall the new role be allowed to create more new roles? (y/n) n | |
60 | + | |
61 | + noosfero_user | |
62 | + ============= | |
63 | + createdb noosfero_production | |
64 | + createdb noosfero_development | |
65 | + createdb noosfero_test | |
66 | + | |
67 | +* configure database access in config/database.yml | |
68 | + | |
69 | +* test database access: | |
70 | +** first create the development database | |
71 | + rake db:schema:load | |
72 | +** if everything goes right, then create the production database: | |
73 | + RAILS_ENV=production rake db:schema:load | |
74 | + | |
75 | +* create sample data: | |
76 | + RAILS_ENV=production rake db:populate | |
77 | + | |
78 | +* compile the translations: | |
79 | + rake makemo | |
80 | + | |
81 | +* start the server: | |
82 | + ./script/production start | |
83 | + | |
84 | +* to stop the server: | |
85 | + | |
86 | + ./script/production stop | |
87 | + | |
88 | +* to restart the server: | |
89 | + | |
90 | + ./script/production restart | ... | ... |
... | ... | @@ -0,0 +1,39 @@ |
1 | += Noosfero release tasks | |
2 | + | |
3 | +This file documents release-related activities. | |
4 | + | |
5 | +== Working with translations | |
6 | + | |
7 | +* Update translation files: <tt>rake updatepo</tt>. Then <tt>git commit</tt> them. | |
8 | +* Send the PO files to the translators. | |
9 | +* Get the PO files back from translators, put in po/ under the correct language | |
10 | + name (e.,g. po/pt_BR/) and <tt>git commit</tt>. | |
11 | +* test translations: <tt>rake makemo</tt> and browse the application on the web. | |
12 | + | |
13 | +== Releasing noosfero | |
14 | + | |
15 | +To prepare a release of noosfero, you must follow the steps below: | |
16 | + | |
17 | +* finish all requirements and bugs assigned to the to-be-released version | |
18 | +* make sure all tests pass | |
19 | +* write release notes at the version's wiki topic. | |
20 | +* generate package with <tt>rake package</tt>. Your tarball will be under the pkg/ | |
21 | + directory, named as noosfero-${VERSION}.tar.gz | |
22 | +* test that the package contains everything that is needed: explode the tarball | |
23 | + in a temporary directory, copy config/database.yml.sqlite3 to | |
24 | + config/database.yml, and make <tt>rake db:migrate</tt> and <tt>rake test</tt>. If | |
25 | + everything is ok, you are done. If not, maybe some files are not going into | |
26 | + the tarball. See lib/tasks/package.rake, probably you'll need to change it. | |
27 | +* Go to the version's wiki topic and edit it to reflect the new reality. | |
28 | +* Attach the generated package to that topic. Before attaching calculate the md5 of the package (with mu5sum and paste the MD5 hash as comment in the attachment form) | |
29 | +* Download the attached and verify the MD5 hash | |
30 | +* create a git tag for the released version with <tt>git tag</tt>. | |
31 | +* IMMEDIATELY change the version in lib/noosfero.rb to the next version. (e.g. | |
32 | + 0.2.0 -> 0.3.0) | |
33 | +* update an eventual demonstration version that you run. | |
34 | +* write an announcement e-mail to the relevant maimling lists pointing to the release notes, and maybe to the demonstration version. | |
35 | + | |
36 | +If you had any problem during these steps, you can do <tt>rake clobber_package</tt> to | |
37 | +completely delete the generated packages and start the process again. | |
38 | + | |
39 | + | ... | ... |
doc/README_FOR_APP
1 | 1 | = Noosfero: a free web-based social platform |
2 | 2 | |
3 | -== Setting up a Noosfero development/test environment | |
3 | +* Installation instructions: see INSTALL | |
4 | +* Developer instructions: see HACKING | |
5 | +* Licensing information: see COPYRIGHT and COPYING | |
4 | 6 | |
5 | -Noosfero is written in Ruby with the "Rails framework":http://www.rubyonrails.org, | |
6 | -so the process of setting it up is pretty similar to other Rails applications. | |
7 | - | |
8 | -=== Requirements | |
9 | - | |
10 | -noosfero is intended to be run in Debian stable. It can work in other environments, but we do not test on them. | |
11 | - | |
12 | -You need to have git installed, as well as: | |
13 | - | |
14 | -* Ruby: http://www.ruby-lang.org/ | |
15 | -* Rake: http://rake.rubyforge.org/ | |
16 | -* Ruby-GetText: http://www.yotabanana.com/hiki/ruby-gettext.html?ruby-gettext (at least version 1.9.0) | |
17 | -* Ruby-sqlite3: http://rubyforge.org/projects/sqlite-ruby | |
18 | -* rcov: http://eigenclass.org/hiki/rcov | |
19 | -* Ferret: http://ferret.davebalmain.com/trac | |
20 | -* RMagick: http://rmagick.rubyforge.org/ | |
21 | -* RedCloth: http://whytheluckystiff.net/ruby/redcloth/ | |
22 | -* will_paginate: http://github.com/mislav/will_paginate/wikis | |
23 | -* contacts: http://github.com/cardmagic/contacts/tree/master | |
24 | -* iso-codes: http://pkg-isocodes.alioth.debian.org/ | |
25 | -* feedparser: http://packages.debian.org/sid/libfeedparser-ruby | |
26 | -* Daemons - http://daemons.rubyforge.org/ | |
27 | -* Mongrel: http://mongrel.rubyforge.org/ | |
28 | -* tango-icon-theme: http://tango.freedesktop.org/Tango_Icon_Library | |
29 | - | |
30 | -There are Debian packages available for all of them but contacts. Try: | |
31 | - | |
32 | - # aptitude install ruby rake libgettext-ruby1.8 libsqlite3-ruby rcov librmagick-ruby libredcloth-ruby libwill-paginate-ruby iso-codes libfeedparser-ruby libferret-ruby libdaemons-ruby mongrel mongrel-cluster tango-icon-theme | |
33 | - | |
34 | -contacts is bundled together with noosfero for now, so you don't need to install it. | |
35 | - | |
36 | -If you have problems with the setup, use the development mailing list. In | |
37 | -special its possible that the requirements list above is not complete. | |
38 | - | |
39 | -=== Setting up a production environment | |
40 | - | |
41 | -* install memcached. Study whether you need to raise the ammount of memory it uses for caching, depending on the demand you expect for your site. | |
42 | -* copy config/ferret_server.yml.dist to config/ferret_server.yml.dist | |
43 | -* configure the mongrel cluster: `mongrel_rails cluster::configure` | |
44 | -** then edit config/mongrel_cluster.yml to suit your environment. Make sure your apache configuration matches the mongrel cluster configuration, specially in respect to the ports and numbers of mongrel instances. | |
45 | -* create needed temporary directories: | |
46 | - mkdir tmp | |
47 | - mkdir tmp/pids | |
48 | - mkdir log | |
49 | -* create database (example using PostgreSQL, YMMV) | |
50 | - | |
51 | - root user | |
52 | - ========= | |
53 | - # sudo apt-get install postgresql libpgsql-ruby | |
54 | - # su - postgres | |
55 | - | |
56 | - postgres user | |
57 | - ============= | |
58 | - postgres@HOST:~$ createuser noosfero | |
59 | - Shall the new role be a superuser? (y/n) n | |
60 | - Shall the new role be allowed to create databases? (y/n) y | |
61 | - Shall the new role be allowed to create more new roles? (y/n) n | |
62 | - | |
63 | - noosfero_user | |
64 | - ============= | |
65 | - createdb noosfero_production | |
66 | - createdb noosfero_development | |
67 | - createdb noosfero_test | |
68 | - | |
69 | -* configure database access in config/database.yml | |
70 | - | |
71 | -* test database access: | |
72 | -** first create the development database | |
73 | - rake db:schema:load | |
74 | -** if everything goes right, then create the production database: | |
75 | - RAILS_ENV=production rake db:schema:load | |
76 | - | |
77 | -* create sample data: | |
78 | - RAILS_ENV=production rake db:populate | |
79 | - | |
80 | -* compile the translations: | |
81 | - rake makemo | |
82 | - | |
83 | -* start the server: | |
84 | - ./script/production start | |
85 | - | |
86 | -* to stop the server: | |
87 | - | |
88 | - ./script/production stop | |
89 | - | |
90 | -* to restart the server: | |
91 | - | |
92 | - ./script/production restart | |
93 | - | |
94 | -=== Boostraping a test environment | |
95 | - | |
96 | -You can copy and paste the commands below into a terminal (please review the | |
97 | -commands and make sure you understand what you are doing): | |
98 | - | |
99 | - # checkout the code from repository | |
100 | - git clone git://git.colivre.coop.br/noosfero.git | |
101 | - # enter the directory | |
102 | - cd noosfero | |
103 | - # copy a sample config file | |
104 | - cp config/database.yml.sqlite3 config/database.yml | |
105 | - # create the database: | |
106 | - rake db:migrate | |
107 | - # compile translations: | |
108 | - rake makemo | |
109 | - # create some test data: | |
110 | - ./script/populate | |
111 | - # install the test dependences: | |
112 | - aptitude install libtidy-ruby libhpricot-ruby libmocha-ruby imagemagick | |
113 | - # run the automated test suite to make sure your environment is sane: | |
114 | - rake test | |
115 | - | |
116 | -You should now be ready to go. Issue the following command to start the Rails | |
117 | -development server: | |
118 | - | |
119 | - ./script/server | |
120 | - | |
121 | -The server will be available at http://localhost:3000/ . If you want to use | |
122 | -another port than 3000, you can use the -p option of ./script/server: | |
123 | - | |
124 | - ./script/server -p 9999 | |
125 | - | |
126 | -The above command makes the server available at http://localhost:9999/ | |
127 | - | |
128 | -The populate script creates some test users, one of them has login 'ze' and | |
129 | -password 'test'. You can use it or you can register a new user. | |
130 | - | |
131 | -== Reporting bugs | |
132 | - | |
133 | -Use Noosfero Tracker application at http://www.colivre.coop.br/Noosfero. | |
134 | - | |
135 | -== Helping with development | |
136 | - | |
137 | -* It's recommended that you subscribe to the development mailing | |
138 | - list: http://ynternet.net/mailman/listinfo/noosfero | |
139 | -* If you have a patch, create an appropriate action item | |
140 | - (bugs/requirement/enhancement) in the Tracker web (see "Reporting bugs" | |
141 | - above) of type. | |
142 | - | |
143 | -== Releasing noosfero | |
144 | - | |
145 | -To prepare a release of noosfero, you must follow the steps below: | |
146 | - | |
147 | -* finish all requirements and bugs assigned to the to-be-released version | |
148 | -* make sure all tests pass | |
149 | -* write release notes at the version's wiki topic. | |
150 | -* generate package with <tt>rake package</tt>. Your tarball will be under the pkg/ | |
151 | - directory, named as noosfero-${VERSION}.tar.gz | |
152 | -* test that the package contains everything that is needed: explode the tarball | |
153 | - in a temporary directory, copy config/database.yml.sqlite3 to | |
154 | - config/database.yml, and make <tt>rake db:migrate</tt> and <tt>rake test</tt>. If | |
155 | - everything is ok, you are done. If not, maybe some files are not going into | |
156 | - the tarball. See lib/tasks/package.rake, probably you'll need to change it. | |
157 | -* Go to the version's wiki topic and edit it to reflect the new reality. | |
158 | -* Attach the generated package to that topic. Before attaching calculate the md5 of the package (with mu5sum and paste the MD5 hash as comment in the attachment form) | |
159 | -* Download the attached and verify the MD5 hash | |
160 | -* create a git tag for the released version with <tt>git tag</tt>. | |
161 | -* IMMEDIATELY change the version in lib/noosfero.rb to the next version. (e.g. | |
162 | - 0.2.0 -> 0.3.0) | |
163 | -* update an eventual demonstration version that you run. | |
164 | -* write an announcement e-mail to the relevant maimling lists pointing to the release notes, and maybe to the demonstration version. | |
165 | - | |
166 | -If you had any problem during these steps, you can do <tt>rake clobber_package</tt> to | |
167 | -completely delete the generated packages and start the process again. | |
168 | - | |
169 | -== Working with translations | |
170 | - | |
171 | -* Update translation files: <tt>rake updatepo</tt>. Then <tt>git commit</tt> them. | |
172 | -* Send the PO files to the translators. | |
173 | -* Get the PO files back from translators, put in po/ under the correct language | |
174 | - name (e.,g. po/pt_BR/) and <tt>git commit</tt>. | |
175 | -* test translations: <tt>rake makemo</tt> and browse the application on the web. | ... | ... |
doc/README_FOR_APP.pt_BR
... | ... | @@ -1,351 +0,0 @@ |
1 | -= Menu | |
2 | - | |
3 | -* MVC | |
4 | -* Como criar um Article? | |
5 | -* Como criar um Block? | |
6 | -* Como criar uma Task? | |
7 | -* Visão Geral do Banco de Dados | |
8 | - | |
9 | -= MVC | |
10 | - | |
11 | -A sigla MVC vem de Modelo, Visão e Controle. Esta arquitetura sugere uma separação do código em três camadas distintas, com papéis bem definidos. | |
12 | - | |
13 | -A Visão é a camada que interage diretamente com o usuário, recebendo e disponibilizando os dados da aplicação. A camada de Visão tem o objetivo de apresentar o resultado do processamento da camada de Controle, formatada para ser usável pelo usuário, consituindo a parte visível do sistema. | |
14 | - | |
15 | -A camada de Controle é a responsável por processar todas as requisições feitas pelo usuário através da interface (Visão). Esta camada interpreta as ações do usuário e gerencia a execução das regras de negócios pelo Modelo. | |
16 | - | |
17 | -O modelo refere-se ao gerenciamento da informação e ao comportamento da aplicação. Em uma visão simplificada, a camada de modelo funciona como uma representação das entidades de domínio e suas regras de negócio. Possui a função de validar os dados vindos da interface do usuário com os dados da aplicação. | |
18 | - | |
19 | -= Como criar um Article? | |
20 | - | |
21 | -Um artigo é um tipo de conteúdo que um usuário pode criar e gerenciar através do botão "gerenciar conteúdo" no seu painel de controle. Ele também é listado no bloco "conteúdo recente" e em alguns outros lugares como no resultado das buscas por exemplo. Os artigos podem ser de vários tipos, artigos que usam marcação de texto textile é um tipo de artigo, artigos com edição visual WYSIWYG é um outro tipo, artigos também podem ser arquivos enviados pelo usuário ou um simplesmente um feed RSS. | |
22 | - | |
23 | -Cada um desses tipos de artigo são subclasses de Article que implementam métodos para editá-lo e exibi-lo. Os métodos que tem que ser sobrescritos são: to_html (para converter o conteudo em html), decription e short_decription (para indicar o que o artigo é para um usuário). Para cada Model que representa um tipo especifico de Article deve existir também um partial rhtml na pasta de views do controller cms em app/views/cms com o nome do tipo de artigo que é a interface de edição do artigo. | |
24 | - | |
25 | -Então basicamente o layout de um novo tipo de artigo ficaria assim: | |
26 | - | |
27 | -class NovoTipo < Article | |
28 | - def description | |
29 | - _('Este é um novo tipo de artigo') | |
30 | - end | |
31 | - def short_description | |
32 | - _('Novo tipo de artigo') | |
33 | - end | |
34 | - def to_html | |
35 | - #Algum código para gerar o html a partir de outras informações armazenadas | |
36 | - end | |
37 | -end | |
38 | - | |
39 | -Por padrão já existem alguns atributos que podem ser usados na geração do html para o artigo. | |
40 | - | |
41 | -* body - corpo do artigo | |
42 | -* name - nome do artigo | |
43 | -* created_at - quando o artigo foi criado | |
44 | -* updated_at - quando foi alterado pela última vez | |
45 | - | |
46 | -Caso seja necessário armazenar alguma informação além destas pode-se adicionar campos personalizados com o método setting_items. | |
47 | - | |
48 | -Para criar por exemplo um artigo que mostre um texto com uma lista de referêcias em separado pode-se adicionar um campo de texto usando settings_items para armazenar as referências. | |
49 | - | |
50 | -app/model/texto_com_referencia.rb | |
51 | - | |
52 | -class TextoComReferencia < Article | |
53 | - def description | |
54 | - _('Este é uma artigo com referências em separado.') | |
55 | - end | |
56 | - def short_description | |
57 | - _('Artigo com referêcias') | |
58 | - end | |
59 | - settings_items :referencias, :type => 'text' | |
60 | - def to_html | |
61 | - body + "<div>#{referencias}</div>" | |
62 | - end | |
63 | -end | |
64 | - | |
65 | -Então o html gerado iria adicionar ao fim do artigo as referêcias dentro de um div. | |
66 | - | |
67 | -Para a edição do nosso artigo criamos o partial em app/views/cms/_texto_com_referencia.rhtml contendo: | |
68 | - | |
69 | -<%= f.text_field('name') %> | |
70 | -<%= f.text_area('body') %> | |
71 | -<%= f.text_area('referencias') %> | |
72 | - | |
73 | -Que gera uma formulário html para que o usuário do artigo digite o nome do artigo, o texto principal e as referências | |
74 | - | |
75 | -= Como criar um Block? | |
76 | - | |
77 | -Um block no Noosfero é uma caixa de conteúdo que pode ser escolhida para ser mostrada na página de um usuário/comunidade/empreendimento. Existem blocks para várias funcionalidades distintas como listar links favoritos, listar amigos, mostrar informações do usuário entre outros. | |
78 | - | |
79 | -Um novo block é um model que herda da classe Block e tem que implementar os seguintes métodos: | |
80 | - | |
81 | -* description - retorna uma string que é a descrição do bloco (este é um método de classe) | |
82 | -* short_description - retorna uma string que é uma descrição curta do bloco (esse é um método de classe) | |
83 | -* default_title - é o título padrão do bloco que pode ser mudado pelo usuário depois | |
84 | -* help - um texto de ajuda que aparece quando o usuário entra no modo ajuda e passa o mouse por cima do bloco | |
85 | -* content - retorna o conteúdo a ser exibido dentro do bloco | |
86 | - | |
87 | -O método content pode retornar uma de duas coisas: uma string com o conteúdo que deve ser exibido ou uma função lambda com código que deve ser executado no contexto da requisição. A função lambda é útil para o caso de se querer utilizar um arquivo rhtml para gerar o html em vez de colocar tudo em uma string. | |
88 | - | |
89 | -Se queremos, por exemplo, criar um bloco que mostra apenas as amigas de um usuário podemos usar o seguinte: | |
90 | - | |
91 | -class Amigas < Block | |
92 | - def self.description | |
93 | - _('Um bloco que mostra o nome de suas amigas') | |
94 | - end | |
95 | - def self.short_description | |
96 | - _('Bloco de amigas') | |
97 | - end | |
98 | - def default_title | |
99 | - _('Minhas amigas') | |
100 | - end | |
101 | - def help | |
102 | - _('Um bloco que mostra minhas amigas') | |
103 | - end | |
104 | - def content | |
105 | - '<ul>' + | |
106 | - owner.friends.select {|f|f.sex == 'female'}.map do |friend| | |
107 | - '<li>' + friend.name + '</li>' | |
108 | - end + | |
109 | - </ul> | |
110 | - end | |
111 | -end | |
112 | - | |
113 | -Depois disso é só adicionar o bloco na lista de blocos disponíveis aos usuários no controller app/controller/my_profile/profile_design_controller.rb. Se o bloco é para ser usado somente para usuários ou somente para comunidades deve ser adicionado em sua própria seção. | |
114 | - | |
115 | -= Como criar uma Task? | |
116 | - | |
117 | -Uma Task é um elemento do Noosfero utilizado para gerenciar tarefas pendentes. Essas tarefas são mostradas no painel de controle do usuário/comunidade/empreendimento que deve resolvê-la. Cada tarefa pode estar em 3 estados diferentes: pendente, resolvida ou cancelada. | |
118 | - | |
119 | -A classe Task provê a infra-estrutura básica para todas as tasks do sistema, o Noosfero hoje possui tasks para as seguintes funções: adicionar amigo, entrar em comunidade moderada, alteração de senha, entre outras. Esta classe contém relacionamento com Person e Profile da seguinte forma: | |
120 | - _________ ______ ________ | |
121 | - | | | | | | | |
122 | - | Profile |1--------*| Task |*---------1| Person | | |
123 | - |_________| |______| |________| | |
124 | - | |
125 | -A classe base Task possui toda a lógica necessária para a existencia de tasks como o estado da tarefa, métodos para criação e finalização, envio de notificação, envio de email caso necessário, entre outras funções. Então o que resta para as classes derivadas é implementar o método perform que fará o trabalho propriamente dito, e adicionar campos personalizados caso necessário. | |
126 | - | |
127 | -A task AddFriend por exemplo, que é uma task criada quando alguem requisita a amizade de outra pessoa, executa os seguintes passos no método perform ao ser finalizada. | |
128 | - | |
129 | -* Adiciona requisitante como amigo do requisitado e; | |
130 | -* Adiciona requisitado como amigo do requitante | |
131 | - | |
132 | -Para que o ciclo de criação, aceitação e finalização de uma task esteja completo é necessário implementar os controllers e as views. Para o AddFriend por exemplo temos o controller friends_controller que contém a lógica de criação da task. Para processamento desta e de todas as outras tasks temos o controller tasks_controller que contém a lógica necessária para finalizar uma task. Em views/tasks/ temos diversas views necessárias para a finalização de tasks, algumas tasks não necessitam campos especificos na sua finalização então usam a view _task.rhtml para a task AddFriend por exemplo temos o campo groups_for_friend usado para classificar um amigo no momento da aceitção da task. | |
133 | - | |
134 | -No exemplo de código abaixo vamos criar uma Task AddFriend onde o Person joão requisita amizade do Person josé: | |
135 | - | |
136 | -* joao = Person['joao'] | |
137 | -* jose = Person['jose'] | |
138 | -* AddFriend.create(:person => joao, :friend => jose) | |
139 | - | |
140 | -José receberá uma requisição para ser amigo de joão, se ele aceitar a requisição o método perform será executado e o relacionamento de amizade entre eles será criado. | |
141 | - | |
142 | -Vamos exemplificar como criar uma nova Task que simplesmente envia uma requisição para alguém e ao ser finalizada cria um artigo para quem aceitou a requisição. | |
143 | - | |
144 | -Vamos chamar esta task de SendArticle, para isto crie o arquivo app/models/send_article.rb com o seguinte conteudo: | |
145 | - | |
146 | -class SendArticle < Task | |
147 | - validates_presence_of :requestor_id, :target_id | |
148 | - acts_as_having_settings :name, :body, :field => :data | |
149 | - def perform | |
150 | - target.articles << TextileArticle.new(:name => name, :body => body) | |
151 | - end | |
152 | - def description | |
153 | - _('%s enviou um artigo para você') % requestor.name | |
154 | - end | |
155 | -end | |
156 | - | |
157 | -Esta é a infra-estrutura para nossa nova task, uma classe que herda de Task e implementa pelo menos o método perform. Este task possui 2 campos personalizados que serão utilizados para armazenar o nome e o corpo do artigo a ser criado. | |
158 | - | |
159 | -Para que seja possivel um usuario qualquer do sistema possa criar uma task dessa temos que implementar a lógica no controller e adicionar um botão na interface ou outro controle qualquer que possibilite o usuario criar, para isto vamos criar um controller. | |
160 | - | |
161 | -app/controllers/public/send_article_controller.rb | |
162 | - | |
163 | -class SendArticleController < MyProfileController | |
164 | - def new | |
165 | - @person = Person.find(params[:target_id]) | |
166 | - @article = TextileArticle.new | |
167 | - if request.post? && params[:confirmation] | |
168 | - SendArticle.create!(:requestor_id => user.id, :target_id => @person.id) | |
169 | - flash[:notice] = _('%s receberá solicitação de criação deste artigo.') % @person.name | |
170 | - redirect_to :back | |
171 | - end | |
172 | - end | |
173 | -end | |
174 | - | |
175 | -Cria uma view com o form para que o usuario possa preencher o nome e o corpo do artigo a ser enviado ao criar a task. | |
176 | - | |
177 | -app/views/send_article.rhtml | |
178 | - | |
179 | -<h1><%= _('Sending article to %s') % @person.name %></h1> | |
180 | -<% labelled_form_for 'article', @article, :html => { :multipart => true } do |f| %> | |
181 | - <%= hidden_field_tag(:confirmation, 1) %> | |
182 | - <%= hidden_field_tag(:target_id, @person.id) %> | |
183 | - <%= render :partial => 'cms/textile_article', :locals => { :f => f } %> | |
184 | - <% button_bar do %> | |
185 | - <%= submit_button :save, _('Send') %> | |
186 | - <%= button(:cancel, _("Cancel"), :controller => 'profile', :profile => profile.identifier) %> | |
187 | - <% end %> | |
188 | -<% end %> | |
189 | - | |
190 | -Falta apenas adicionar um controle na interface para o usuário acionar este ação, vamos adicionar um botão junto aos botões de acão como adicionar amigo, entrar em comunidade, etc. em app/views/blocks/profile_info_actions/person.rhtml adicione o código abaixo. | |
191 | - | |
192 | -<li> <%= link_to content_tag('span', _('Send article')), {:profile => user.identifier, :controller => 'send_article', :action => 'new', :target_id => profile.id}, :class => 'button with-text icon-menu-mail' %> </li> | |
193 | - | |
194 | -= Visão Geral do Banco de Dados | |
195 | - | |
196 | -O Noosfero é composto por 27 tabelas, listadas abaixo: | |
197 | - | |
198 | - +--------------------------------+ | |
199 | - | Tables_in_noosfero_development | | |
200 | - +--------------------------------+ | |
201 | - | article_versions | | |
202 | - | articles | | |
203 | - | articles_categories | | |
204 | - | blocks | | |
205 | - | boxes | | |
206 | - | categories | | |
207 | - | categories_profiles | | |
208 | - | comments | | |
209 | - | consumptions | | |
210 | - | domains | | |
211 | - | environments | | |
212 | - | favorite_enteprises_people | | |
213 | - | friendships | | |
214 | - | images | | |
215 | - | product_categorizations | | |
216 | - | products | | |
217 | - | profiles | | |
218 | - | region_validators | | |
219 | - | role_assignments | | |
220 | - | roles | | |
221 | - | schema_info | | |
222 | - | taggings | | |
223 | - | tags | | |
224 | - | tasks | | |
225 | - | thumbnails | | |
226 | - | users | | |
227 | - | validation_infos | | |
228 | - +--------------------------------+ | |
229 | - 27 rows in set (0.00 sec) | |
230 | - | |
231 | -A seguir, faremos um relato sobre o papel de cada tabela no funcionamento do sistema: | |
232 | - | |
233 | -== article_versions | |
234 | - | |
235 | -Os artigos posssuem controle de versão e cada versão é guardada nessa tabela. | |
236 | - | |
237 | -== articles | |
238 | - | |
239 | -Artigos são todo tipo de conteúdo que pode ser criado pelo usuário. Como textos, imagens e até mesmo pastas. | |
240 | - | |
241 | -== articles_categories | |
242 | - | |
243 | -Os artigos são classificados por categorias. Esta tabela guarda as associações entre artigos e categorias. | |
244 | - | |
245 | -== blocks | |
246 | - | |
247 | -Guarda as informações relativas aos blocos, que são apresentados em boxes na página do usuário. | |
248 | - | |
249 | -== boxes | |
250 | - | |
251 | -Representa as áreas onde os usuários podem anexar seus blocos. | |
252 | - | |
253 | -== categories | |
254 | - | |
255 | -São categorias do sistema, que incluem categorias de produto e regiões. | |
256 | - | |
257 | -== categories_profiles | |
258 | - | |
259 | -Esta tabela guarda a associação entre categories e profiles. | |
260 | - | |
261 | -== comments | |
262 | - | |
263 | -Esta tabela guarda os comentários feitos nos artigos. | |
264 | - | |
265 | -== consumptions | |
266 | - | |
267 | -Representa os tipos de produtos que o usuário consome. | |
268 | - | |
269 | -== domains | |
270 | - | |
271 | -Cada ambiente pode ter um ou mais domínios, nesta tabela está armazenado o domínio do ambiente. | |
272 | - | |
273 | -== environments | |
274 | - | |
275 | -Representa cada uma das redes sociais (ou ambiente) geridas pelo Noosfero. | |
276 | - | |
277 | -== favorite_enteprises_people | |
278 | - | |
279 | -Representa os empreendimentos favoritos de um usuário. | |
280 | - | |
281 | -== friendships | |
282 | - | |
283 | -Esta tabela apresenta todos as relações de amizade. | |
284 | - | |
285 | -== images | |
286 | - | |
287 | -Guarda as informações sobre todas as imagens armazendas no sistema. | |
288 | - | |
289 | -== product_categorizations | |
290 | - | |
291 | -Representa a associação entre produtos e categorias. | |
292 | - | |
293 | -== products | |
294 | - | |
295 | -Esta tabela guarda todos os produtos dos empreendimentos do sistema. | |
296 | - | |
297 | -== profiles | |
298 | - | |
299 | -É a entidade mais importante do sistema. Representa tanto pessoas, quanto comunidades, empreeendimentos e organizações. | |
300 | - | |
301 | -== region_validators | |
302 | - | |
303 | -Relaciona as organizações validadoras com a região em que ela opera. | |
304 | - | |
305 | -== role_assignments | |
306 | - | |
307 | -Associa um papel a um usuário, dando a ele permissões sobre um determinado recurso do sistema. | |
308 | - | |
309 | -== roles | |
310 | - | |
311 | -Apresenta todos os papéis que podem ser atribuídas aos usuários e agrega quais permissões um usuário com esse papel terá. | |
312 | - | |
313 | -== schema_info | |
314 | - | |
315 | -Guarda o número da migration no Rails. | |
316 | - | |
317 | -== taggings | |
318 | - | |
319 | -Associa uma tag a um artigo. | |
320 | - | |
321 | -== tags | |
322 | - | |
323 | -Esta tabela armazena uma tag que pode ser associada a artigos. | |
324 | - | |
325 | -== tasks | |
326 | - | |
327 | -Representa uma tarefa que pode ser atribuída a um usuário, comunidade ou empreendimento. | |
328 | - | |
329 | -== thumbnails | |
330 | - | |
331 | -Guarda informações sobre miniaturas de imagens. | |
332 | - | |
333 | -== users | |
334 | - | |
335 | -Esta tabela guarda informações de login de todos os usuários do sistema. | |
336 | - | |
337 | -== validation_infos | |
338 | - | |
339 | -Guarda a metodologia de validação de uma entidade validadora. | |
340 | - | |
341 | -== Abaixo segue modelagem do Noosfero | |
342 | - | |
343 | -link:../noosfero_tabelas_article.png | |
344 | - | |
345 | -link:../noosfero_tabelas_category.png | |
346 | - | |
347 | -link:../noosfero_tabelas_profile.png | |
348 | - | |
349 | -link:../noosfero_tabelas_environment.png | |
350 | - | |
351 | -link:../noosfero_tabelas_schema.png |
... | ... | @@ -0,0 +1,351 @@ |
1 | += Menu | |
2 | + | |
3 | +* MVC | |
4 | +* Como criar um Article? | |
5 | +* Como criar um Block? | |
6 | +* Como criar uma Task? | |
7 | +* Visão Geral do Banco de Dados | |
8 | + | |
9 | += MVC | |
10 | + | |
11 | +A sigla MVC vem de Modelo, Visão e Controle. Esta arquitetura sugere uma separação do código em três camadas distintas, com papéis bem definidos. | |
12 | + | |
13 | +A Visão é a camada que interage diretamente com o usuário, recebendo e disponibilizando os dados da aplicação. A camada de Visão tem o objetivo de apresentar o resultado do processamento da camada de Controle, formatada para ser usável pelo usuário, consituindo a parte visível do sistema. | |
14 | + | |
15 | +A camada de Controle é a responsável por processar todas as requisições feitas pelo usuário através da interface (Visão). Esta camada interpreta as ações do usuário e gerencia a execução das regras de negócios pelo Modelo. | |
16 | + | |
17 | +O modelo refere-se ao gerenciamento da informação e ao comportamento da aplicação. Em uma visão simplificada, a camada de modelo funciona como uma representação das entidades de domínio e suas regras de negócio. Possui a função de validar os dados vindos da interface do usuário com os dados da aplicação. | |
18 | + | |
19 | += Como criar um Article? | |
20 | + | |
21 | +Um artigo é um tipo de conteúdo que um usuário pode criar e gerenciar através do botão "gerenciar conteúdo" no seu painel de controle. Ele também é listado no bloco "conteúdo recente" e em alguns outros lugares como no resultado das buscas por exemplo. Os artigos podem ser de vários tipos, artigos que usam marcação de texto textile é um tipo de artigo, artigos com edição visual WYSIWYG é um outro tipo, artigos também podem ser arquivos enviados pelo usuário ou um simplesmente um feed RSS. | |
22 | + | |
23 | +Cada um desses tipos de artigo são subclasses de Article que implementam métodos para editá-lo e exibi-lo. Os métodos que tem que ser sobrescritos são: to_html (para converter o conteudo em html), decription e short_decription (para indicar o que o artigo é para um usuário). Para cada Model que representa um tipo especifico de Article deve existir também um partial rhtml na pasta de views do controller cms em app/views/cms com o nome do tipo de artigo que é a interface de edição do artigo. | |
24 | + | |
25 | +Então basicamente o layout de um novo tipo de artigo ficaria assim: | |
26 | + | |
27 | +class NovoTipo < Article | |
28 | + def description | |
29 | + _('Este é um novo tipo de artigo') | |
30 | + end | |
31 | + def short_description | |
32 | + _('Novo tipo de artigo') | |
33 | + end | |
34 | + def to_html | |
35 | + #Algum código para gerar o html a partir de outras informações armazenadas | |
36 | + end | |
37 | +end | |
38 | + | |
39 | +Por padrão já existem alguns atributos que podem ser usados na geração do html para o artigo. | |
40 | + | |
41 | +* body - corpo do artigo | |
42 | +* name - nome do artigo | |
43 | +* created_at - quando o artigo foi criado | |
44 | +* updated_at - quando foi alterado pela última vez | |
45 | + | |
46 | +Caso seja necessário armazenar alguma informação além destas pode-se adicionar campos personalizados com o método setting_items. | |
47 | + | |
48 | +Para criar por exemplo um artigo que mostre um texto com uma lista de referêcias em separado pode-se adicionar um campo de texto usando settings_items para armazenar as referências. | |
49 | + | |
50 | +app/model/texto_com_referencia.rb | |
51 | + | |
52 | +class TextoComReferencia < Article | |
53 | + def description | |
54 | + _('Este é uma artigo com referências em separado.') | |
55 | + end | |
56 | + def short_description | |
57 | + _('Artigo com referêcias') | |
58 | + end | |
59 | + settings_items :referencias, :type => 'text' | |
60 | + def to_html | |
61 | + body + "<div>#{referencias}</div>" | |
62 | + end | |
63 | +end | |
64 | + | |
65 | +Então o html gerado iria adicionar ao fim do artigo as referêcias dentro de um div. | |
66 | + | |
67 | +Para a edição do nosso artigo criamos o partial em app/views/cms/_texto_com_referencia.rhtml contendo: | |
68 | + | |
69 | +<%= f.text_field('name') %> | |
70 | +<%= f.text_area('body') %> | |
71 | +<%= f.text_area('referencias') %> | |
72 | + | |
73 | +Que gera uma formulário html para que o usuário do artigo digite o nome do artigo, o texto principal e as referências | |
74 | + | |
75 | += Como criar um Block? | |
76 | + | |
77 | +Um block no Noosfero é uma caixa de conteúdo que pode ser escolhida para ser mostrada na página de um usuário/comunidade/empreendimento. Existem blocks para várias funcionalidades distintas como listar links favoritos, listar amigos, mostrar informações do usuário entre outros. | |
78 | + | |
79 | +Um novo block é um model que herda da classe Block e tem que implementar os seguintes métodos: | |
80 | + | |
81 | +* description - retorna uma string que é a descrição do bloco (este é um método de classe) | |
82 | +* short_description - retorna uma string que é uma descrição curta do bloco (esse é um método de classe) | |
83 | +* default_title - é o título padrão do bloco que pode ser mudado pelo usuário depois | |
84 | +* help - um texto de ajuda que aparece quando o usuário entra no modo ajuda e passa o mouse por cima do bloco | |
85 | +* content - retorna o conteúdo a ser exibido dentro do bloco | |
86 | + | |
87 | +O método content pode retornar uma de duas coisas: uma string com o conteúdo que deve ser exibido ou uma função lambda com código que deve ser executado no contexto da requisição. A função lambda é útil para o caso de se querer utilizar um arquivo rhtml para gerar o html em vez de colocar tudo em uma string. | |
88 | + | |
89 | +Se queremos, por exemplo, criar um bloco que mostra apenas as amigas de um usuário podemos usar o seguinte: | |
90 | + | |
91 | +class Amigas < Block | |
92 | + def self.description | |
93 | + _('Um bloco que mostra o nome de suas amigas') | |
94 | + end | |
95 | + def self.short_description | |
96 | + _('Bloco de amigas') | |
97 | + end | |
98 | + def default_title | |
99 | + _('Minhas amigas') | |
100 | + end | |
101 | + def help | |
102 | + _('Um bloco que mostra minhas amigas') | |
103 | + end | |
104 | + def content | |
105 | + '<ul>' + | |
106 | + owner.friends.select {|f|f.sex == 'female'}.map do |friend| | |
107 | + '<li>' + friend.name + '</li>' | |
108 | + end + | |
109 | + </ul> | |
110 | + end | |
111 | +end | |
112 | + | |
113 | +Depois disso é só adicionar o bloco na lista de blocos disponíveis aos usuários no controller app/controller/my_profile/profile_design_controller.rb. Se o bloco é para ser usado somente para usuários ou somente para comunidades deve ser adicionado em sua própria seção. | |
114 | + | |
115 | += Como criar uma Task? | |
116 | + | |
117 | +Uma Task é um elemento do Noosfero utilizado para gerenciar tarefas pendentes. Essas tarefas são mostradas no painel de controle do usuário/comunidade/empreendimento que deve resolvê-la. Cada tarefa pode estar em 3 estados diferentes: pendente, resolvida ou cancelada. | |
118 | + | |
119 | +A classe Task provê a infra-estrutura básica para todas as tasks do sistema, o Noosfero hoje possui tasks para as seguintes funções: adicionar amigo, entrar em comunidade moderada, alteração de senha, entre outras. Esta classe contém relacionamento com Person e Profile da seguinte forma: | |
120 | + _________ ______ ________ | |
121 | + | | | | | | | |
122 | + | Profile |1--------*| Task |*---------1| Person | | |
123 | + |_________| |______| |________| | |
124 | + | |
125 | +A classe base Task possui toda a lógica necessária para a existencia de tasks como o estado da tarefa, métodos para criação e finalização, envio de notificação, envio de email caso necessário, entre outras funções. Então o que resta para as classes derivadas é implementar o método perform que fará o trabalho propriamente dito, e adicionar campos personalizados caso necessário. | |
126 | + | |
127 | +A task AddFriend por exemplo, que é uma task criada quando alguem requisita a amizade de outra pessoa, executa os seguintes passos no método perform ao ser finalizada. | |
128 | + | |
129 | +* Adiciona requisitante como amigo do requisitado e; | |
130 | +* Adiciona requisitado como amigo do requitante | |
131 | + | |
132 | +Para que o ciclo de criação, aceitação e finalização de uma task esteja completo é necessário implementar os controllers e as views. Para o AddFriend por exemplo temos o controller friends_controller que contém a lógica de criação da task. Para processamento desta e de todas as outras tasks temos o controller tasks_controller que contém a lógica necessária para finalizar uma task. Em views/tasks/ temos diversas views necessárias para a finalização de tasks, algumas tasks não necessitam campos especificos na sua finalização então usam a view _task.rhtml para a task AddFriend por exemplo temos o campo groups_for_friend usado para classificar um amigo no momento da aceitção da task. | |
133 | + | |
134 | +No exemplo de código abaixo vamos criar uma Task AddFriend onde o Person joão requisita amizade do Person josé: | |
135 | + | |
136 | +* joao = Person['joao'] | |
137 | +* jose = Person['jose'] | |
138 | +* AddFriend.create(:person => joao, :friend => jose) | |
139 | + | |
140 | +José receberá uma requisição para ser amigo de joão, se ele aceitar a requisição o método perform será executado e o relacionamento de amizade entre eles será criado. | |
141 | + | |
142 | +Vamos exemplificar como criar uma nova Task que simplesmente envia uma requisição para alguém e ao ser finalizada cria um artigo para quem aceitou a requisição. | |
143 | + | |
144 | +Vamos chamar esta task de SendArticle, para isto crie o arquivo app/models/send_article.rb com o seguinte conteudo: | |
145 | + | |
146 | +class SendArticle < Task | |
147 | + validates_presence_of :requestor_id, :target_id | |
148 | + acts_as_having_settings :name, :body, :field => :data | |
149 | + def perform | |
150 | + target.articles << TextileArticle.new(:name => name, :body => body) | |
151 | + end | |
152 | + def description | |
153 | + _('%s enviou um artigo para você') % requestor.name | |
154 | + end | |
155 | +end | |
156 | + | |
157 | +Esta é a infra-estrutura para nossa nova task, uma classe que herda de Task e implementa pelo menos o método perform. Este task possui 2 campos personalizados que serão utilizados para armazenar o nome e o corpo do artigo a ser criado. | |
158 | + | |
159 | +Para que seja possivel um usuario qualquer do sistema possa criar uma task dessa temos que implementar a lógica no controller e adicionar um botão na interface ou outro controle qualquer que possibilite o usuario criar, para isto vamos criar um controller. | |
160 | + | |
161 | +app/controllers/public/send_article_controller.rb | |
162 | + | |
163 | +class SendArticleController < MyProfileController | |
164 | + def new | |
165 | + @person = Person.find(params[:target_id]) | |
166 | + @article = TextileArticle.new | |
167 | + if request.post? && params[:confirmation] | |
168 | + SendArticle.create!(:requestor_id => user.id, :target_id => @person.id) | |
169 | + flash[:notice] = _('%s receberá solicitação de criação deste artigo.') % @person.name | |
170 | + redirect_to :back | |
171 | + end | |
172 | + end | |
173 | +end | |
174 | + | |
175 | +Cria uma view com o form para que o usuario possa preencher o nome e o corpo do artigo a ser enviado ao criar a task. | |
176 | + | |
177 | +app/views/send_article.rhtml | |
178 | + | |
179 | +<h1><%= _('Sending article to %s') % @person.name %></h1> | |
180 | +<% labelled_form_for 'article', @article, :html => { :multipart => true } do |f| %> | |
181 | + <%= hidden_field_tag(:confirmation, 1) %> | |
182 | + <%= hidden_field_tag(:target_id, @person.id) %> | |
183 | + <%= render :partial => 'cms/textile_article', :locals => { :f => f } %> | |
184 | + <% button_bar do %> | |
185 | + <%= submit_button :save, _('Send') %> | |
186 | + <%= button(:cancel, _("Cancel"), :controller => 'profile', :profile => profile.identifier) %> | |
187 | + <% end %> | |
188 | +<% end %> | |
189 | + | |
190 | +Falta apenas adicionar um controle na interface para o usuário acionar este ação, vamos adicionar um botão junto aos botões de acão como adicionar amigo, entrar em comunidade, etc. em app/views/blocks/profile_info_actions/person.rhtml adicione o código abaixo. | |
191 | + | |
192 | +<li> <%= link_to content_tag('span', _('Send article')), {:profile => user.identifier, :controller => 'send_article', :action => 'new', :target_id => profile.id}, :class => 'button with-text icon-menu-mail' %> </li> | |
193 | + | |
194 | += Visão Geral do Banco de Dados | |
195 | + | |
196 | +O Noosfero é composto por 27 tabelas, listadas abaixo: | |
197 | + | |
198 | + +--------------------------------+ | |
199 | + | Tables_in_noosfero_development | | |
200 | + +--------------------------------+ | |
201 | + | article_versions | | |
202 | + | articles | | |
203 | + | articles_categories | | |
204 | + | blocks | | |
205 | + | boxes | | |
206 | + | categories | | |
207 | + | categories_profiles | | |
208 | + | comments | | |
209 | + | consumptions | | |
210 | + | domains | | |
211 | + | environments | | |
212 | + | favorite_enteprises_people | | |
213 | + | friendships | | |
214 | + | images | | |
215 | + | product_categorizations | | |
216 | + | products | | |
217 | + | profiles | | |
218 | + | region_validators | | |
219 | + | role_assignments | | |
220 | + | roles | | |
221 | + | schema_info | | |
222 | + | taggings | | |
223 | + | tags | | |
224 | + | tasks | | |
225 | + | thumbnails | | |
226 | + | users | | |
227 | + | validation_infos | | |
228 | + +--------------------------------+ | |
229 | + 27 rows in set (0.00 sec) | |
230 | + | |
231 | +A seguir, faremos um relato sobre o papel de cada tabela no funcionamento do sistema: | |
232 | + | |
233 | +== article_versions | |
234 | + | |
235 | +Os artigos posssuem controle de versão e cada versão é guardada nessa tabela. | |
236 | + | |
237 | +== articles | |
238 | + | |
239 | +Artigos são todo tipo de conteúdo que pode ser criado pelo usuário. Como textos, imagens e até mesmo pastas. | |
240 | + | |
241 | +== articles_categories | |
242 | + | |
243 | +Os artigos são classificados por categorias. Esta tabela guarda as associações entre artigos e categorias. | |
244 | + | |
245 | +== blocks | |
246 | + | |
247 | +Guarda as informações relativas aos blocos, que são apresentados em boxes na página do usuário. | |
248 | + | |
249 | +== boxes | |
250 | + | |
251 | +Representa as áreas onde os usuários podem anexar seus blocos. | |
252 | + | |
253 | +== categories | |
254 | + | |
255 | +São categorias do sistema, que incluem categorias de produto e regiões. | |
256 | + | |
257 | +== categories_profiles | |
258 | + | |
259 | +Esta tabela guarda a associação entre categories e profiles. | |
260 | + | |
261 | +== comments | |
262 | + | |
263 | +Esta tabela guarda os comentários feitos nos artigos. | |
264 | + | |
265 | +== consumptions | |
266 | + | |
267 | +Representa os tipos de produtos que o usuário consome. | |
268 | + | |
269 | +== domains | |
270 | + | |
271 | +Cada ambiente pode ter um ou mais domínios, nesta tabela está armazenado o domínio do ambiente. | |
272 | + | |
273 | +== environments | |
274 | + | |
275 | +Representa cada uma das redes sociais (ou ambiente) geridas pelo Noosfero. | |
276 | + | |
277 | +== favorite_enteprises_people | |
278 | + | |
279 | +Representa os empreendimentos favoritos de um usuário. | |
280 | + | |
281 | +== friendships | |
282 | + | |
283 | +Esta tabela apresenta todos as relações de amizade. | |
284 | + | |
285 | +== images | |
286 | + | |
287 | +Guarda as informações sobre todas as imagens armazendas no sistema. | |
288 | + | |
289 | +== product_categorizations | |
290 | + | |
291 | +Representa a associação entre produtos e categorias. | |
292 | + | |
293 | +== products | |
294 | + | |
295 | +Esta tabela guarda todos os produtos dos empreendimentos do sistema. | |
296 | + | |
297 | +== profiles | |
298 | + | |
299 | +É a entidade mais importante do sistema. Representa tanto pessoas, quanto comunidades, empreeendimentos e organizações. | |
300 | + | |
301 | +== region_validators | |
302 | + | |
303 | +Relaciona as organizações validadoras com a região em que ela opera. | |
304 | + | |
305 | +== role_assignments | |
306 | + | |
307 | +Associa um papel a um usuário, dando a ele permissões sobre um determinado recurso do sistema. | |
308 | + | |
309 | +== roles | |
310 | + | |
311 | +Apresenta todos os papéis que podem ser atribuídas aos usuários e agrega quais permissões um usuário com esse papel terá. | |
312 | + | |
313 | +== schema_info | |
314 | + | |
315 | +Guarda o número da migration no Rails. | |
316 | + | |
317 | +== taggings | |
318 | + | |
319 | +Associa uma tag a um artigo. | |
320 | + | |
321 | +== tags | |
322 | + | |
323 | +Esta tabela armazena uma tag que pode ser associada a artigos. | |
324 | + | |
325 | +== tasks | |
326 | + | |
327 | +Representa uma tarefa que pode ser atribuída a um usuário, comunidade ou empreendimento. | |
328 | + | |
329 | +== thumbnails | |
330 | + | |
331 | +Guarda informações sobre miniaturas de imagens. | |
332 | + | |
333 | +== users | |
334 | + | |
335 | +Esta tabela guarda informações de login de todos os usuários do sistema. | |
336 | + | |
337 | +== validation_infos | |
338 | + | |
339 | +Guarda a metodologia de validação de uma entidade validadora. | |
340 | + | |
341 | +== Abaixo segue modelagem do Noosfero | |
342 | + | |
343 | +link:../noosfero_tabelas_article.png | |
344 | + | |
345 | +link:../noosfero_tabelas_category.png | |
346 | + | |
347 | +link:../noosfero_tabelas_profile.png | |
348 | + | |
349 | +link:../noosfero_tabelas_environment.png | |
350 | + | |
351 | +link:../noosfero_tabelas_schema.png | ... | ... |