cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Anonymous
Not applicable

Stop a flow re-triggering itself on sharepoint item created/modified trigger - modified<utcnow ?

If anyone can help i'd much appreciate it. 

I have a flow which copies one sharepoint field in a list to another in that list. (It copies a start date + duration date to a 'finish date' field to enable gantt chart view in the SP list).

 

This flow seems to re-trigger tiself and run over and over. To stop this i thought about putting in a condition of last modified < now(- 1 minute). This would stop it running if the item was modified in the last minute. 

 

I got as far as this... but its not workign. Any suggestions?

 

@less(triggerBody()?['Modified'], addMinutes(utcNow(), -1)flowscreen.PNG)

 

Thanks again,

Shaun

 

15 REPLIES 15
Pieter_Veenstra
Community Champion
Community Champion

HI @Anonymous,

 

You are looking for option 3 in this post: https://veenstra.me.uk/2018/02/21/microsoft-flow-are-you-running-out-of-runs-with-microsoft-flow/

 

Or maybe even a 5th option ( not in the post) where you create a state machine using a switch and at the beginning of each branch you update the item with an 'in progress' status and at the end of each branch a 'completed'. Flows will still retrigger but at least you can then condition the reruns out.

 

v-yuazh-msft
Community Support
Community Support

Hi @ Shauniekent,

 

Could you please share a screenshot of the configuration of your sharepoint list?

 

I would offer you a workaround to prevent the retrigger of the flow and you could take a try to add a “Yes/No” type column in the list to record whether the update of an item is caused by flow.

I have created a  sharepoint list as below:

1.png

Note:

The “start date” column ,”duration date” column and “finish date” column are all date type column, the “modified by flow” column is a “Yes/No” type column and the defaults value of this column is “No”.

If someone update the item, he should keep the “modified by flow”  be “No”, and each time the flow runs, the “Update item” action of the flow would always update this column to “Yes”.

You could create a flow as below:

2.png

You could fill in the  expression in the condition as below:

@equals(triggerBody()?['modified_x0020_by_x0020_flow'], false)

Note: The workaround would help you prevent the retrigger of the flow make sure you have set the “modified by flow” column to “Yes”, and you could fill in the “finish date” as you needs.

 

When an item is created or modified in the list and the “modified by flow” column is “No”, the flow would run successfully as below:

 3.png

 

 

Regards,
Alice Zhang

Anonymous
Not applicable

Thanks fro your response, i do not understand how tracking a status during the flow helps prevent a re-triggering?

The list item is modified, the flow updates the end date field, the list iem has been modified, the flow updates.

I think your example may be to prevent a flow re-triggering before it has been completed.

 

Anonymous
Not applicable

Thanks fro your response - however it's not appropriate for users to complete a separate field reporting whether it was they or  aflow that last updated the item.

 

Is there no way to ask a flow to NOT trigger if the last modified date/time of a list item is within the last minute (this is what i was attempting)?

 

thanks,

Shaun

Hi @Anonymous, 

 

this wouldn't be a field for users to fill in. It would only be updated by the Flow itself. 

tolppa
Regular Visitor

This is a bug.

 

Self triggering flow may be obvious for programmer but end users should never accept this behaviour.  End-user do see things like this: 1) Flow should start when item is added or modified. 2) Flow should update a field value based on where condition x. 3) Flow should end. 

 

Certainly you understand the  ??? moment when infinite loop happens. Yes. Currently condition is needed but this make flows much harder to create. Flow should never trigger itself and this should done using something like "trigger self" -method.

Dorul
Responsive Resident
Responsive Resident

And what to do when ppl actually do want the flow to retrigger itself, when an item is modified?

Whatever you do, remember that the flow just does what you set it to do, not what you want it to do.

 





Did I answer your question? Mark my post as a solution!

Proud to be a Flownaut!





rohitP
New Member

Hi,

I did a workaround by creating new List 'My flow history' and adding item when flow triggers for first time.

In the last step of my flow, i delet the newly created item in flow history, so for the next valid run, the flow should work as expected.

 

Let me know if it works.

 

Step 1 check item in the flow list

step1.png

 

step2.png

Step 2 Create item if not exists 

Step 3 Delete item from flow history list to allow running of flow for the next time

step3.png

 

 

 

 

 

automaton
Advocate III
Advocate III

