Commit 2cc616fc664db976d687cace8632988a1e3a8c48

Authored by Victor Costa
1 parent b0ca0333

Require login to send a new proposal

Showing 2 changed files with 72 additions and 18 deletions   Show diff stats
index.html
... ... @@ -80,7 +80,9 @@
80 80 <div class='subtitle'>Qual a sua sugestão para melhorar este programa?</div>
81 81 <div class='info'>Ela se tornará pública em até 24 horas após o envio e poderá ser apoiada por outros participantes.</div>
82 82 <div class='send-proposal-button'><a href='#'>Envie Sua Proposta</a></div>
  83 + <div class="login-container hide">Login</div>
83 84 <form class='make-proposal-form hide' id='make-proposal-form-{{id}}'>
  85 + <div class="message"></div>
84 86 <div class="name">
85 87 <div><label>Título</label></div>
86 88 <input id="article_name" name="article[name]" type="text" placeholder="Título">
... ... @@ -89,7 +91,6 @@
89 91 <div><label>Descrição</label></div>
90 92 <textarea id="article_abstract" name="article[abstract]" placeholder="Descrição"></textarea>
91 93 </div>
92   - <input id='private_token' name='private_token' value='{{../private_token}}' type='hidden'>
93 94 <input id='content_type' name='content_type' value='ProposalsDiscussionPlugin::Proposal' type='hidden'>
94 95 <input type='submit' id='make-proposal-button' class='make-proposal-button' name='make-proposal-button' value='Enviar'>
95 96 </form>
... ... @@ -129,13 +130,31 @@
129 130 </div>
130 131 </script>
131 132  
132   - <div id='proposal-result'></div>
  133 + <script id='login' type='text/x-handlebars-template'>
  134 + <form class="login">
  135 + <div class="message"></div>
  136 + <div class="username">
  137 + <div class="label">Nome de Usuário / E-mail:</div>
  138 + <input id="user_name" name="login" type="text" placeholder="Nome do usuário / E-mail">
  139 + </div>
  140 + <div class="password">
  141 + <div class="label">Senha:</div>
  142 + <input id="user_password" name="password" type="password" placeholder="Senha">
  143 + </div>
  144 + <div class="actions">
  145 + <a href="http://www.participa.br/account/forgot_password" target="_blank" class="forgot-password">Esqueci minha senha</a>
  146 + <a href="#" class="login-action">Acessar</a>
  147 + </div>
  148 + <div class="oauth">
  149 + <div class="label">Acessar com:</div>
  150 + <a href="/plugin/oauth_client/facebook?oauth_client_popup=true&id=1" target="_blank" class="facebook">Facebook</a>
  151 + <a href="/plugin/oauth_client/google_oauth2?oauth_client_popup=true&id=2" target="_blank" class="google">Google +</a>
  152 + <a href="http://www.participa.br/account/signup" target="_blank" class="new-user">Cadastrar</a>
  153 + </div>
  154 + </form>
  155 + </script>
133 156  
134   - <div id="login" style="display: none">
135   - <a href="/plugin/oauth_client/google_oauth2?oauth_client_popup=true&id=2" target="_blank" class="google">Google</a>
136   - <a href="/plugin/oauth_client/facebook?oauth_client_popup=true&id=1" target="_blank" class="facebook">Facebook</a>
137   - <a href="/plugin/oauth_client/noosfero_oauth2?oauth_client_popup=true&id=3" target="_blank" class="participa">Participa</a>
138   - </div>
  157 + <div id='proposal-result'></div>
