Commit 4dab3b15026549e928314efb2d71976ef45ecfa1

Authored by Antonio Terceiro
1 parent 87bc57b3

Warn user about errors in the upload

app/controllers/my_profile/cms_controller.rb
... ... @@ -357,7 +357,8 @@ class CmsController < MyProfileController
357 357 'title' => item.title,
358 358 'url' => item.image? ? item.public_filename(:uploaded) : url_for(item.url),
359 359 :icon => icon_for_article(item),
360   - :content_type => item.mime_type
  360 + :content_type => item.mime_type,
  361 + :error => item.errors.any? ? _('%s could not be uploaded') % item.title : nil,
361 362 }
362 363 end.to_json
363 364 end
... ...
public/javascripts/article.js
... ... @@ -26,6 +26,10 @@ jQuery(function($) {
26 26 function insert_items(items, selector) {
27 27 var html_for_items = '';
28 28 $.each(items, function(i, item) {
  29 + if (item.error) {
  30 + html_for_items += '<li class="media-upload-error">' + item.error + '</li>';
  31 + return;
  32 + }
29 33 if (item.content_type && item.content_type.match(/^image/)) {
30 34 html_for_items += '<li class="icon-photos"><img src="' + item.url + '"/><br/><a href="' + item.url + '">' + item.title + '</a></li>';
31 35 } else {
... ...
public/stylesheets/application.css
... ... @@ -3406,6 +3406,9 @@ div.with_media_panel .formfield input {
3406 3406 max-width: 96px;
3407 3407 border: 1px solid #d3d7cf;
3408 3408 }
  3409 +.text-editor-sidebar .media-upload-error {
  3410 + color: red;
  3411 +}
3409 3412  
3410 3413 /* ==> public/stylesheets/controller_contact.css <== */
3411 3414 /*** SELECT CITY ***/
... ...
test/functional/cms_controller_test.rb
... ... @@ -1486,7 +1486,7 @@ class CmsControllerTest &lt; Test::Unit::TestCase
1486 1486 assert_match /test.txt/, @response.body
1487 1487 assert_equal 'application/json', @response.content_type
1488 1488  
1489   - data = eval(@response.body.gsub('":', '"=>'))
  1489 + data = parse_json_response
1490 1490 assert_equal 'test.txt', data.first['title']
1491 1491 assert_match /\/testinguser\/test.txt$/, data.first['url']
1492 1492 assert_match /text/, data.first['icon']
... ... @@ -1498,17 +1498,19 @@ class CmsControllerTest &lt; Test::Unit::TestCase
1498 1498 assert_match 'test.txt', @response.body
1499 1499 assert_equal 'application/json', @response.content_type
1500 1500  
1501   - data = eval(@response.body.gsub('":', '"=>'))
  1501 + data = parse_json_response
1502 1502  
1503 1503 assert_equal 'test.txt', data[0]['title']
1504 1504 assert_match /\/testinguser\/test.txt$/, data[0]['url']
1505 1505 assert_match /text/, data[0]['icon']
1506 1506 assert_match /text/, data[0]['content_type']
  1507 + assert_nil data[0]['error']
1507 1508  
1508 1509 assert_equal 'rails.png', data[1]['title']
1509 1510 assert_no_match /\/public\/articles\/.*\/rails.png$/, data[1]['url']
1510 1511 assert_match /png$/, data[1]['icon']
1511 1512 assert_match /image/, data[1]['content_type']
  1513 + assert_nil data[1]['error']
1512 1514  
1513 1515 end
1514 1516  
... ... @@ -1516,4 +1518,29 @@ class CmsControllerTest &lt; Test::Unit::TestCase
1516 1518 post :media_upload, :profile => @profile.identifier
1517 1519 end
1518 1520  
  1521 + should 'mark unsuccessfull uploads' do
  1522 + file = UploadedFile.create!(:profile => profile, :uploaded_data => fixture_file_upload('files/rails.png', 'image/png'))
  1523 +
  1524 + post :media_upload, :profile => profile.identifier, :media_listing => true, :file1 => fixture_file_upload('files/rails.png', 'image/png'), :file2 => fixture_file_upload('/files/test.txt', 'text/plain')
  1525 +
  1526 + assert_equal 'application/json', @response.content_type
  1527 + data = parse_json_response
  1528 +
  1529 + assert_equal 'rails.png', data[0]['title']
  1530 + assert_not_nil data[0]['error']
  1531 + assert_match /rails.png/, data[0]['error']
  1532 +
  1533 + assert_equal 'test.txt', data[1]['title']
  1534 + assert_nil data[1]['error']
  1535 + end
  1536 +
  1537 + protected
  1538 +
  1539 + # FIXME this is to avoid adding an extra dependency for a proper JSON parser.
  1540 + # For now we are assuming that the JSON is close enough to Ruby and just
  1541 + # making some adjustments.
  1542 + def parse_json_response
  1543 + eval(@response.body.gsub('":', '"=>').gsub('null', 'nil'))
  1544 + end
  1545 +
1519 1546 end
... ...