Not sure if you ever got to the bottom of this but I'm using the following method to check whether the last update to a document was made by the flow and if so, exit without re-running. It's still a shame that the flow runs twice but at least it won't execute more than this in the absence of something more suitable from microsoft.

 

It requires using the SharePoint REST API to check out / check in the document or list item and provide a check in comment on check in. This comment is then used to verify that the last modification (version) was made by the flow and not by a user.

 

 

I found it reliable and it removes the need to use timeframes which may not be dependable. Let me know if you would like more information on this approach and I can provide more detail.

 

 

@automaton 

Hi, I'm still struggling with similar problem. My flow triggers on "created or modified" and then does an update of hte SharePoint list item... which is a "modification" hence the same flow is triggered again.. and again.. and again....

 

Would you please share details on the REST API solution you refer to?

 

Thank you in advance

 

Regards

Charles

 

Hi @Charles-v-D,

 

It's not exactly straight forward but it's been working very well in my scenario, there are a couple of caveats:

 

1. Check in / Check out is enabled on the document library. 

2. You will always get two flow runs on any modification, the first flow run which does the work, and the second run which checks that the last run was the flow (not a manual modification) and stops the chain reaction.

 

The topline process is this...

1. Create a do until loop to check that the document has been checked in following modification by the user. A SharePoint HTTP request action with the following details is used to get the check out status of the document.

 

CHECKOUTTYPE SHAREPOINT HTTP REQUEST:

METHOD: Post

URI (Excapes any ''s in the filename):

 