139 158  
140 159 <script src='js/main.js'></script>
141 160 </body>
... ...
js/main.js
... ... @@ -5,12 +5,15 @@ var templateSource = document.getElementById(&#39;proposal-template&#39;).innerHTML;
5 5 var template = Handlebars.compile(templateSource);
6 6  
7 7 var supportProposalTemplate = Handlebars.compile(document.getElementById('support-proposal-template').innerHTML);
  8 +var loginTemplate = Handlebars.compile(document.getElementById('login').innerHTML);
8 9  
9 10 // The div/container that we are going to display the results in
10 11 var resultsPlaceholder = document.getElementById('proposal-result');
11 12  
12 13 var topics;
13 14  
  15 +var logged_in = false;
  16 +
14 17 var participa = true;
15 18 if(participa){
16 19 var host = 'http://www.participa.br';
... ... @@ -31,6 +34,7 @@ $.getJSON(noosferoAPI)
31 34 data['host'] = host;
32 35 data['private_token'] = private_token;
33 36 resultsPlaceholder.innerHTML = template(data);
  37 + $('.login-container').html(loginTemplate());
34 38 //Actions for links
35 39 $( '#nav-proposal-categories a' ).click(function(event){
36 40 //Display the category tab
... ... @@ -62,6 +66,10 @@ $.getJSON(noosferoAPI)
62 66 $('.proposal-detail').hide();
63 67 $('#' + item).show();
64 68  
  69 + $('.send-proposal-button').show();
  70 + $('.make-proposal-form').hide();
  71 + $('.login-container').hide();
  72 +
65 73 var topic_id = this.id.replace('\#','');
66 74 loadRandomProposal(topic_id, private_token);
67 75 });
... ... @@ -82,35 +90,32 @@ $.getJSON(noosferoAPI)
82 90 }
83 91 event.preventDefault();
84 92 });
85   - $( '.send-proposal-button a' ).click(function(event){
86   - //Display Topics or Discussion by category
87   - $('.make-proposal-form').show();
  93 + $( '.send-proposal-button a, .success-proposal-sent a' ).click(function(event){
  94 + //display form to send proposal (or login form for non-logged users)
88 95 $('.send-proposal-button').hide();
89   - event.preventDefault();
90   - });
91   - $( '.success-proposal-sent a' ).click(function(event){
92   - //Display Topics or Discussion by category
93   - $('.make-proposal-form').show();
94 96 $('.success-proposal-sent').hide();
  97 + loginCallback(logged_in);
95 98 event.preventDefault();
96 99 });
97 100  
98 101 $('.make-proposal-form').submit(function (e) {
99 102 e.preventDefault();
100 103 var proposal_id = this.id.split('-').pop();
  104 + var form = this;
101 105 $.ajax({
102 106 type: 'post',
103 107 url: host + '/api/v1/articles/' + proposal_id + '/children',
104   - data: $('#'+this.id).serialize()
  108 + data: $('#'+this.id).serialize() + "&private_token="+private_token
105 109 })
106 110 .done(function( data ) {
107   - this.reset();
  111 + form.reset();
108 112 $('.make-proposal-form').hide();
109 113 $('.success-proposal-sent').show();
110 114 })
111 115 .fail(function( jqxhr, textStatus, error ) {
112 116 var err = textStatus + ", " + error;
113 117 console.log( "Request Failed: " + err );
  118 + $('.make-proposal-form .message').text('Não foi possível enviar sua proposta.');
114 119 });
115 120 });
116 121  
... ... @@ -149,6 +154,36 @@ function loadRandomProposal(topic_id, private_token) {
149 154 });
150 155 }
151 156  
  157 +function loginCallback(loggedIn, token) {
  158 + logged_in = loggedIn;
  159 + $('.login .message').text('');
  160 +
  161 + if(logged_in) {
  162 + if(token) private_token = token;
  163 + $('.make-proposal-form').show();
  164 + $('.make-proposal-form .message').text('');
  165 + $('.login-container').hide();
  166 + } else {
  167 + $('.make-proposal-form').hide();
  168 + $('.login-container').show();
  169 + }
  170 +}
  171 +
152 172 function oauthPluginHandleLoginResult(loggedIn, token) {
153   - private_token = token;
  173 + loginCallback(loggedIn, token);
154 174 }
  175 +
  176 +jQuery(document).ready(function($) {
  177 + $(document).on('click', '.login-action', function(e) {
  178 + $.ajax({
  179 + type: 'post',
  180 + url: host + '/api/v1/login',
  181 + data: $(this).parents('.login').serialize(),
  182 + }).done(function(data) {
  183 + loginCallback(true, data.private_token);
  184 + }).fail(function(data) {
  185 + $('.login .message').text('Não foi possível logar');
  186 + });
  187 + e.preventDefault();
  188 + });
  189 +});
... ...