You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
9.3 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. {% extends "./layout/default" %}
  2. {% block content %}
  3. <div class="container">
  4. <div class="row">
  5. <div class="col-lg-12">
  6. &nbsp;
  7. </div>
  8. </div>
  9. <div class="row">
  10. <div class="col-lg-10 offset-lg-1">
  11. <h1>Firefly III Data Import Tool, v{{ version }}</h1>
  12. </div>
  13. </div>
  14. <div class="row">
  15. <div class="col-lg-10 offset-lg-1">
  16. <div class="card">
  17. <div class="card-header">
  18. Firefly III Data Import Tool, v{{ version }}
  19. </div>
  20. <div class="card-body">
  21. <p class="card-text">
  22. Welcome! This tool will help you import data into Firefly III.
  23. </p>
  24. <p>
  25. All are instructions in the <a href="https://docs.firefly-iii.org/" target="_blank">
  26. TODO documentation</a>. Any links you see to the docs will open in a new window or tab.
  27. </p>
  28. <p>
  29. To import data, you need to authenticate with Firefly III, and optionally with one of the
  30. data sources this importer supports.
  31. </p>
  32. {% if pat %}
  33. <p id="firefly_expl">
  34. You're using a Personal Access Token to <span
  35. class="text-info">authenticate</span> to Firefly III.
  36. </p>
  37. {% endif %}
  38. {% if clientIdWithURL %}
  39. <p id="firefly_expl">
  40. You're using a fixed Client ID and a fixed Firefly III URL to <span
  41. class="text-info">authenticate</span> to Firefly III.
  42. </p>
  43. {% endif %}
  44. {% if URLonly %}
  45. <p id="firefly_expl">
  46. You're using a Client ID and a fixed Firefly III URL to <span
  47. class="text-info">authenticate</span> to Firefly III.
  48. </p>
  49. {% endif %}
  50. {% if flexible %}
  51. <p id="firefly_expl">
  52. You're using a self-submitted Client ID and Firefly III URL to <span
  53. class="text-info">authenticate</span> to Firefly III.
  54. </p>
  55. {% endif %}
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="row" style="margin-top:1em;display: none;" id="error_explain">
  61. <div class="col-lg-10 offset-lg-1">
  62. <div class="card">
  63. <div class="card-header">
  64. Configuration / connection error :(
  65. </div>
  66. <div class="card-body">
  67. <p>The importer could not connect to Firefly III.
  68. Please remedy the error below first, and check out the <a
  69. href="https://docs.firefly-iii.org/" target="_blank">
  70. documentation</a> if necessary.</p>
  71. <p id="error_txt" class="text-danger"></p>
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. <form action="{{ route('index.post') }}" method="post">
  77. <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
  78. <div class="row" style="margin-top:1em;" id="importers">
  79. <div class="col-lg-10 offset-lg-1">
  80. <div class="row">
  81. <div class="col-lg-4">
  82. <div class="card">
  83. <div class="card-header">
  84. Import from CSV file
  85. </div>
  86. <div class="card-body">
  87. <button class="btn btn-info disabled" value="csv" name="flow" disabled="disabled"
  88. id="csv_button"><span class="fas fa-cog fa-spin"></span></button>
  89. </div>
  90. </div>
  91. </div>
  92. <div class="col-lg-4">
  93. <div class="card">
  94. <div class="card-header">
  95. Import from Nordigen
  96. </div>
  97. <div class="card-body">
  98. <p id="nordigen_result" style="display: none;"></p>
  99. <button class="btn btn-info disabled" value="nordigen" name="flow" disabled="disabled" id="nordigen_button"><span class="fas fa-cog fa-spin"></span></button>
  100. </div>
  101. </div>
  102. </div>
  103. <div class="col-lg-4">
  104. <div class="card">
  105. <div class="card-header">
  106. Import from Spectre
  107. </div>
  108. <div class="card-body">
  109. <p id="spectre_result" style="display: none;"></p>
  110. <button class="btn btn-info disabled" value="spectre" name="flow" disabled="disabled" id="spectre_button"><span class="fas fa-cog fa-spin"></span></button>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. </form>
  118. <div class="row" style="margin-top:1em;" id="importers">
  119. <div class="col-lg-10 offset-lg-1">
  120. <div class="card">
  121. <div class="card-header">
  122. Extra buttons!
  123. </div>
  124. <div class="card-body">
  125. <p>
  126. <a class="btn btn-danger btn-sm" href="{{ route('flush') }}" data-bs-toggle="tooltip" data-bs-placement="top" title="This button resets your progress">Start over</a>
  127. <a class="btn btn-danger btn-sm" href="{{ route('reset') }}" data-bs-toggle="tooltip" data-bs-placement="top" title="This button tries to connect to Firefly III again">Reauthenticate</a>
  128. </p>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. {% endblock %}
  134. {% block scripts %}
  135. <script type="text/javascript">
  136. var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
  137. var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
  138. return new bootstrap.Tooltip(tooltipTriggerEl)
  139. })
  140. var url = '{{ route('token.validate') }}';
  141. var tokenPageUrl = '{{ route('token.index') }}';
  142. $.getJSON(url).done(function (data) {
  143. if ('OK' === data.result) {
  144. $('#csv_button').removeClass('disabled').text('Import CSV file').removeAttr('disabled');
  145. } else {
  146. $('#importers').hide();
  147. $('#error_explain').show();
  148. $('#firefly_expl').hide();
  149. $('#error_txt').text(data.message);
  150. // window.location = tokenPageUrl;
  151. }
  152. }).fail(function () {
  153. $('#importers').hide();
  154. $('#error_explain').show();
  155. $('#firefly_expl').hide();
  156. $('#error_txt').show().text(data.message);
  157. // window.location = tokenPageUrl;
  158. });
  159. // validate Spectre information:
  160. url = '{{ route('validate.spectre') }}';
  161. $.getJSON(url).done(function (data) {
  162. if ('OK' === data.result) {
  163. $('#spectre_result').hide();
  164. $('#spectre_button').removeClass('disabled').text('Import from Spectre').removeAttr('disabled');
  165. }
  166. if ('NODATA' === data.result) {
  167. $('#spectre_button').removeClass('disabled').text('Import from Spectre').removeAttr('disabled');
  168. }
  169. }).fail(function () {
  170. $('#spectre_result').show().text('The Spectre / Salt Edge API is configured incorrectly and cannot be used to import data.');
  171. $('#spectre_button').hide();
  172. });
  173. // validate Nordigen information
  174. url = '{{ route('validate.nordigen') }}';
  175. $.getJSON(url).done(function (data) {
  176. if ('OK' === data.result) {
  177. $('#nordigen_result').hide();
  178. $('#nordigen_button').removeClass('disabled').text('Import from Nordigen').removeAttr('disabled');
  179. }
  180. if ('NODATA' === data.result) {
  181. $('#nordigen_button').removeClass('disabled').text('Import from Nordigen').removeAttr('disabled');
  182. }
  183. }).fail(function () {
  184. $('#nordigen_result').show().text('The Nordigen API is configured incorrectly and cannot be used to import data.');
  185. $('#nordigen_button').hide();
  186. });
  187. </script>
  188. {% endblock %}