_api/Web/GetFileByServerRelativeUrl('/sites/<sitepath>/@{body('Get_file_properties_2')?['{Path}']}@{replace(body('Get_file_properties_2')?['{FilenameWithExtension}'],'''','''''')}')/CheckOutType

HEADERS: accept : application/json; odata=verbose

 

 

2. Check the latest check in comment using A SharePoint HTTP request action and store it in a CheckOutStatus variable. This is the bit where the flow either terminates without doing anything if the latest check in comment was made by the workflow.

 

CHECKINCOMMENT SHAREPOINT HTTP REQUEST:

METHOD: Post

URI (Excapes any ''s in the filename):

 

_api/Web/GetFileByServerRelativeUrl('/sites/<sitepath>/@{body('Get_file_properties_2')?['{Path}']}@{replace(body('Get_file_properties_2')?['{FilenameWithExtension}'],'''','''''')}')/CheckInComment

HEADERS: Not required.

 

 

3. Check the document out using A SharePoint HTTP request action if the latest checkin wasn't a workflow, otherwise do nothing.

 

CONDITION: 

 

@and(not(equals(body('HTTP_SharePoint_Get_CheckInComment_Request')['d']['CheckInComment'], 'Successful checkin by microsoft flow')),not(equals(variables('CheckOutStatus'), 0)))

 

 

CHECKOUT SHAREPOINT HTTP REQUEST:

METHOD: Post

URI (Excapes any ''s in the filename):

_api/web/GetFileByServerRelativeUrl('/sites/<sitepath>/@{body('Get_file_properties_2')?['{Path}']}@{replace(body('Get_file_properties_2')?['{FilenameWithExtension}'],'''','''''')}')/Checkout()

HEADERS: Not required.

 

4. After doing the updates you require, check the document back in using a SharePoint HTTP request action with a specific check in comment that identifies that the modifications have been made by the workflow - "Successful checkin by microsoft flow". This comment is then referenced in step 2 in the subsequent flow run to stop the chain reaction.

 

CHECKIN SHAREPOINT HTTP REQUEST:

METHOD: Post

URI (In this example I've actually renamed the file in my flow so the filepath has changed):

_api/web/GetFileByServerRelativeUrl('/sites/<sitepath>/@{outputs('Compose_File_Reference')}')/CheckIn(comment='Successful checkin by microsoft flow',checkintype=0)

HEADERS: Not required.

 

I hope this makes sense, I also have loops to retry some of these requests, such as in 1 when the file is still checked out to the end user of if they fail for some reason, and I try to gracefully handle any errors, although we don't see many at all to be honest.

 

I'm pretty new to communicating this stuff so hope it's clear and helps in some way. Eventually I hope microsoft will implement a method of easily preventing flows from triggering flows on sharepoint items without using multiple flow runs.

Hi @automaton ,

 

I do understand your general description of flow 1 doing the work and flow 2 terminating everything.. but the whole bit about checkin and the calls are totally new for me (I'm rather new to Flow)...

In my case it is not a document libray but a SharePoint list so I'm not sure if checkout etc is applicable...

 

Any ideas?

 

Regards

Charles

 

@Charles-v-D unfortunately this problem of self-triggering persists and microsoft haven't released an elegant solution yet as far as I'm aware.

 

Couple of potential alternative options for you to explore depending on your requirements:

1. If time is not of the essence following modification, run a daily flow that picks up all records that have been modified in the past day and run the flow on all of them in a batch process. Or even make this run several times a day if you need it more frequent. This can be a very efficient use of flows but has it's obvious limitations.

2. Use a button to trigger a flow on a specific row. Users can do this ootb by selecting the row and using the flow menu in the list, or alternatively use some nifty techniques like this to run a flow on an item by clicking a hyperlinked field on that item:

https://wonderlaura.com/2018/07/18/button-in-sharepoint-list-to-trigger-microsoft-flow/

 

Sorry I can't suggest a magic fix. 

Hi @automaton 

 

I have selected the option to have my users select two flows sequencially. The in-table function made that user-friendly. Thanks for your help!!

 

xx.JPG

 

Dorul, this should be an easy thing for microsoft to implement. Set a switch on the trigger settings where you can either allow or turn off self triggering. Nintex are supporting this and I guess The flow team should look a lot on how they are doing things. It's a must if Power Automate should be a everybody tool. Personally I'm only happy it's still a bit tricky to build more complex flows. Then I still have something to do:)

Helpful resources

Announcements

February 2024 Community Newsletter

Welcome to our February Newsletter, where we highlight the latest news, product releases, upcoming events, and the amazing work of our outstanding Community members. If you're new to the Community, please make sure to follow the latest News & Announcements and check out the Community on LinkedIn as well! It's the best way to stay up-to-date in 2024 with all the news from across Microsoft Power Platform and beyond. Are you ready to "Leap" in to all we've got to share today?   COMMUNITY HIGHLIGHTS Check out the most active community members of the last month! These hardworking members post regularly, answer questions, kudos, and provide top solutions in their communities. We are so thankful for all your great work in January, and we can't wait to see who will be our most active members next month!   Power AppsPower AutomateCopilot StudioPower PagesWarrenBelzWarrenBelzPstork1saudali_25LaurensMPstork1stephenrobertLucas001AARON_ClbendincpaytonSurendran_RANBNived_NambiarMariamPaulachanNikhil2JmanriqueriosANBJupyter123rodger-stmmbr1606Agniusstevesmith27mandelaPhineastrice602AnnaMoyalanOOlashynBCLS776grantjenkinsExpiscornovusJcookSpongYeAARON_CManishSolankiapangelesPstork1ManishSolankiSanju1Fubar   There was a lot of activity in the Community in February! Did you miss anything? Here are just a few of the announcements and updates we shared: Super User Season 1 is HereFebruary 2024 User Group Update: Welcoming New GroupsCelebrating a New Season of Super UsersCheck out the February 2024 Dynamics NewsletterAnnouncing Copilot Cookbook GallerySuper User of the Month D. PoggemannTuesday Tips: Getting Started in the Community The best way to not miss them is to make sure you're subscribed to your community's News & Announcements. Subscribe today and don't miss anything next month! Power Apps News, Power Automate News, Copilot Studio News, Power Pages News Copilot Cookbook for Power Apps The all-new Copilot Cookbook is now available in the #PowerApps Community - offering a wide array of best practices on how to use Microsoft Copilot to develop and create in Power Apps.   The #CopilotCookbook is your new go-to resource when you need inspiration (or when you're stuck!) and aren't sure how to best partner with Copilot. So, whether you're looking for the best prompts or just want to know about responsible AI use, you can visit the Copilot Cookbook for regular, high-quality content that you can rely on. Our team will be reviewing posts using the new "Copilot " label to ensure we highlight and amplify the most relevant and recent content, so you're assured of high-quality content every time you visit. If you share a post that gets featured in the curated gallery, you'll get a PM in the Community to let you know!   The curated gallery is now ready for you to experience, so click the image below and check out the all-new Copilot Cookbook for Power Apps today. We can't wait to see what you "cook" up! 👨🍳       Power Platform Dev Weekly Celebrate 200th Episode Congratulations to Danish Naglekar, Anwesha Sharma, Matt Beard, Mark Carrington Carl Cookson and the team, as they celebrated the 200th episode of Power Platform Dev Weekly in February!   Click the image below to check out this landmark episode, featuring content from the likes of Nati Turtledove, Matthew Devaney, Inogic, Mohamed Ashiq Faleel, Mike Hartley, Nishant Rana, James Yumnam, Carl Cookson, Yannick Reekmans, Deepesh Somani, and many more.       "Get Started With" Power Platform Shorts Series This month we launched our new 'Get Started With' series on YouTube - a selection of sweet snapshots to keep you in the loop with all the latest Copilot trends that you can try out through advice at Microsoft Learn. Click the image below to check out the entire playlist so far, and don't forget to subscribe to our YouTube channel for all the latest updates.     UPCOMING EVENTS Canadian Power Platform Summit - Vancouver - 16th March 2024 Check out the first ever Canadian Power Platform Summit, which takes place at Microsoft Vancouver office on Saturday 16th March 2024! Get ready to immerse yourself in the ultimate Power Platform experience at the #CPPS24. This event is tailored for makers, developers, students and tech enthusiasts eager to explore the depths of Power Platform technologies. With sessions ranging from beginner-friendly to advanced-intermediate, this event offers a diverse range of insights for attendees of all levels.   There's a great range of speakers, including the likes of Lisa Crosbie, Matthew Devaney, Ulrikke Akerbæk, Oleksandr Olashyn, Mark Smith, Jake Harvey, Manju Gurjar, Adam Tobias, Mats Necker, Natasza Kosakowska, Linn Zaw Win, Salim Adamon, Tomas Prokop, Maxim Nikonov, and many more.   Great work by Chris Piasecki, Éric Sauvé, Nick Doelman, Scott Durow, Victor Dantas and the team for putting this amazing event together. So, whether you're a seasoned pro or a rising star, click the image below to join the Microsoft Community in Canada to gain practical insights, discover real-world examples, and take away actionable skills to boost your expertise.   Business Applications Launch Event - Virtual - 10th April 2024 Registration is now open for the Microsoft Business Applications Launch event which kicks off at 9am PST on Wednesday 10th April 2024. Join Microsoft product leaders and engineers for an in-depth look at the latest news and AI capabilities in Power Platform and #Dynamics365, featuring the likes of Charles Lamanna, Sangya Singh, Julie Strauss, Donald Kossmann, Lori Lamkin, Georg Glantschnig, Mala Anand, Jeff Comstock, and Mike Morton.     Microsoft Fabric - Las Vegas - 26-28th March 2024 Exciting times ahead for the inaugural #MicrosoftFabric Community Conference on March 26-28 at the MGM Grand in Las Vegas! The conference will cover all the latest in analytics, AI, databases, and governance across 150+ sessions, with guest speakers including Arun Ulag, Amir Netz, Jessica Hawk, Eric Boyd, Kim Manis, Adam Saxton, Patrick LeBlanc, Bob Ward, Wangui McKelvey, Wee Hyong T., Justyna Lucznik, Priya Sathy, Mehrnoosh Sameki, Rachel Shepard, Karthik Ravindran, Jason Himmelstein, and many more.   On-site there will be a special Community Lounge, interactive learning labs, plus you'll be able to 'Ask the Experts' all your questions to get help from data, analytics, and AI specialists, including community members and the Fabric Customer Advisory Team. Click the image below to find out more about the ultimate learning event for Microsoft Fabric!   If you'd like to learn how the latest advances in AI and how #MicrosoftCopilot can help you streamline your processes, click the image below to register today!       LATEST COMMUNITY BLOG ARTICLES Power Apps Community Blog Power Automate Community Blog Copilot Studio Community Blog Power Pages Community Blog Check out 'Using the Community' for more helpful tips and information: Power Apps, Power Automate, Copilot Studio, Power Pages

Microsoft Power Up program unveils new curriculum and more

  New engaging and cohesive Power Up curriculum The Microsoft Power Up Program – a self-paced upskilling program, launched in 2022 to help non-technical professionals gain marketable skills using the Microsoft Power Platform – takes learning to the next level with a cohesive video-based curriculum that spans only seven weeks. Recognizing the demand for multimedia content, we partnered with Microsoft MVPs Rory Neary and Charlie Phipps to create engaging videos that not only simplify complex concepts, but also make the learner experience more dynamic and immersive. Each course follows the same business through real-world scenarios with demos and hands-on exercises for learners to gain skills and build solutions using Power Apps, Power Automate and Power BI. This structured approach not only enhances comprehension but also equips learners with tangible skills that can be applied immediately in their professional endeavors. By focusing on key areas, the program has been shortened from 12 weeks to seven, saving valuable time without sacrificing quality. Special thanks go to Microsoft Power Platform advocates, April Dunnam and Renee Noble who shared their expertise and to Power Up Program champs who contributed with feedback and reviews over the last 1+ year to make this significant improvement.   Easy access to a comprehensive Development Environment In addition, the program now offers simplified and instant access to a comprehensive development environment for Power Up Program learners to explore and experiment with the Power Platform in a sandbox environment, fostering creativity and innovation.     Introducing App-In-A-Day (AIAD) workshops for Power Up learners As an added incentive, participants of the Microsoft Power Up Program can now sign up for partner-led “App in a Day” virtual workshops. These workshops, conducted by industry experts and Microsoft partners, provide invaluable insights and practical guidance to supplement the core curriculum. By attending these workshops, learners can gain deeper insights into application development and further enhance their skills in leveraging the Power Platform for business solutions. A big shout to our partners that are supporting the Power Up Program and delivering these AIAD workshops: Advaiya, Almato AG, Braintree, Kaispe, Koenig Solutions, PowerApps 911, Pragmatic Works, Smart Consulting.   These enhancements introduced to the Microsoft Power Up Program mark a significant milestone in the ongoing quest to empower individuals with the skills needed to thrive in today’s digital economy. By embracing video-based learning, streamlining the curriculum, and offering personalized experiences, the program continues to set new standards of excellence in virtual education. Sign up today to start your Power Up learning journey (https://aka.ms/PowerUp/)   by Dimpi Gandhi, Principal PM Lead, Power Up ProgramRepost from Microsoft Power Platform Product Blog

Announcing Power Apps Copilot Cookbook Gallery

We are excited to share that the all-new Copilot Cookbook Gallery for Power Apps is now available in the Power Apps Community, full of tips and tricks on how to best use Microsoft Copilot as you develop and create in Power Apps. The new Copilot Cookbook is your go-to resource when you need inspiration--or when you're stuck--and aren't sure how to best partner with Copilot while creating apps.   Whether you're looking for the best prompts or just want to know about responsible AI use, visit Copilot Cookbook for regular updates you can rely on--while also serving up some of your greatest tips and tricks for the Community. Our team will be reviewing posts using the new "Copilot" label to ensure we highlight and amplify the most relevant and recent content, so you're assured of high-quality content every time you visit. If you share a post that gets featured in the curated gallery, you'll get a PM in the Community to let you know!The curated gallery is ready for you to experience now, so visit the new Copilot Cookbook for Power Apps today: Copilot Cookbook - Power Platform Community. We can't wait to see what you "cook" up!    

Tuesday Tips: Getting Started in the Community

TUESDAY TIPS is back!   This weekly series of posts is our way of sharing helpful things we've learned or shared that have helped members of the Community. Whether you're just getting started or you're a seasoned pro, Tuesday Tips will help you know where to go, what to look for, and navigate your way through the ever-growing--and ever-changing--world of the Power Platform Community! The original run of Tuesday Tips was a highlight of last year, and these all-new Tips will hopefully prove to be just as informative as helpful. We will cover some basics about the Community, a few "insider tips" to make your experience even better, and sharing best practices gleaned from our most active community members and Super Users. Make sure to watch the News & Announcements each week for the latest and greatest Tuesday Tips!   THIS WEEK: I'm Brand New! What Do I Do? The number of new community members we have each week is pretty amazing, and we are so glad to welcome all of you to the Community! You may be wondering. "What do I do? Where do I get started? Will anyone be willing to help me? What I have a question? Help!"   Let's start with this: Welcome to the low-code revolution, and more importantly, welcome to the Power Platform Community! This is a great place to start. Whether you're busy with Power Apps, getting familiar with Power Automate, engaging Copilot Studio, or building in Power Pages, there are a few key places you should check out as you begin your journey: FORUMS: The forums are THE place to ask questions, look at questions asked by other Community members—and see answers and solutions from our Super Users and other helpful people in the Community. Power Apps ForumsPower Automate ForumsCopilot Studio ForumsPower Pages Forums   NEWS & ANNOUNCEMENTS: Our News & Announcements section highlights the newest and greatest updates in the Community, news from the product team, and so much more. It’s updated a few times each week and will also help you find ways to connect with what’s going on in the ever-growing world of Power Platform. Power Apps News & AnnouncementsPower Automate News & AnnouncementsCopilot Studio News & AnnouncementsPower Pages News & Announcements   GALLERIES: The Galleries section of the Community features tons of tips and tricks, features and benefits, and more—through videos created by our Super Users, product teams, and other helpful members of the Community. Power Apps GalleriesPower Automate Galleries Copilot Studio GalleriesPower Pages Galleries BLOGS: The community blogs section is full of handy step-by-step tips from members of the Community—and some of them include detailed answers to some of the questions most frequently asked questions, as well as how they solved a problem they faced. Power Apps Community BlogPower Automate Community BlogCopilot Studio Community BlogPower Pages Community Blog POWER UP PROGRAM: If you’d like to really take a huge step forward in your journey, we recommend checking out the Power Up Program, a Microsoft-sponsored initiative that trains new Power Platform users and has been a huge success since it launched a little over a year ago. There’s a waiting list, so definitely apply soon if you’re interested! Find out more here: Microsoft Power Up Program for career switchers.   There's so much more you'll discover in your Power Platform experience, and this Community is here for YOU! We are glad you've discovered us and can't wait to see where you grow! If you're new to the Community and just getting started, make sure to give this post a kudo and introduce yourself so we can welcome you!

Super User of the Month | Drew Poggemann

As part of a new monthly feature in the Community, we are excited to share that Drew Poggemann is our featured Super User for the month of February 2024. If you've been in the Community for a while, we're sure Drew's name is familiar to you, as he is one of our most active contributors--he's been a Super User for five consecutive seasons!   Since authoring his first reply 5 years ago to his 514th solution authored, Drew has helped countless Community members with his insights and expertise. In addition to being a Super User, Drew is also a User Group leader and a Microsoft MVP. His contributions to our Super User sessions and to the new SUIT program are always welcome--as well as his sense of humor and fun-loving way of sharing what he knows with others.   When Drew is not solving problems and authoring solutions, he's busy overseeing the Solution Architecture team at HBS, specializing in application architecture and business solution strategy--something he's been doing for over 30 years. We are grateful for Drew and the amazing way he has used his talent and skills to help so many others in the Community. If you are part of the SUIT program, you got to hear some great tips from Drew at the first SUIT session--and we know he still has much more to share!You can find him in the Community and on LinkedIn. Thank you for all you do, Drew!

Super Users 2024 Season One is Here!

   We are excited to announce the first season of our 2024 Super Users is here! Our kickoff to the new year welcomes many returning Super Users and several new faces, and it's always exciting to see the impact these incredible individuals will have on the Community in 2024! We are so grateful for the daily difference they make in the Community already and know they will keep staying engaged and excited for all that will happen this year.   How to Spot a Super User in the Community:Have you ever written a post or asked for help in the Community and had it answered by a user with the Super User icon next to their name? It means you have found the actual, real-life superheroes of the Power Platform Community! Super Users are our heroes because of the way they consistently make a difference in the Community. Our amazing Super Users help keep the Community a safe place by flagging spam and letting the Community Managers know about issues. They also make the Community a great place to find answers, because they are often the first to offer solutions and get clarity on questions. Finally, Super Users share valuable insights on ways to keep the Community growing, engaging, and looking ahead!We are honored to reveal the new badges for this season of Super Users! Congratulations to all the new and returning Super Users!     To better answer the question "What is a Super User?" please check out this article: Power Apps: What is A Super User? - Power Platform CommunityPower Automate: What is A Super User? - Power Platform Community Copilot Studio: What is A Super User? - Power Platform Community Power Pages: What is A Super User? - Power Platform Community

Users online (2,071)