This commit is contained in:
+66
@@ -677,6 +677,28 @@ def api_toggle_event_publication(event_id):
|
|||||||
finally:
|
finally:
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
|
@bp.route('/api/events/mark_all_for_publication', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def api_mark_all_events_for_publication():
|
||||||
|
"""Отмечает все события для публикации"""
|
||||||
|
db = get_db()
|
||||||
|
try:
|
||||||
|
with db.conn.cursor() as cursor:
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE events
|
||||||
|
SET marked_to_publication = 1
|
||||||
|
WHERE marked_to_publication = 0
|
||||||
|
""")
|
||||||
|
count = cursor.rowcount
|
||||||
|
db.conn.commit()
|
||||||
|
client_ip = get_client_ip()
|
||||||
|
log_event(f"Отмечено для публикации: {count} событий, IP {client_ip}")
|
||||||
|
return jsonify({'success': True, 'count': count})
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({'success': False, 'error': str(e)}), 500
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
|
|
||||||
@bp.route('/api/events', methods=['POST'])
|
@bp.route('/api/events', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_add_event():
|
def api_add_event():
|
||||||
@@ -804,6 +826,28 @@ def api_toggle_publication(post_id):
|
|||||||
finally:
|
finally:
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
|
@bp.route('/api/posts/mark_all_for_publication', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def api_mark_all_posts_for_publication():
|
||||||
|
"""Отмечает все посты для публикации"""
|
||||||
|
db = get_db()
|
||||||
|
try:
|
||||||
|
with db.conn.cursor() as cursor:
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE posts
|
||||||
|
SET marked_to_publication = 1
|
||||||
|
WHERE marked_to_publication = 0
|
||||||
|
""")
|
||||||
|
count = cursor.rowcount
|
||||||
|
db.conn.commit()
|
||||||
|
client_ip = get_client_ip()
|
||||||
|
log_event(f"Отмечено для публикации: {count} постов, IP {client_ip}")
|
||||||
|
return jsonify({'success': True, 'count': count})
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({'success': False, 'error': str(e)}), 500
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
|
|
||||||
@bp.route('/api/posts', methods=['POST'])
|
@bp.route('/api/posts', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_add_post():
|
def api_add_post():
|
||||||
@@ -1408,6 +1452,28 @@ def api_toggle_category_publication(category_id):
|
|||||||
finally:
|
finally:
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
|
@bp.route('/api/categories/mark_all_for_publication', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def api_mark_all_categories_for_publication():
|
||||||
|
"""Отмечает все категории для публикации"""
|
||||||
|
db = get_db()
|
||||||
|
try:
|
||||||
|
with db.conn.cursor() as cursor:
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE categories
|
||||||
|
SET marked_for_publication = 1
|
||||||
|
WHERE marked_for_publication = 0
|
||||||
|
""")
|
||||||
|
count = cursor.rowcount
|
||||||
|
db.conn.commit()
|
||||||
|
client_ip = get_client_ip()
|
||||||
|
log_event(f"Отмечено для публикации: {count} площадок, IP {client_ip}")
|
||||||
|
return jsonify({'success': True, 'count': count})
|
||||||
|
except Exception as e:
|
||||||
|
return jsonify({'success': False, 'error': str(e)}), 500
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
|
|
||||||
@bp.route('/api/categories/<category_id>/events_count')
|
@bp.route('/api/categories/<category_id>/events_count')
|
||||||
@login_required
|
@login_required
|
||||||
def api_category_events_count(category_id):
|
def api_category_events_count(category_id):
|
||||||
|
|||||||
+103
-1
@@ -469,8 +469,11 @@
|
|||||||
<button class="btn btn-primary" id="rescan-btn">
|
<button class="btn btn-primary" id="rescan-btn">
|
||||||
<i class="fas fa-search me-1"></i> Рескан ВК
|
<i class="fas fa-search me-1"></i> Рескан ВК
|
||||||
</button>
|
</button>
|
||||||
|
<button class="btn btn-warning me-2" id="mark-all-posts-pub-btn">
|
||||||
|
<i class="fas fa-check-double me-1"></i> Все - для публикации
|
||||||
|
</button>
|
||||||
<button class="btn btn-success" id="publish-btn">
|
<button class="btn btn-success" id="publish-btn">
|
||||||
<i class="fas fa-paper-plane me-1"></i> Опубликовать
|
<i class="fas fa-paper-plane me-1"></i> Опубликовать все
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-info" id="generate-names-btn">
|
<button class="btn btn-info" id="generate-names-btn">
|
||||||
<i class="fas fa-font me-1"></i> Названия
|
<i class="fas fa-font me-1"></i> Названия
|
||||||
@@ -578,6 +581,9 @@
|
|||||||
<i class="fas fa-search me-1"></i> Рескан Зилант-сервера
|
<i class="fas fa-search me-1"></i> Рескан Зилант-сервера
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<button class="btn btn-warning me-2" id="mark-all-events-pub-btn">
|
||||||
|
<i class="fas fa-check-double me-1"></i> Все - для публикации
|
||||||
|
</button>
|
||||||
<button class="btn btn-success" id="publish-all-events-btn">
|
<button class="btn btn-success" id="publish-all-events-btn">
|
||||||
<i class="fas fa-paper-plane me-1"></i> Опубликовать все
|
<i class="fas fa-paper-plane me-1"></i> Опубликовать все
|
||||||
</button>
|
</button>
|
||||||
@@ -668,6 +674,9 @@
|
|||||||
<!-- Вкладка площадок -->
|
<!-- Вкладка площадок -->
|
||||||
<div class="tab-pane fade" id="categories-tab-pane" role="tabpanel" aria-labelledby="categories-tab" tabindex="0">
|
<div class="tab-pane fade" id="categories-tab-pane" role="tabpanel" aria-labelledby="categories-tab" tabindex="0">
|
||||||
<div class="top-action-buttons d-flex align-items-center">
|
<div class="top-action-buttons d-flex align-items-center">
|
||||||
|
<button class="btn btn-warning me-2" id="mark-all-categories-pub-btn">
|
||||||
|
<i class="fas fa-check-double me-1"></i> Все - для публикации
|
||||||
|
</button>
|
||||||
<button class="btn btn-success me-2" id="publish-all-categories-btn">
|
<button class="btn btn-success me-2" id="publish-all-categories-btn">
|
||||||
<i class="fas fa-paper-plane me-1"></i> Опубликовать все
|
<i class="fas fa-paper-plane me-1"></i> Опубликовать все
|
||||||
</button>
|
</button>
|
||||||
@@ -927,6 +936,7 @@
|
|||||||
loadPosts();
|
loadPosts();
|
||||||
// Добавляем обработчики для кнопок запуска скриптов
|
// Добавляем обработчики для кнопок запуска скриптов
|
||||||
document.getElementById('rescan-btn').addEventListener('click', runRescanScript);
|
document.getElementById('rescan-btn').addEventListener('click', runRescanScript);
|
||||||
|
document.getElementById('mark-all-posts-pub-btn').addEventListener('click', markAllPostsForPublication);
|
||||||
document.getElementById('publish-btn').addEventListener('click', runPublishScript);
|
document.getElementById('publish-btn').addEventListener('click', runPublishScript);
|
||||||
document.getElementById('generate-names-btn').addEventListener('click', generateAllShortnames);
|
document.getElementById('generate-names-btn').addEventListener('click', generateAllShortnames);
|
||||||
document.getElementById('refresh-events-btn').addEventListener('click', loadEvents);
|
document.getElementById('refresh-events-btn').addEventListener('click', loadEvents);
|
||||||
@@ -1008,8 +1018,13 @@
|
|||||||
zkRescanBtn.addEventListener('click', runZkRescan);
|
zkRescanBtn.addEventListener('click', runZkRescan);
|
||||||
}
|
}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
document.getElementById('mark-all-events-pub-btn').addEventListener('click', markAllEventsForPublication);
|
||||||
document.getElementById('publish-all-events-btn').addEventListener('click', publishAllEvents);
|
document.getElementById('publish-all-events-btn').addEventListener('click', publishAllEvents);
|
||||||
{% if g.workmode == 'VOLK' %}
|
{% if g.workmode == 'VOLK' %}
|
||||||
|
const markAllCategoriesPubBtn = document.getElementById('mark-all-categories-pub-btn');
|
||||||
|
if (markAllCategoriesPubBtn) {
|
||||||
|
markAllCategoriesPubBtn.addEventListener('click', markAllCategoriesForPublication);
|
||||||
|
}
|
||||||
const publishAllCategoriesBtn = document.getElementById('publish-all-categories-btn');
|
const publishAllCategoriesBtn = document.getElementById('publish-all-categories-btn');
|
||||||
if (publishAllCategoriesBtn) {
|
if (publishAllCategoriesBtn) {
|
||||||
publishAllCategoriesBtn.addEventListener('click', publishAllCategories);
|
publishAllCategoriesBtn.addEventListener('click', publishAllCategories);
|
||||||
@@ -1164,6 +1179,64 @@
|
|||||||
alert('Произошла ошибка при рескане ВОЛК');
|
alert('Произошла ошибка при рескане ВОЛК');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// Отметить все посты для публикации
|
||||||
|
function markAllPostsForPublication() {
|
||||||
|
if (!confirm('Вы уверены, что хотите отметить все посты для публикации?')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showProcessingMessage("Отметка всех постов для публикации...");
|
||||||
|
fetch(`${PREFIX}/api/posts/mark_all_for_publication`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Requested-With': 'XMLHttpRequest'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
if (data.success) {
|
||||||
|
alert(`Отмечено для публикации: ${data.count || 0} постов`);
|
||||||
|
loadPosts();
|
||||||
|
} else {
|
||||||
|
alert('Ошибка: ' + (data.error || 'неизвестная ошибка'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
console.error('Ошибка:', error);
|
||||||
|
alert('Произошла ошибка при отметке постов');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// Отметить все события для публикации
|
||||||
|
function markAllEventsForPublication() {
|
||||||
|
if (!confirm('Вы уверены, что хотите отметить все события для публикации?')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showProcessingMessage("Отметка всех событий для публикации...");
|
||||||
|
fetch(`${PREFIX}/api/events/mark_all_for_publication`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Requested-With': 'XMLHttpRequest'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
if (data.success) {
|
||||||
|
alert(`Отмечено для публикации: ${data.count || 0} событий`);
|
||||||
|
loadEvents();
|
||||||
|
} else {
|
||||||
|
alert('Ошибка: ' + (data.error || 'неизвестная ошибка'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
console.error('Ошибка:', error);
|
||||||
|
alert('Произошла ошибка при отметке событий');
|
||||||
|
});
|
||||||
|
}
|
||||||
// Функция для публикации всех событий
|
// Функция для публикации всех событий
|
||||||
function publishAllEvents() {
|
function publishAllEvents() {
|
||||||
const currentEventId = selectedEventId;
|
const currentEventId = selectedEventId;
|
||||||
@@ -2272,6 +2345,35 @@
|
|||||||
alert('Произошла ошибка при публикации площадки');
|
alert('Произошла ошибка при публикации площадки');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Отметить все категории для публикации
|
||||||
|
function markAllCategoriesForPublication() {
|
||||||
|
if (!confirm('Вы уверены, что хотите отметить все площадки для публикации?')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showProcessingMessage("Отметка всех площадок для публикации...");
|
||||||
|
fetch(`${PREFIX}/api/categories/mark_all_for_publication`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-Requested-With': 'XMLHttpRequest'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
if (data.success) {
|
||||||
|
alert(`Отмечено для публикации: ${data.count || 0} площадок`);
|
||||||
|
loadCategoriesList();
|
||||||
|
} else {
|
||||||
|
alert('Ошибка: ' + (data.error || 'неизвестная ошибка'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
hideProcessingMessage();
|
||||||
|
console.error('Ошибка:', error);
|
||||||
|
alert('Произошла ошибка при отметке площадок');
|
||||||
|
});
|
||||||
|
}
|
||||||
// Публикация всех категорий
|
// Публикация всех категорий
|
||||||
function publishAllCategories() {
|
function publishAllCategories() {
|
||||||
const currentCategoryId = selectedCategoryId;
|
const currentCategoryId = selectedCategoryId;
|
||||||
|
|||||||
Reference in New Issue
Block a user