Commit 4dab3b15026549e928314efb2d71976ef45ecfa1
1 parent
87bc57b3
Exists in
master
and in
22 other branches
Warn user about errors in the upload
Showing
4 changed files
with
38 additions
and
3 deletions
Show diff stats
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 < 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 < 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 < 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 | ... | ... |