Improved supergroups support
Bots with commands New has rights check
This commit is contained in:
parent
2bc6df6937
commit
e02b9fd2eb
@ -2179,7 +2179,7 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var needMentions = peerBots.length > 1;
|
var needMentions = peerID < 0;
|
||||||
var commandsList = [];
|
var commandsList = [];
|
||||||
var commandsIndex = SearchIndexManager.createIndex();
|
var commandsIndex = SearchIndexManager.createIndex();
|
||||||
|
|
||||||
@ -3304,6 +3304,10 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.hasRights = function (action) {
|
||||||
|
return AppChatsManager.hasRights($scope.chatID, action);
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
.controller('ChannelModalController', function ($scope, $timeout, $rootScope, $modal, AppUsersManager, AppChatsManager, AppProfileManager, AppPhotosManager, MtpApiManager, MtpApiFileManager, NotificationsManager, AppMessagesManager, AppPeersManager, ApiUpdatesManager, ContactsSelectService, ErrorService) {
|
.controller('ChannelModalController', function ($scope, $timeout, $rootScope, $modal, AppUsersManager, AppChatsManager, AppProfileManager, AppPhotosManager, MtpApiManager, MtpApiFileManager, NotificationsManager, AppMessagesManager, AppPeersManager, ApiUpdatesManager, ContactsSelectService, ErrorService) {
|
||||||
@ -3452,6 +3456,10 @@ angular.module('myApp.controllers', ['myApp.i18n'])
|
|||||||
$rootScope.$broadcast('history_focus', {peerString: $scope.chatFull.peerString});
|
$rootScope.$broadcast('history_focus', {peerString: $scope.chatFull.peerString});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$scope.hasRights = function (action) {
|
||||||
|
return AppChatsManager.hasRights($scope.chatID, action);
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
.controller('SettingsModalController', function ($rootScope, $scope, $timeout, $modal, AppUsersManager, AppChatsManager, AppPhotosManager, MtpApiManager, Storage, NotificationsManager, MtpApiFileManager, PasswordManager, ApiUpdatesManager, ChangelogNotifyService, LayoutSwitchService, AppRuntimeManager, ErrorService, _) {
|
.controller('SettingsModalController', function ($rootScope, $scope, $timeout, $modal, AppUsersManager, AppChatsManager, AppPhotosManager, MtpApiManager, Storage, NotificationsManager, MtpApiFileManager, PasswordManager, ApiUpdatesManager, ChangelogNotifyService, LayoutSwitchService, AppRuntimeManager, ErrorService, _) {
|
||||||
|
@ -2621,18 +2621,20 @@ angular.module('myApp.directives', ['myApp.filters'])
|
|||||||
var update = function () {
|
var update = function () {
|
||||||
var html = allPluralize(participantsCount);
|
var html = allPluralize(participantsCount);
|
||||||
var onlineCount = 0;
|
var onlineCount = 0;
|
||||||
var wasMe = false;
|
if (!AppChatsManager.isChannel(chatID)) {
|
||||||
angular.forEach(participants, function (t, userID) {
|
var wasMe = false;
|
||||||
var user = AppUsersManager.getUser(userID);
|
angular.forEach(participants, function (t, userID) {
|
||||||
if (user.status && user.status._ == 'userStatusOnline') {
|
var user = AppUsersManager.getUser(userID);
|
||||||
if (user.id == myID) {
|
if (user.status && user.status._ == 'userStatusOnline') {
|
||||||
wasMe = true;
|
if (user.id == myID) {
|
||||||
|
wasMe = true;
|
||||||
|
}
|
||||||
|
onlineCount++;
|
||||||
}
|
}
|
||||||
onlineCount++;
|
});
|
||||||
|
if (onlineCount > 1 || onlineCount == 1 && !wasMe) {
|
||||||
|
html = _('group_modal_participants', {total: html, online: onlinePluralize(onlineCount)});
|
||||||
}
|
}
|
||||||
});
|
|
||||||
if (onlineCount > 1 || onlineCount == 1 && !wasMe) {
|
|
||||||
html = _('group_modal_participants', {total: html, online: onlinePluralize(onlineCount)});
|
|
||||||
}
|
}
|
||||||
if (!onlineCount && !participantsCount) {
|
if (!onlineCount && !participantsCount) {
|
||||||
html = '';
|
html = '';
|
||||||
|
@ -613,12 +613,37 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
chat.pFlags.left) {
|
chat.pFlags.left) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isChannel(id) && action == 'send') {
|
if (chat.pFlags.creator) {
|
||||||
if (!chat.pFlags.megagroup &&
|
return true;
|
||||||
!chat.pFlags.creator &&
|
}
|
||||||
!chat.pFlags.editor) {
|
|
||||||
return false;
|
switch (action) {
|
||||||
}
|
case 'send':
|
||||||
|
if (chat._ == 'channel' &&
|
||||||
|
!chat.pFlags.megagroup &&
|
||||||
|
!chat.pFlags.editor) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'edit_title':
|
||||||
|
case 'edit_photo':
|
||||||
|
case 'invite':
|
||||||
|
if (chat._ == 'channel') {
|
||||||
|
if (chat.pFlags.megagroup) {
|
||||||
|
if (!chat.pFlags.editor) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (chat.pFlags.admins_enabled &&
|
||||||
|
!chat.pFlags.editor) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1003,7 +1028,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
function getPeerBots (peerID) {
|
function getPeerBots (peerID) {
|
||||||
var peerBots = [];
|
var peerBots = [];
|
||||||
if (peerID >= 0 && !AppUsersManager.isBot(peerID) ||
|
if (peerID >= 0 && !AppUsersManager.isBot(peerID) ||
|
||||||
AppPeersManager.isChannel(peerID)) {
|
(AppPeersManager.isChannel(peerID) && !AppPeersManager.isMegagroup(peerID))) {
|
||||||
return $q.when(peerBots);
|
return $q.when(peerBots);
|
||||||
}
|
}
|
||||||
if (peerID >= 0) {
|
if (peerID >= 0) {
|
||||||
@ -1080,7 +1105,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
channel: AppChatsManager.getChannelInput(id),
|
channel: AppChatsManager.getChannelInput(id),
|
||||||
filter: {_: 'channelParticipantsRecent'},
|
filter: {_: 'channelParticipantsRecent'},
|
||||||
offset: 0,
|
offset: 0,
|
||||||
limit: 200
|
limit: AppChatsManager.isMegagroup(id) ? 50 : 200
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
AppUsersManager.saveApiUsers(result.users);
|
AppUsersManager.saveApiUsers(result.users);
|
||||||
return result.participants;
|
return result.participants;
|
||||||
@ -1107,10 +1132,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
}
|
}
|
||||||
NotificationsManager.savePeerSettings(-id, fullChannel.notify_settings);
|
NotificationsManager.savePeerSettings(-id, fullChannel.notify_settings);
|
||||||
var participantsPromise;
|
var participantsPromise;
|
||||||
if ((fullChannel.flags & 8) ||
|
if (fullChannel.flags & 8) {
|
||||||
chat.pFlags.creator ||
|
|
||||||
chat.pFlags.editor ||
|
|
||||||
chat.pFlags.moderator) {
|
|
||||||
participantsPromise = getChannelParticipants(id).then(function (participants) {
|
participantsPromise = getChannelParticipants(id).then(function (participants) {
|
||||||
delete chatFullPromises[id];
|
delete chatFullPromises[id];
|
||||||
fullChannel.participants = {
|
fullChannel.participants = {
|
||||||
@ -2729,6 +2751,9 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils'])
|
|||||||
channelID = update.channel_id;
|
channelID = update.channel_id;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (channelID && !AppChatsManager.hasChat(channelID)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var curState = channelID ? getChannelState(channelID, update.pts) : updatesState;
|
var curState = channelID ? getChannelState(channelID, update.pts) : updatesState;
|
||||||
|
|
||||||
// console.log('process', channelID, curState, update);
|
// console.log('process', channelID, curState, update);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="md_modal_title_wrap">
|
<div class="md_modal_title_wrap">
|
||||||
<div class="md_modal_actions_wrap clearfix">
|
<div class="md_modal_actions_wrap clearfix">
|
||||||
<a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>
|
<a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>
|
||||||
<a class="md_modal_action" ng-if="chatFull.chat.pFlags.creator" ng-click="editChannel()" my-i18n="modal_edit"></a>
|
<a class="md_modal_action" ng-if="hasRights('edit_title')" ng-click="editChannel()" my-i18n="modal_edit"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="md_modal_title" my-i18n="channel_modal_info"></div>
|
<div class="md_modal_title" my-i18n="channel_modal_info"></div>
|
||||||
</div>
|
</div>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="md_modal_split_actions_wrap">
|
<div class="md_modal_split_actions_wrap">
|
||||||
<div class="md_modal_split_actions" ng-switch="chatFull.chat.pFlags.creator">
|
<div class="md_modal_split_actions" ng-switch="hasRights('edit_photo')">
|
||||||
<div ng-switch-when="true" class="md_modal_split_action">
|
<div ng-switch-when="true" class="md_modal_split_action">
|
||||||
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" title="{{'group_modal_update_photo' | i18n}}" />
|
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" title="{{'group_modal_update_photo' | i18n}}" />
|
||||||
<i class="md_modal_split_action_camera"></i>
|
<i class="md_modal_split_action_camera"></i>
|
||||||
@ -71,7 +71,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="chatFull.chat.pFlags.creator || chatFull.chat.pFlags.left">
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="hasRights('invite') || chatFull.chat.pFlags.left">
|
||||||
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
||||||
|
|
||||||
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
||||||
@ -115,7 +115,7 @@
|
|||||||
|
|
||||||
<div class="md_modal_section_peers_wrap">
|
<div class="md_modal_section_peers_wrap">
|
||||||
|
|
||||||
<div class="md_modal_list_peer_wrap clearfix" ng-repeat="participant in chatFull.participants.participants | orderBy:'-user.sortStatus'">
|
<div class="md_modal_list_peer_wrap clearfix" ng-repeat="participant in chatFull.participants.participants">
|
||||||
|
|
||||||
<a ng-if="participant.canLeave" ng-click="leaveChannel()" class="md_modal_list_peer_action pull-right" my-i18n="group_modal_menu_leave"></a>
|
<a ng-if="participant.canLeave" ng-click="leaveChannel()" class="md_modal_list_peer_action pull-right" my-i18n="group_modal_menu_leave"></a>
|
||||||
<a ng-if="participant.canKick" ng-click="kickFromChannel(participant.user_id)" class="md_modal_list_peer_action pull-right" my-i18n="group_modal_members_kick"></a>
|
<a ng-if="participant.canKick" ng-click="kickFromChannel(participant.user_id)" class="md_modal_list_peer_action pull-right" my-i18n="group_modal_members_kick"></a>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="md_modal_title_wrap">
|
<div class="md_modal_title_wrap">
|
||||||
<div class="md_modal_actions_wrap clearfix">
|
<div class="md_modal_actions_wrap clearfix">
|
||||||
<a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>
|
<a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>
|
||||||
<a class="md_modal_action" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left" ng-click="editTitle()" my-i18n="modal_edit"></a>
|
<a class="md_modal_action" ng-if="hasRights('edit_title')" ng-click="editTitle()" my-i18n="modal_edit"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="md_modal_title" my-i18n="group_modal_info"></div>
|
<div class="md_modal_title" my-i18n="group_modal_info"></div>
|
||||||
</div>
|
</div>
|
||||||
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
<div class="md_modal_sections clearfix">
|
<div class="md_modal_sections clearfix">
|
||||||
|
|
||||||
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="chatFull.chat._ != 'chatForbidden'">
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="hasRights('invite') || chatFull.chat.pFlags.left">
|
||||||
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
<i class="md_modal_section_icon md_modal_section_icon_person"></i>
|
||||||
|
|
||||||
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
<div class="md_modal_section_link_wrap" ng-switch="chatFull.chat.pFlags.left">
|
||||||
@ -52,7 +52,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.chat.pFlags.creator">
|
<div class="md_modal_iconed_section_wrap md_modal_iconed_section_link" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.chat.pFlags.creator">
|
||||||
<!-- <i class="md_modal_section_icon md_modal_section_icon_more"></i> -->
|
|
||||||
|
|
||||||
<div class="md_modal_section_link_wrap">
|
<div class="md_modal_section_link_wrap">
|
||||||
<a class="md_modal_section_link" ng-click="inviteViaLink()" my-i18n="group_modal_menu_share_link"></a>
|
<a class="md_modal_section_link" ng-click="inviteViaLink()" my-i18n="group_modal_menu_share_link"></a>
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li ng-if="chatFull.chat.pFlags.creator">
|
<li ng-if="hasRights('edit_photo')">
|
||||||
<a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>
|
<a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="chatFull.chat.pFlags.creator">
|
<li ng-if="hasRights('edit_title')">
|
||||||
<a ng-click="editChannel()" my-i18n="modal_edit"></a>
|
<a ng-click="editChannel()" my-i18n="modal_edit"></a>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="chatFull.chat.pFlags.creator">
|
<li ng-if="chatFull.chat.pFlags.creator">
|
||||||
@ -75,17 +75,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat.pFlags.creator">
|
<div class="mobile_modal_action_wrap" ng-if="hasRights('invite')">
|
||||||
<a class="mobile_modal_action" ng-click="inviteToChannel()" my-i18n="channel_modal_add_member"></a>
|
<a class="mobile_modal_action" ng-click="inviteToChannel()" my-i18n="channel_modal_add_member"></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat.pFlags.left">
|
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat.pFlags.left">
|
||||||
<a class="mobile_modal_action" ng-click="joinChannel()" my-i18n="channel_modal_join"></a>
|
<a class="mobile_modal_action" ng-click="joinChannel()" my-i18n="channel_modal_join"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ == 'chatForbidden'">
|
<div class="mobile_modal_action_wrap" ng-if="hasRights('edit_photo') && !photo.updating">
|
||||||
<a class="mobile_modal_action" ng-click="flushHistory()" my-i18n="group_modal_return"></a>
|
|
||||||
</div>
|
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat.pFlags.creator && !photo.updating">
|
|
||||||
<span class="mobile_modal_action mobile_modal_upload_action">
|
<span class="mobile_modal_action mobile_modal_upload_action">
|
||||||
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" />
|
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" />
|
||||||
<my-i18n="group_modal_update_photo"></my-i18n>
|
<my-i18n="group_modal_update_photo"></my-i18n>
|
||||||
@ -111,7 +108,7 @@
|
|||||||
|
|
||||||
<div class="chat_modal_members_list">
|
<div class="chat_modal_members_list">
|
||||||
|
|
||||||
<div class="chat_modal_participant_wrap clearfix" ng-repeat="participant in chatFull.participants.participants | orderBy:'-user.sortStatus'">
|
<div class="chat_modal_participant_wrap clearfix" ng-repeat="participant in chatFull.participants.participants">
|
||||||
<a ng-if="participant.canKick" ng-click="kickFromChannel(participant.user_id)" class="chat_modal_participant_kick pull-right" my-i18n="group_modal_members_kick"></a>
|
<a ng-if="participant.canKick" ng-click="kickFromChannel(participant.user_id)" class="chat_modal_participant_kick pull-right" my-i18n="group_modal_members_kick"></a>
|
||||||
<a ng-if="participant.canLeave" ng-click="leaveChannel()" class="chat_modal_participant_kick pull-right" my-i18n="group_modal_menu_leave"></a>
|
<a ng-if="participant.canLeave" ng-click="leaveChannel()" class="chat_modal_participant_kick pull-right" my-i18n="group_modal_menu_leave"></a>
|
||||||
|
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li ng-if="chatFull.thumb.location" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left">
|
<li ng-if="chatFull.thumb.location" ng-if="hasRights('edit_title')">
|
||||||
<a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>
|
<a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>
|
||||||
</li>
|
</li>
|
||||||
<li ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left">
|
<li ng-if="hasRights('edit_title')">
|
||||||
<a ng-click="editTitle()" my-i18n="group_modal_menu_edit_group"></a>
|
<a ng-click="editTitle()" my-i18n="group_modal_menu_edit_group"></a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mobile_modal_action_wrap" ng-if="!chatFull.chat.pFlags.left && chatFull.participants.participants.length">
|
<div class="mobile_modal_action_wrap" ng-if="hasRights('invite') && chatFull.participants.participants.length">
|
||||||
<a class="mobile_modal_action" ng-click="inviteToGroup()" my-i18n="group_modal_add_member"></a>
|
<a class="mobile_modal_action" ng-click="inviteToGroup()" my-i18n="group_modal_add_member"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.chat.pFlags.creator">
|
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && chatFull.chat.pFlags.creator">
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ == 'chatForbidden'">
|
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ == 'chatForbidden'">
|
||||||
<a class="mobile_modal_action" ng-click="flushHistory()" my-i18n="group_modal_return"></a>
|
<a class="mobile_modal_action" ng-click="flushHistory()" my-i18n="group_modal_return"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="mobile_modal_action_wrap" ng-if="chatFull.chat._ != 'chatForbidden' && !chatFull.chat.pFlags.left && !photo.updating">
|
<div class="mobile_modal_action_wrap" ng-if="hasRights('edit_photo') && !photo.updating">
|
||||||
<span class="mobile_modal_action mobile_modal_upload_action">
|
<span class="mobile_modal_action mobile_modal_upload_action">
|
||||||
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" />
|
<input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" />
|
||||||
<my-i18n="group_modal_update_photo"></my-i18n>
|
<my-i18n="group_modal_update_photo"></my-i18n>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user